<?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>49863</bug_id>
          
          <creation_ts>2010-11-20 03:52:37 -0800</creation_ts>
          <short_desc>FilterPrimitives should have a pointer to its Filter object</short_desc>
          <delta_ts>2014-05-12 05:54:35 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68469</blocked>
    
    <blocked>26389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Renata Hodovan">rhodovan.u-szeged</reporter>
          <assigned_to name="Renata Hodovan">rhodovan.u-szeged</assigned_to>
          <cc>kling</cc>
    
    <cc>krit</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>311912</commentid>
    <comment_count>0</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-11-20 03:52:37 -0800</bug_when>
    <thetext>FilterPrimitives should have a renderer, and they need a member pointer to their Filter objects for Layout() calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311915</commentid>
    <comment_count>1</comment_count>
      <attachid>74479</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-11-20 04:19:11 -0800</bug_when>
    <thetext>Created attachment 74479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311917</commentid>
    <comment_count>2</comment_count>
      <attachid>74479</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-20 04:55:31 -0800</bug_when>
    <thetext>Comment on attachment 74479
Patch

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

Great to see progress! The patch looks good. r=me

Just one note:

&gt; WebCore/platform/graphics/filters/FEDisplacementMap.cpp:112
&gt; +    float scaleX = filter()-&gt;applyHorizontalScale(m_scale / 255);
&gt; +    float scaleY = filter()-&gt;applyVerticalScale(m_scale / 255);
&gt; +    float scaleAdjustmentX = filter()-&gt;applyHorizontalScale(0.5f - 0.5f * m_scale);
&gt; +    float scaleAdjustmentY = filter()-&gt;applyVerticalScale(0.5f - 0.5f * m_scale);
&gt;      int stride = imageRect.width() * 4;

Can you store them in a local var? Filter* filter = this-&gt;filter() ? The same on several other places where you call filter() multiple times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311919</commentid>
    <comment_count>3</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-11-20 06:22:03 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 74479 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74479&amp;action=review
&gt; 
&gt; Great to see progress! The patch looks good. r=me
&gt; 
&gt; Just one note:
&gt; 
&gt; &gt; WebCore/platform/graphics/filters/FEDisplacementMap.cpp:112
&gt; &gt; +    float scaleX = filter()-&gt;applyHorizontalScale(m_scale / 255);
&gt; &gt; +    float scaleY = filter()-&gt;applyVerticalScale(m_scale / 255);
&gt; &gt; +    float scaleAdjustmentX = filter()-&gt;applyHorizontalScale(0.5f - 0.5f * m_scale);
&gt; &gt; +    float scaleAdjustmentY = filter()-&gt;applyVerticalScale(0.5f - 0.5f * m_scale);
&gt; &gt;      int stride = imageRect.width() * 4;
&gt; 
&gt; Can you store them in a local var? Filter* filter = this-&gt;filter() ? The same on several other places where you call filter() multiple times.

It&apos;s done and landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311922</commentid>
    <comment_count>4</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-11-20 07:50:17 -0800</bug_when>
    <thetext>This is landed in &lt;http://trac.webkit.org/changeset/72474&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311934</commentid>
    <comment_count>5</comment_count>
      <attachid>74479</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-11-20 09:19:01 -0800</bug_when>
    <thetext>Comment on attachment 74479
Patch

Is the Filter pointer always guaranteed to be alive for the whole life cycle of a FilterEffect class?
Filter is RefCounted, and I want to be sure that someone holds the ref to the Filter while FilterEffects are built.

Is there any time we could reset the m_filter to 0? Currently m_filter is only initialized, never cleared anywhere, so I&apos;d like to be sure that its guarenteed to live longer than the FilterEffects...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311943</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-20 09:38:05 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 74479 [details])
&gt; Is the Filter pointer always guaranteed to be alive for the whole life cycle of a FilterEffect class?
&gt; Filter is RefCounted, and I want to be sure that someone holds the ref to the Filter while FilterEffects are built.
&gt; 
&gt; Is there any time we could reset the m_filter to 0? Currently m_filter is only initialized, never cleared anywhere, so I&apos;d like to be sure that its guarenteed to live longer than the FilterEffects...

FilterBuilder (holds all effects) and Filter are stored in FilterData on RenderSVGResourceFilter and get cleared together.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74479</attachid>
            <date>2010-11-20 04:19:11 -0800</date>
            <delta_ts>2010-11-20 09:19:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>filterEffect_v1.3.patch</filename>
            <type>text/plain</type>
            <size>102536</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTg3IEBACisyMDEwLTExLTIwICBSZW5hdGEgSG9kb3ZhbiAgPHJlbmlAaW5mLnUt
c3plZ2VkLmh1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZpbHRlclByaW1pdGl2ZXMgc2hvdWxkIGhhdmUgYSBwb2ludGVyIHRvIGl0cyBGaWx0ZXIg
b2JqZWN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDk4NjMKKworICAgICAgICBGaWx0ZXJQcmltaXRpdmVzIHNob3VsZCBoYXZlIGEgcmVuZGVyZXIs
IGFuZCB0aGV5IG5lZWQgYSBtZW1iZXIgcG9pbnRlciB0byB0aGVpciBGaWx0ZXIgb2JqZWN0cyBm
b3IgTGF5b3V0KCkgY2FsbHMuCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGlzIG1lbWJlciB0
byBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgTm8gbmV3IHRlc3QgaXMgbmVlZGVkIGJlY2F1c2Ug
dGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgY292ZXJlZCBieSBhbGwgb2YgU1ZHIEZpbHRlciB0ZXN0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpGRUJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
QmxlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjphcHBseSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmFw
cGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25l
bnRUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29tcG9zaXRlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9z
aXRlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
c2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZl
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjphcHBseSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbnZvbHZlTWF0cml4OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZs
b29kOjpGRUZsb29kKToKKyAgICAgICAgKFdlYkNvcmU6OkZFRmxvb2Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUZsb29kOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
RkVHYXVzc2lhbkJsdXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmFwcGx5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTWVyZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjphcHBs
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3kpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVNb3JwaG9sb2d5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3k6OmFwcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFT2Zmc2V0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0Ojph
cHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2U6OkZFVHVyYnVsZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmFwcGx5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmVmZmVjdENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUFscGhhOjpTb3VyY2VBbHBoYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjphcHBseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOgorICAgICAgICAqIHJl
bmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRl
U1ZHUmVzb3VyY2VDb250YWluZXIpOgorICAgICAgICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5kRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAqIHN2Zy9TVkdGRUJsZW5kRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbG9yTWF0
cml4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbG9yTWF0cml4RWxlbWVu
dDo6YnVpbGQpOgorICAgICAgICAqIHN2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6YnVpbGQpOgorICAgICAgICAq
IHN2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdG
RUNvbXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVF
bGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5n
RWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZCk6
CisgICAgICAgICogc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUZsb29k
RWxlbWVudDo6YnVpbGQpOgorICAgICAgICAqIHN2Zy9TVkdGRUZsb29kRWxlbWVudC5oOgorICAg
ICAgICAqIHN2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6YnVpbGQpOgorICAgICAg
ICAqIHN2Zy9TVkdGRUltYWdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQpOgor
ICAgICAgICAqIHN2Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5oOgor
ICAgICAgICAqIHN2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZCk6CisgICAgICAgICogc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKToK
KyAgICAgICAgKiBzdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAq
IHN2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFVGlsZUVs
ZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAg
ICAqIHN2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJ1aWxkKToKKyAgICAgICAgKiBzdmcvU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmFwcGx5KToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXJCdWlsZGVyOjpjcmVhdGUpOgorCiAyMDEwLTExLTIwICBIZWxkZXIgQ29ycmVpYSAg
PGhlbGRlckBzZW5jaGEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcu
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
CShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTUgKzM1LDE1IEBAIHR5cGVkZWYgdW5z
aWduZWQgY2hhciAoKkJsZW5kVHlwZSkodW5zaWcKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RUJsZW5kOjpGRUJsZW5kKEJsZW5kTW9kZVR5cGUgbW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdCgp
CitGRUJsZW5kOjpGRUJsZW5kKEZpbHRlciogZmlsdGVyLCBCbGVuZE1vZGVUeXBlIG1vZGUpCisg
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyKQogICAgICwgbV9tb2RlKG1vZGUpCiB7CiB9CiAKLVBh
c3NSZWZQdHI8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEJsZW5kTW9kZVR5cGUgbW9kZSkKK1Bh
c3NSZWZQdHI8RkVCbGVuZD4gRkVCbGVuZDo6Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBCbGVuZE1v
ZGVUeXBlIG1vZGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUJsZW5kKG1vZGUpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFQmxlbmQoZmlsdGVyLCBtb2RlKSk7CiB9CiAKIEJs
ZW5kTW9kZVR5cGUgRkVCbGVuZDo6YmxlbmRNb2RlKCkgY29uc3QKQEAgLTg2LDE5ICs4NiwxOSBA
QCBzdGF0aWMgdW5zaWduZWQgY2hhciBsaWdodGVuKHVuc2lnbmVkIGNoCiAgICAgcmV0dXJuICgo
c3RkOjptYXgoKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBh
bHBoYUIpICogY29sb3JBICsgY29sb3JCICogMjU1KSkgLyAyNTUpOwogfQogCi12b2lkIEZFQmxl
bmQ6OmFwcGx5KEZpbHRlciogZmlsdGVyKQordm9pZCBGRUJsZW5kOjphcHBseSgpCiB7CiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4y
ID0gaW5wdXRFZmZlY3QoMSk7Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaW4yLT5hcHBs
eShmaWx0ZXIpOworICAgIGluLT5hcHBseSgpOworICAgIGluMi0+YXBwbHkoKTsKICAgICBpZiAo
IWluLT5yZXN1bHRJbWFnZSgpIHx8ICFpbjItPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChtX21vZGUgPD0gRkVCTEVORF9NT0RFX1VOS05PV04gfHwgbV9tb2RlID4g
RkVCTEVORF9NT0RFX0xJR0hURU4pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZWZmZWN0
Q29udGV4dChmaWx0ZXIpKQorICAgIGlmICghZWZmZWN0Q29udGV4dCgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCShyZXZpc2lvbiA3MjA4OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDE4ICs0MCwxOCBAQCBlbnVtIEJsZW5kTW9kZVR5cGUgewogCiBjbGFzcyBGRUJs
ZW5kIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RkVCbGVuZD4gY3JlYXRlKEJsZW5kTW9kZVR5cGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZFQmxlbmQ+IGNyZWF0ZShGaWx0ZXIqLCBCbGVuZE1vZGVUeXBlKTsKIAogICAgIEJsZW5kTW9k
ZVR5cGUgYmxlbmRNb2RlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRCbGVuZE1vZGUoQmxlbmRNb2Rl
VHlwZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgVGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlv
bikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRkVCbGVuZChCbGVuZE1vZGVUeXBlKTsKKyAgICBG
RUJsZW5kKEZpbHRlciosIEJsZW5kTW9kZVR5cGUpOwogCiAgICAgQmxlbmRNb2RlVHlwZSBtX21v
ZGU7CiB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDE2ICszMywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFQ29sb3JNYXRyaXg6OkZF
Q29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlIHR5cGUsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlcykKLSAgICA6IEZpbHRlckVmZmVjdCgpCitGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4
KEZpbHRlciogZmlsdGVyLCBDb2xvck1hdHJpeFR5cGUgdHlwZSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWVzKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKICAgICAsIG1fdHlwZSh0eXBl
KQogICAgICwgbV92YWx1ZXModmFsdWVzKQogewogfQogCi1QYXNzUmVmUHRyPEZFQ29sb3JNYXRy
aXg+IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShDb2xvck1hdHJpeFR5cGUgdHlwZSwgY29uc3QgVmVj
dG9yPGZsb2F0PiYgdmFsdWVzKQorUGFzc1JlZlB0cjxGRUNvbG9yTWF0cml4PiBGRUNvbG9yTWF0
cml4OjpjcmVhdGUoRmlsdGVyKiBmaWx0ZXIsIENvbG9yTWF0cml4VHlwZSB0eXBlLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbG9y
TWF0cml4KHR5cGUsIHZhbHVlcykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb2xvck1h
dHJpeChmaWx0ZXIsIHR5cGUsIHZhbHVlcykpOwogfQogCiBDb2xvck1hdHJpeFR5cGUgRkVDb2xv
ck1hdHJpeDo6dHlwZSgpIGNvbnN0CkBAIC0xNDgsMTQgKzE0OCwxNCBAQCB2b2lkIGVmZmVjdFR5
cGUoQnl0ZUFycmF5KiBwaXhlbEFycmF5LCBjCiAgICAgfQogfQogCi12b2lkIEZFQ29sb3JNYXRy
aXg6OmFwcGx5KEZpbHRlciogZmlsdGVyKQordm9pZCBGRUNvbG9yTWF0cml4OjphcHBseSgpCiB7
CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseShm
aWx0ZXIpOworICAgIGluLT5hcHBseSgpOwogICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVm
ZmVjdENvbnRleHQoZmlsdGVyKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQg
PSBlZmZlY3RDb250ZXh0KCk7CiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1
cm47CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIGVudW0gQ29sb3JNYXRyaXhUeXBlIHsKIAogY2xhc3MgRkVDb2xvck1hdHJpeCA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ29sb3JN
YXRyaXg+IGNyZWF0ZShDb2xvck1hdHJpeFR5cGUsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbG9yTWF0cml4PiBjcmVhdGUoRmlsdGVyKiwgQ29sb3JN
YXRyaXhUeXBlLCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKICAgICBDb2xvck1hdHJpeFR5cGUg
dHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VHlwZShDb2xvck1hdHJpeFR5cGUpOwpAQCAtNDgs
MTMgKzQ4LDEzIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBj
b25zdDsKICAgICB2b2lkIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mKTsKKyAgICBGRUNvbG9yTWF0cml4KEZpbHRlciosIENvbG9yTWF0cml4VHlwZSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYpOwogCiAgICAgQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKICAgICBW
ZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkocmV2aXNpb24g
NzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0eXBlZGVmIHZvaWQgKCpUcmFuc2ZlclR5cGUpKHVuc2lnbmVkIGNoYXIqLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CiAKLUZFQ29tcG9uZW50VHJhbnNmZXI6
OkZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVk
RnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAorRkVDb21w
b25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXIqIGZpbHRlciwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKQotICAgIDogRmlsdGVyRWZmZWN0
KCkKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIpCiAgICAgLCBtX3JlZEZ1bmMocmVkRnVuYykK
ICAgICAsIG1fZ3JlZW5GdW5jKGdyZWVuRnVuYykKICAgICAsIG1fYmx1ZUZ1bmMoYmx1ZUZ1bmMp
CkBAIC00NiwxMCArNDYsMTAgQEAgRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFu
c2ZlcgogewogfQogCi1QYXNzUmVmUHRyPEZFQ29tcG9uZW50VHJhbnNmZXI+IEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5j
LCAKK1Bhc3NSZWZQdHI8RkVDb21wb25lbnRUcmFuc2Zlcj4gRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBy
ZWRGdW5jLCAKICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGRUNvbXBvbmVudFRyYW5zZmVyKHJlZEZ1bmMsIGdyZWVuRnVuYywgYmx1ZUZ1bmMsIGFscGhh
RnVuYykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDb21wb25lbnRUcmFuc2ZlcihmaWx0
ZXIsIHJlZEZ1bmMsIGdyZWVuRnVuYywgYmx1ZUZ1bmMsIGFscGhhRnVuYykpOwogfQogCiBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIEZFQ29tcG9uZW50VHJhbnNmZXI6OnJlZEZ1bmN0aW9uKCkg
Y29uc3QKQEAgLTE0NywxNCArMTQ3LDE0IEBAIHN0YXRpYyB2b2lkIGdhbW1hKHVuc2lnbmVkIGNo
YXIqIHZhbHVlcywKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHko
RmlsdGVyKiBmaWx0ZXIpCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KCkKIHsKICAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KGZpbHRl
cik7CisgICAgaW4tPmFwcGx5KCk7CiAgICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KGZpbHRlcikpCisgICAgaWYgKCFl
ZmZlY3RDb250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGNoYXIgclZh
bHVlc1syNTZdLCBnVmFsdWVzWzI1Nl0sIGJWYWx1ZXNbMjU2XSwgYVZhbHVlc1syNTZdOwpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5oCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDcgKzYzLDcgQEAgc3RydWN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gewogCiBjbGFzcyBG
RUNvbXBvbmVudFRyYW5zZmVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RkVDb21wb25lbnRUcmFuc2Zlcj4gY3JlYXRlKGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGdyZWVuRnVuYywKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUNvbXBvbmVudFRyYW5z
ZmVyPiBjcmVhdGUoRmlsdGVyKiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVk
RnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYWxwaGFGdW5jKTsKIAogICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gcmVkRnVu
Y3Rpb24oKSBjb25zdDsKQEAgLTc4LDEzICs3OCwxMyBAQCBwdWJsaWM6CiAgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBhbHBoYUZ1bmN0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbHBo
YUZ1bmN0aW9uKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2
aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKIAogcHJpdmF0
ZToKLSAgICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywK
KyAgICBGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciosIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVu
RnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGJsdWVGdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1
bmMpOwogCiAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBtX3JlZEZ1bmM7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAJ
KHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVP
cGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKLSAgICA6IEZpbHRlckVmZmVjdCgpCitGRUNvbXBvc2l0ZTo6RkVDb21wb3NpdGUoRmlsdGVy
KiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0IGsxLCBm
bG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikK
ICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9rMShrMSkKICAgICAsIG1fazIoazIpCkBAIC00
Miw5ICs0Miw5IEBAIEZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGUKIHsK
IH0KIAotUGFzc1JlZlB0cjxGRUNvbXBvc2l0ZT4gRkVDb21wb3NpdGU6OmNyZWF0ZShjb25zdCBD
b21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGsz
LCBmbG9hdCBrNCkKK1Bhc3NSZWZQdHI8RkVDb21wb3NpdGU+IEZFQ29tcG9zaXRlOjpjcmVhdGUo
RmlsdGVyKiBmaWx0ZXIsIGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmIHR5cGUsIGZsb2F0
IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRkVDb21wb3NpdGUodHlwZSwgazEsIGsyLCBrMywgazQpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZFQ29tcG9zaXRlKGZpbHRlciwgdHlwZSwgazEsIGsyLCBrMywgazQpKTsKIH0K
IAogQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSBGRUNvbXBvc2l0ZTo6b3BlcmF0aW9uKCkgY29uc3QK
QEAgLTExNCw3ICsxMTQsNyBAQCBpbmxpbmUgdm9pZCBhcml0aG1ldGljKGNvbnN0IEJ5dGVBcnJh
eSogCiAgICAgfQogfQogICAgIAotdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoRmlsdGVyKiBmaWx0ZXIpCit2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09N
UE9TSVRFX09QRVJBVE9SX0lOOgpAQCAtMTMwLDIxICsxMzAsMjEgQEAgdm9pZCBGRUNvbXBvc2l0
ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludAogICAgICAgICByZXR1cm47CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAg
ICBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7CisgICAg
ICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoRmlsdGVyKiBmaWx0
ZXIpCit2b2lkIEZFQ29tcG9zaXRlOjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7
Ci0gICAgaW4tPmFwcGx5KGZpbHRlcik7Ci0gICAgaW4yLT5hcHBseShmaWx0ZXIpOworICAgIGlu
LT5hcHBseSgpOworICAgIGluMi0+YXBwbHkoKTsKICAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgp
IHx8ICFpbjItPnJlc3VsdEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoZmlsdGVyKTsKKyAgICBHcmFw
aGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7CiAgICAgaWYgKCFm
aWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCShyZXZpc2lvbiA3MjA4OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGVudW0gQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSB7CiAK
IGNsYXNzIEZFQ29tcG9zaXRlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8RkVDb21wb3NpdGU+IGNyZWF0ZShjb25zdCBDb21wb3NpdGVPcGVy
YXRpb25UeXBlJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZFQ29tcG9zaXRlPiBjcmVhdGUoRmlsdGVyKiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAogICAgIENvbXBvc2l0ZU9w
ZXJhdGlvblR5cGUgb3BlcmF0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSk7CkBAIC01OSwxNSArNTksMTUgQEAgcHVibGljOgogICAgIGZs
b2F0IGs0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRLNChmbG9hdCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CiAgICAgdmlydHVh
bCB2b2lkIGR1bXAoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZF
Q29tcG9zaXRlKGNvbnN0IENvbXBvc2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCwgZmxvYXQsIGZs
b2F0LCBmbG9hdCk7CisgICAgRkVDb21wb3NpdGUoRmlsdGVyKiwgY29uc3QgQ29tcG9zaXRlT3Bl
cmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAogICAgIENvbXBvc2l0
ZU9wZXJhdGlvblR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fazE7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJp
eChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLAorRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2
ZU1hdHJpeChGaWx0ZXIqIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBm
bG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUsCiAgICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExl
bmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRy
aXgpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKICAg
ICAsIG1fa2VybmVsU2l6ZShrZXJuZWxTaXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAg
ICAgLCBtX2JpYXMoYmlhcykKQEAgLTQ3LDExICs0NywxMSBAQCBGRUNvbnZvbHZlTWF0cml4OjpG
RUNvbnZvbHZlTWF0cml4KGNvbnN0CiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVDb252b2x2ZU1hdHJp
eD4gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsCitQ
YXNzUmVmUHRyPEZFQ29udm9sdmVNYXRyaXg+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShGaWx0
ZXIqIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwKICAgICBmbG9hdCBkaXZpc29y
LCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUsCiAgICAgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBw
cmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGtlcm5lbFNpemUsIGRpdmlzb3Is
IGJpYXMsIHRhcmdldE9mZnNldCwgZWRnZU1vZGUsIGtlcm5lbFVuaXRMZW5ndGgsCisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBGRUNvbnZvbHZlTWF0cml4KGZpbHRlciwga2VybmVsU2l6ZSwgZGl2
aXNvciwgYmlhcywgdGFyZ2V0T2Zmc2V0LCBlZGdlTW9kZSwga2VybmVsVW5pdExlbmd0aCwKICAg
ICAgICAgcHJlc2VydmVBbHBoYSwga2VybmVsTWF0cml4KSk7CiB9CiAKQEAgLTM3MCwxNCArMzcw
LDE0IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXQKICAgICAgICAg
ZmFzdFNldE91dGVyUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsK
IH0KIAotdm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3ZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBpbi0+YXBwbHkoKTsKICAg
ICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVm
ZmVjdENvbnRleHQoZmlsdGVyKSkKKyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2Uo
KS0+c2l6ZSgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIENhbnZhc1BpeGVsQXJyYXk7CiAKIGNsYXNzIEZFQ29u
dm9sdmVNYXRyaXggOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGRUNvbnZvbHZlTWF0cml4PiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RkVDb252b2x2ZU1hdHJpeD4gY3JlYXRlKEZpbHRlciosIGNvbnN0
IEludFNpemUmLAogICAgICAgICAgICAgZmxvYXQsIGZsb2F0LCBjb25zdCBJbnRQb2ludCYsIEVk
Z2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsCiAgICAgICAgICAgICBib29sLCBjb25zdCBW
ZWN0b3I8ZmxvYXQ+Jik7CiAKQEAgLTcyLDE1ICs3MiwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBw
cmVzZXJ2ZUFscGhhKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoRmlsdGVyKikgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChtYXhF
ZmZlY3RSZWN0KCkpOyB9CisgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChtYXhFZmZlY3RSZWN0KCkpOyB9CiAKICAgICB2
aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGlu
dCBpbmRlbnRpb24pIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZFQ29udm9sdmVNYXRyaXgoY29u
c3QgSW50U2l6ZSYsIGZsb2F0LCBmbG9hdCwKKyAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlcios
IGNvbnN0IEludFNpemUmLCBmbG9hdCwgZmxvYXQsCiAgICAgICAgICAgICBjb25zdCBJbnRQb2lu
dCYsIEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mKTsKIAogICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3Bw
CShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE3ICsyOCwxNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdo
dGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAorRkVE
aWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciogZmlsdGVyLCBjb25zdCBD
b2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAogICAgIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRp
bmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VD
b25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdo
dFNvdXJjZSkKKyAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0
aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291cmNlKQogewogfQogCi1QYXNzUmVm
UHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbnN0IENv
bG9yJiBsaWdodGluZ0NvbG9yLAorUGFzc1JlZlB0cjxGRURpZmZ1c2VMaWdodGluZz4gRkVEaWZm
dXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5n
Q29sb3IsCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBQYXNz
UmVmUHRyPExpZ2h0U291cmNlPiBsaWdodFNvdXJjZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEZFRGlmZnVzZUxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVz
ZUNvbnN0YW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291
cmNlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRURpZmZ1c2VMaWdodGluZyhmaWx0ZXIs
IGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCBrZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291cmNlKSk7CiB9CiAKIEZFRGlmZnVz
ZUxpZ2h0aW5nOjp+RkVEaWZmdXNlTGlnaHRpbmcoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgJKHJldmlzaW9u
IDcyMDg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgY2xhc3MgTGlnaHRTb3Vy
Y2U7CiAKIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlmZnVzZUxpZ2h0aW5nPiBjcmVhdGUoY29u
c3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVEaWZmdXNl
TGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXIqLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKICAg
ICAgICAgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7CiAgICAgdmlydHVh
bCB+RkVEaWZmdXNlTGlnaHRpbmcoKTsKIApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRURpZmZ1c2VMaWdodGluZyhj
b25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0
U291cmNlPik7CisgICAgRkVEaWZmdXNlTGlnaHRpbmcoRmlsdGVyKiwgY29uc3QgQ29sb3ImLCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShyZXZpc2lvbiA3
MjA4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxOCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5u
ZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQorRkVEaXNwbGFj
ZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciogZmlsdGVyLCBDaGFubmVsU2VsZWN0
b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxl
Y3RvciwgZmxvYXQgc2NhbGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyKQogICAgICwgbV94
Q2hhbm5lbFNlbGVjdG9yKHhDaGFubmVsU2VsZWN0b3IpCiAgICAgLCBtX3lDaGFubmVsU2VsZWN0
b3IoeUNoYW5uZWxTZWxlY3RvcikKICAgICAsIG1fc2NhbGUoc2NhbGUpCiB7CiB9CiAKLVBhc3NS
ZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGUoQ2hhbm5l
bFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLAorUGFzc1JlZlB0cjxGRURpc3BsYWNlbWVu
dE1hcD4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlciwgQ2hhbm5lbFNl
bGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLAogICAgIENoYW5uZWxTZWxlY3RvclR5cGUgeUNo
YW5uZWxTZWxlY3RvciwgZmxvYXQgc2NhbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBG
RURpc3BsYWNlbWVudE1hcCh4Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2Fs
ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVEaXNwbGFjZW1lbnRNYXAoZmlsdGVyLCB4
Q2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBzY2FsZSkpOwogfQogCiBDaGFubmVs
U2VsZWN0b3JUeXBlIEZFRGlzcGxhY2VtZW50TWFwOjp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QK
QEAgLTc2LDE5ICs3NiwxOSBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZShmbG9h
dCBzCiAgICAgbV9zY2FsZSA9IHNjYWxlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjph
cHBseShGaWx0ZXIqIGZpbHRlcikKK3ZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KCkKIHsK
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKLSAgICBpbjIt
PmFwcGx5KGZpbHRlcik7CisgICAgaW4tPmFwcGx5KCk7CisgICAgaW4yLT5hcHBseSgpOwogICAg
IGlmICghaW4tPnJlc3VsdEltYWdlKCkgfHwgIWluMi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKG1feENoYW5uZWxTZWxlY3RvciA9PSBDSEFOTkVMX1VOS05PV04g
fHwgbV95Q2hhbm5lbFNlbGVjdG9yID09IENIQU5ORUxfVU5LTk9XTikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCFlZmZlY3RDb250ZXh0KGZpbHRlcikpCisgICAgaWYgKCFlZmZlY3RDb250
ZXh0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0
ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7CkBAIC0xMDUsMTAgKzEwNSwxMCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseShG
aWx0ZXIqIGZpCiAKICAgICBBU1NFUlQoc3JjUGl4ZWxBcnJheUEtPmxlbmd0aCgpID09IHNyY1Bp
eGVsQXJyYXlCLT5sZW5ndGgoKSk7CiAKLSAgICBmbG9hdCBzY2FsZVggPSBmaWx0ZXItPmFwcGx5
SG9yaXpvbnRhbFNjYWxlKG1fc2NhbGUgLyAyNTUpOwotICAgIGZsb2F0IHNjYWxlWSA9IGZpbHRl
ci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fc2NhbGUgLyAyNTUpOwotICAgIGZsb2F0IHNjYWxlQWRq
dXN0bWVudFggPSBmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKDAuNWYgLSAwLjVmICogbV9z
Y2FsZSk7Ci0gICAgZmxvYXQgc2NhbGVBZGp1c3RtZW50WSA9IGZpbHRlci0+YXBwbHlWZXJ0aWNh
bFNjYWxlKDAuNWYgLSAwLjVmICogbV9zY2FsZSk7CisgICAgZmxvYXQgc2NhbGVYID0gZmlsdGVy
KCktPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fc2NhbGUgLyAyNTUpOworICAgIGZsb2F0IHNjYWxl
WSA9IGZpbHRlcigpLT5hcHBseVZlcnRpY2FsU2NhbGUobV9zY2FsZSAvIDI1NSk7CisgICAgZmxv
YXQgc2NhbGVBZGp1c3RtZW50WCA9IGZpbHRlcigpLT5hcHBseUhvcml6b250YWxTY2FsZSgwLjVm
IC0gMC41ZiAqIG1fc2NhbGUpOworICAgIGZsb2F0IHNjYWxlQWRqdXN0bWVudFkgPSBmaWx0ZXIo
KS0+YXBwbHlWZXJ0aWNhbFNjYWxlKDAuNWYgLSAwLjVmICogbV9zY2FsZSk7CiAgICAgaW50IHN0
cmlkZSA9IGltYWdlUmVjdC53aWR0aCgpICogNDsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGlt
YWdlUmVjdC5oZWlnaHQoKTsgKyt5KSB7CiAgICAgICAgIGludCBsaW5lID0geSAqIHN0cmlkZTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5oCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3
ICszOSw3IEBAIGVudW0gQ2hhbm5lbFNlbGVjdG9yVHlwZSB7CiAKIGNsYXNzIEZFRGlzcGxhY2Vt
ZW50TWFwIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RkVEaXNwbGFjZW1lbnRNYXA+IGNyZWF0ZShDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFu
bmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFRGlzcGxhY2VtZW50TWFwPiBjcmVhdGUoRmlsdGVy
KiwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JU
eXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKIAogICAgIENoYW5uZWxTZWxlY3RvclR5cGUg
eENoYW5uZWxTZWxlY3RvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0WENoYW5uZWxTZWxlY3Rvcihj
b25zdCBDaGFubmVsU2VsZWN0b3JUeXBlKTsKQEAgLTUwLDE1ICs1MCwxNSBAQCBwdWJsaWM6CiAg
ICAgZmxvYXQgc2NhbGUoKSBjb25zdDsKICAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KEZpbHRlciopIHsgc2V0QWJzb2x1dGVQYWludFJlY3QobWF4
RWZmZWN0UmVjdCgpKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpIHsgc2V0QWJzb2x1dGVQYWludFJlY3QobWF4RWZmZWN0UmVjdCgpKTsgfQogCiAgICAg
dmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRURpc3BsYWNlbWVudE1hcChD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUg
eUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOworICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlcios
IENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlw
ZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1f
eENoYW5uZWxTZWxlY3RvcjsKICAgICBDaGFubmVsU2VsZWN0b3JUeXBlIG1feUNoYW5uZWxTZWxl
Y3RvcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9v
ZC5jcHAJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUZsb29kOjpGRUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENv
bG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQorRkVGbG9vZDo6
RkVGbG9vZChGaWx0ZXIqIGZpbHRlciwgY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZsb2F0IGZs
b29kT3BhY2l0eSkKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIpCiAgICAgLCBtX2Zsb29kQ29s
b3IoZmxvb2RDb2xvcikKICAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0eSkKIHsKIH0K
IAotUGFzc1JlZlB0cjxGRUZsb29kPiBGRUZsb29kOjpjcmVhdGUoY29uc3QgQ29sb3ImIGZsb29k
Q29sb3IsIGZsb2F0IGZsb29kT3BhY2l0eSkKK1Bhc3NSZWZQdHI8RkVGbG9vZD4gRkVGbG9vZDo6
Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxv
b2RPcGFjaXR5KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVGbG9vZChmbG9vZENvbG9y
LCBmbG9vZE9wYWNpdHkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFRmxvb2QoZmlsdGVy
LCBmbG9vZENvbG9yLCBmbG9vZE9wYWNpdHkpKTsKIH0KIAogQ29sb3IgRkVGbG9vZDo6Zmxvb2RD
b2xvcigpIGNvbnN0CkBAIC02Miw5ICs2Miw5IEBAIHZvaWQgRkVGbG9vZDo6c2V0Rmxvb2RPcGFj
aXR5KGZsb2F0IGZsb28KICAgICBtX2Zsb29kT3BhY2l0eSA9IGZsb29kT3BhY2l0eTsKIH0KIAot
dm9pZCBGRUZsb29kOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3ZvaWQgRkVGbG9vZDo6YXBwbHko
KQogewotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQo
ZmlsdGVyKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250
ZXh0KCk7CiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAkocmV2aXNpb24g
NzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRkVGbG9vZCA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZFRmxvb2Q+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0KTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGRUZsb29kPiBjcmVhdGUoRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IENvbG9y
JiwgZmxvYXQpOwogCiAgICAgQ29sb3IgZmxvb2RDb2xvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0
Rmxvb2RDb2xvcihjb25zdCBDb2xvciAmKTsKQEAgLTM5LDE1ICszOSwxNSBAQCBwdWJsaWM6CiAg
ICAgZmxvYXQgZmxvb2RPcGFjaXR5KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRGbG9vZE9wYWNpdHko
ZmxvYXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAgIHZpcnR1YWwg
dm9pZCBhcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoRmlsdGVyKikgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpOyB9CisgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChtYXhFZmZlY3RSZWN0KCkpOyB9
CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZFRmxvb2QoY29u
c3QgQ29sb3ImLCBmbG9hdCk7CisgICAgRkVGbG9vZChGaWx0ZXIqLCBjb25zdCBDb2xvciYsIGZs
b2F0KTsKIAogICAgIENvbG9yIG1fZmxvb2RDb2xvcjsKICAgICBmbG9hdCBtX2Zsb29kT3BhY2l0
eTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
R2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwx
NiArNDAsMTYgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdNYXhLZXJuZWxTaXplID0gMQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9h
dCB4LCBmbG9hdCB5KQotICAgIDogRmlsdGVyRWZmZWN0KCkKK0ZFR2F1c3NpYW5CbHVyOjpGRUdh
dXNzaWFuQmx1cihGaWx0ZXIqIGZpbHRlciwgZmxvYXQgeCwgZmxvYXQgeSkKKyAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIpCiAgICAgLCBtX3N0ZFgoeCkKICAgICAsIG1fc3RkWSh5KQogewogfQog
Ci1QYXNzUmVmUHRyPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZsb2F0
IHgsIGZsb2F0IHkpCitQYXNzUmVmUHRyPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6
Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRkVHYXVzc2lhbkJsdXIoeCwgeSkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRkVHYXVzc2lhbkJsdXIoZmlsdGVyLCB4LCB5KSk7CiB9CiAKIGZsb2F0IEZFR2F1c3NpYW5C
bHVyOjpzdGREZXZpYXRpb25YKCkgY29uc3QKQEAgLTE0NywxNCArMTQ3LDE0IEBAIGlubGluZSB2
b2lkIGNhbGN1bGF0ZUtlcm5lbFNpemUoRmlsdGVyKiAKICAgICAgICAga2VybmVsU2l6ZVkgPSBn
TWF4S2VybmVsU2l6ZTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoRmlsdGVyKiBmaWx0ZXIpCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgYWJzb2x1dGVQYWlu
dFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CiAKICAgICB1bnNpZ25lZCBrZXJuZWxT
aXplWCA9IDA7CiAgICAgdW5zaWduZWQga2VybmVsU2l6ZVkgPSAwOwotICAgIGNhbGN1bGF0ZUtl
cm5lbFNpemUoZmlsdGVyLCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIG1fc3RkWCwgbV9zdGRZ
KTsKKyAgICBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCBrZXJuZWxTaXplWCwga2VybmVs
U2l6ZVksIG1fc3RkWCwgbV9zdGRZKTsKIAogICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVs
IHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVy
IHRocmVlIHRpbWVzLgogICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxT
aXplWCAqIDAuNWYpOwpAQCAtMTYyLDE0ICsxNjIsMTQgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6YXBw
bHkoRmlsdGVyKiBmaWx0ZXIpCit2b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgpCiB7CiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseShmaWx0ZXIp
OworICAgIGluLT5hcHBseSgpOwogICAgIGlmICghaW4tPnJlc3VsdEltYWdlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghZWZmZWN0Q29udGV4dChmaWx0ZXIpKQorICAgIGlmICghZWZm
ZWN0Q29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4t
PmlzQWxwaGFJbWFnZSgpKTsKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVy
OjphcHBseShGaWx0ZXIqIGZpbHRlCiAKICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWCA9IDA7CiAg
ICAgdW5zaWduZWQga2VybmVsU2l6ZVkgPSAwOwotICAgIGNhbGN1bGF0ZUtlcm5lbFNpemUoZmls
dGVyLCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIG1fc3RkWCwgbV9zdGRZKTsKKyAgICBjYWxj
dWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIG1fc3Rk
WCwgbV9zdGRZKTsKIAogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHNyY0ltYWdlRGF0
YS0+ZGF0YSgpLT5kYXRhKCk7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gdG1wSW1hZ2VEYXRhID0g
SW1hZ2VEYXRhOjpjcmVhdGUoaW1hZ2VSZWN0LndpZHRoKCksIGltYWdlUmVjdC5oZWlnaHQoKSk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFR2F1c3NpYW5CbHVyIDogcHVibGljIEZp
bHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RkVHYXVzc2lhbkJs
dXI+IGNyZWF0ZShmbG9hdCwgZmxvYXQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFR2F1c3Np
YW5CbHVyPiBjcmVhdGUoRmlsdGVyKiwgZmxvYXQsIGZsb2F0KTsKIAogICAgIGZsb2F0IHN0ZERl
dmlhdGlvblgoKSBjb25zdDsKICAgICB2b2lkIHNldFN0ZERldmlhdGlvblgoZmxvYXQpOwpAQCAt
NDAsMTUgKzQwLDE1IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBmbG9hdCBjYWxjdWxhdGVTdGRE
ZXZpYXRpb24oZmxvYXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEZpbHRlciopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KEZpbHRlciopOworICAg
IHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiAgICAgdmlydHVh
bCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5k
ZW50aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRUdhdXNzaWFuQmx1cihmbG9hdCwgZmxv
YXQpOworICAgIEZFR2F1c3NpYW5CbHVyKEZpbHRlciosIGZsb2F0LCBmbG9hdCk7CiAKICAgICBm
bG9hdCBtX3N0ZFg7CiAgICAgZmxvYXQgbV9zdGRZOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gNzIwODkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZF
TGlnaHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwKK0ZFTGlnaHRpbmc6OkZFTGln
aHRpbmcoRmlsdGVyKiBmaWx0ZXIsIExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENv
bG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCiAgICAgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwg
UGFzc1JlZlB0cjxMaWdodFNvdXJjZT4gbGlnaHRTb3VyY2UpCi0gICAgOiBGaWx0ZXJFZmZlY3Qo
KQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKICAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0
aW5nVHlwZSkKICAgICAsIG1fbGlnaHRTb3VyY2UobGlnaHRTb3VyY2UpCiAgICAgLCBtX2xpZ2h0
aW5nQ29sb3IobGlnaHRpbmdDb2xvcikKQEAgLTMyOSwxNCArMzI5LDE0IEBAIGJvb2wgRkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKEJ5dGVBcnJheSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3ZvaWQgRkVMaWdodGluZzo6YXBw
bHkoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+
YXBwbHkoZmlsdGVyKTsKKyAgICBpbi0+YXBwbHkoKTsKICAgICBpZiAoIWluLT5yZXN1bHRJbWFn
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVmZmVjdENvbnRleHQoZmlsdGVyKSkK
KyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNB
bHBoYUltYWdlKGZhbHNlKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRkVMaWdodGluZyA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdChGaWx0ZXIqKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KG1heEVmZmVj
dFJlY3QoKSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KSB7IHNldEFic29sdXRlUGFpbnRSZWN0KG1heEVmZmVjdFJlY3QoKSk7IH0KIAogcHJvdGVjdGVk
OgogICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKQEAgLTY5LDcgKzY5LDcgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBpbmxpbmUgdm9pZCBib3R0b21SaWdodChpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9y
bWFsVmVjdG9yKTsKICAgICB9OwogCi0gICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0
IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1Jl
ZlB0cjxMaWdodFNvdXJjZT4pOworICAgIEZFTGlnaHRpbmcoRmlsdGVyKiwgTGlnaHRpbmdUeXBl
LCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKIAogICAgIGJvb2wgZHJhd0xpZ2h0aW5nKEJ5dGVB
cnJheSosIGludCwgaW50KTsKICAgICBpbmxpbmUgdm9pZCBpbmxpbmVTZXRQaXhlbChpbnQgb2Zm
c2V0LCBMaWdodGluZ0RhdGEmLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAJKHJldmlzaW9u
IDcyMDg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyOCArMjksMjggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRU1lcmdlOjpGRU1lcmdlKCkgCi0gICAgOiBGaWx0ZXJFZmZlY3QoKQorRkVNZXJnZTo6
RkVNZXJnZShGaWx0ZXIqIGZpbHRlcikgCisgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyKQogewog
fQogCi1QYXNzUmVmUHRyPEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZSgpCitQYXNzUmVmUHRyPEZF
TWVyZ2U+IEZFTWVyZ2U6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlcikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEZFTWVyZ2UpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVNZXJnZShmaWx0
ZXIpKTsKIH0KIAotdm9pZCBGRU1lcmdlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3ZvaWQgRkVN
ZXJnZTo6YXBwbHkoKQogewogICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0
cygpOwogICAgIEFTU0VSVChzaXplID4gMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewogICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7
Ci0gICAgICAgIGluLT5hcHBseShmaWx0ZXIpOworICAgICAgICBpbi0+YXBwbHkoKTsKICAgICAg
ICAgaWYgKCFpbi0+cmVzdWx0SW1hZ2UoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KGZpbHRl
cik7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dCgp
OwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgJKHJldmlzaW9uIDcyMDg5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RkVNZXJnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+
IGNyZWF0ZShGaWx0ZXIqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAg
dmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBp
bnQgaW5kZW50aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRU1lcmdlKCk7CisgICAgRkVN
ZXJnZShGaWx0ZXIqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCShy
ZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNyArMzYsMTcgQEAgdXNpbmcgc3Rk
OjptYXg7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVNb3JwaG9sb2d5OjpGRU1vcnBob2xv
Z3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKQotICAgIDogRmlsdGVyRWZmZWN0KCkKK0ZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KEZp
bHRlciogZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpCisgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyKQogICAgICwgbV90eXBl
KHR5cGUpCiAgICAgLCBtX3JhZGl1c1gocmFkaXVzWCkKICAgICAsIG1fcmFkaXVzWShyYWRpdXNZ
KQogewogfQogCi1QYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4gRkVNb3JwaG9sb2d5OjpjcmVhdGUo
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZ
KQorUGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+IEZFTW9ycGhvbG9neTo6Y3JlYXRlKEZpbHRlciog
ZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0
IHJhZGl1c1kpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU1vcnBob2xvZ3kodHlwZSwg
cmFkaXVzWCwgcmFkaXVzWSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVNb3JwaG9sb2d5
KGZpbHRlciwgdHlwZSwgcmFkaXVzWCwgcmFkaXVzWSkpOwogfQogCiBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIEZFTW9ycGhvbG9neTo6bW9ycGhvbG9neU9wZXJhdG9yKCkgY29uc3QKQEAgLTc0LDEx
ICs3NCwxMSBAQCBmbG9hdCBGRU1vcnBob2xvZ3k6OnJhZGl1c1koKSBjb25zdAogICAgIHJldHVy
biBtX3JhZGl1c1k7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChGaWx0ZXIqIGZpbHRlcikKK3ZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0
KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHBhaW50UmVjdC5pbmZsYXRlWChmaWx0ZXIt
PmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fcmFkaXVzWCkpOwotICAgIHBhaW50UmVjdC5pbmZsYXRl
WShmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX3JhZGl1c1kpKTsKKyAgICBwYWludFJlY3Qu
aW5mbGF0ZVgoZmlsdGVyKCktPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fcmFkaXVzWCkpOworICAg
IHBhaW50UmVjdC5pbmZsYXRlWShmaWx0ZXIoKS0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fcmFkaXVz
WSkpOwogICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKICAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQpAQCAtODgs
MjIgKzg4LDIyIEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGkKICAg
ICBtX3JhZGl1c1kgPSByYWRpdXNZOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6YXBwbHkoRmls
dGVyKiBmaWx0ZXIpCit2b2lkIEZFTW9ycGhvbG9neTo6YXBwbHkoKQogewogICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoZmlsdGVyKTsKKyAgICBp
bi0+YXBwbHkoKTsKICAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIWVmZmVjdENvbnRleHQoZmlsdGVyKSkKKyAgICBpZiAoIWVmZmVjdENvbnRl
eHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhh
SW1hZ2UoKSk7CiAgICAgaWYgKG1fcmFkaXVzWCA8PSAwIHx8IG1fcmFkaXVzWSA8PSAwKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpbnQgcmFkaXVzWCA9IHN0YXRpY19jYXN0PGludD4oZmxvb3Jm
KGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9yYWRpdXNYKSkpOwotICAgIGludCByYWRp
dXNZID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYoZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUo
bV9yYWRpdXNZKSkpOworICAgIGludCByYWRpdXNYID0gc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYo
ZmlsdGVyKCktPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fcmFkaXVzWCkpKTsKKyAgICBpbnQgcmFk
aXVzWSA9IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKGZpbHRlcigpLT5hcHBseVZlcnRpY2FsU2Nh
bGUobV9yYWRpdXNZKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVz
dWx0SW1hZ2UoKS0+c2l6ZSgpKTsKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBlbnVtIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUgewogCiBjbGFzcyBGRU1vcnBob2xvZ3kgOiBwdWJsaWMgRmls
dGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRU1vcnBob2xvZ3k+
IGNyZWF0ZShNb3JwaG9sb2d5T3BlcmF0b3JUeXBlLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRp
dXNZKTsgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTW9ycGhvbG9neT4gY3JlYXRlKEZpbHRl
ciosIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kp
OyAgCiAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtb3JwaG9sb2d5T3BlcmF0b3IoKSBjb25z
dDsKICAgICB2b2lkIHNldE1vcnBob2xvZ3lPcGVyYXRvcihNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
KTsKIApAQCAtNDYsMTUgKzQ2LDE1IEBAIHB1YmxpYzoKICAgICBmbG9hdCByYWRpdXNZKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRSYWRpdXNZKGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KEZp
bHRlciopOworICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwog
CiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJl
YW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRU1vcnBob2xvZ3ko
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7Cisg
ICAgRkVNb3JwaG9sb2d5KEZpbHRlciosIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJh
ZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogICAgIAogICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
bV90eXBlOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwxNiArMzEsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRU9mZnNldDo6
RkVPZmZzZXQoZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDogRmlsdGVyRWZmZWN0KCkKK0ZFT2Zm
c2V0OjpGRU9mZnNldChGaWx0ZXIqIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQorICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlcikKICAgICAsIG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewog
fQogCi1QYXNzUmVmUHRyPEZFT2Zmc2V0PiBGRU9mZnNldDo6Y3JlYXRlKGZsb2F0IGR4LCBmbG9h
dCBkeSkKK1Bhc3NSZWZQdHI8RkVPZmZzZXQ+IEZFT2Zmc2V0OjpjcmVhdGUoRmlsdGVyKiBmaWx0
ZXIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFT2Zm
c2V0KGR4LCBkeSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVPZmZzZXQoZmlsdGVyLCBk
eCwgZHkpKTsKIH0KIAogZmxvYXQgRkVPZmZzZXQ6OmR4KCkgY29uc3QKQEAgLTYzLDI5ICs2Mywy
OSBAQCB2b2lkIEZFT2Zmc2V0OjpzZXREeShmbG9hdCBkeSkKICAgICBtX2R5ID0gZHk7CiB9CiAK
LXZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KEZpbHRlciogZmlsdGVy
KQordm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewogICAgIEZs
b2F0UmVjdCBwYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsK
LSAgICBwYWludFJlY3QubW92ZShmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBm
aWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7CisgICAgcGFpbnRSZWN0Lm1vdmUoZmls
dGVyKCktPmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXIoKS0+YXBwbHlWZXJ0aWNh
bFNjYWxlKG1fZHkpKTsKICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7
CiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsK
IH0KIAotdm9pZCBGRU9mZnNldDo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCit2b2lkIEZFT2Zmc2V0
OjphcHBseSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAg
IGluLT5hcHBseShmaWx0ZXIpOworICAgIGluLT5hcHBseSgpOwogICAgIGlmICghaW4tPnJlc3Vs
dEltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVy
Q29udGV4dCA9IGVmZmVjdENvbnRleHQoZmlsdGVyKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGZp
bHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7CiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQog
ICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgp
KTsKIAogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZp
bHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNj
YWxlKG1fZHkpKTsKKyAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyKCktPmFwcGx5SG9yaXpv
bnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXIoKS0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fZHkpKTsKICAg
ICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPnJlc3VsdEltYWdlKCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRyYXdpbmdSZWdpb24pOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAkocmV2aXNpb24gNzIwODkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFT2Zmc2V0
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVPZmZzZXQ+IGNyZWF0ZShmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZFT2Zmc2V0PiBjcmVhdGUoRmlsdGVyKiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAogICAg
IGZsb2F0IGR4KCkgY29uc3Q7CiAgICAgdm9pZCBzZXREeChmbG9hdCk7CkBAIC0zOCwxNSArMzgs
MTUgQEAgcHVibGljOgogICAgIGZsb2F0IGR5KCkgY29uc3Q7CiAgICAgdm9pZCBzZXREeShmbG9h
dCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoRmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIEZFT2Zmc2V0KGZsb2F0IGR4LCBmbG9hdCBkeSk7CisgICAgRkVP
ZmZzZXQoRmlsdGVyKiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAogICAgIGZsb2F0IG1fZHg7CiAg
ICAgZmxvYXQgbV9keTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVNwZWN1bGFyTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA3MjA4OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxOCArMjgsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLAorRkVTcGVjdWxhckxpZ2h0aW5nOjpG
RVNwZWN1bGFyTGlnaHRpbmcoRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0Nv
bG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsCiAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsCiAgICAgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQot
ICAgIDogRkVMaWdodGluZyhTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNl
U2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRM
ZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgbGlnaHRTb3VyY2UpCisgICAgOiBGRUxpZ2h0aW5n
KGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAw
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIGxpZ2h0U291cmNlKQogewogfQogCi1QYXNzUmVmUHRyPEZFU3Bl
Y3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsCitQYXNzUmVmUHRyPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxp
Z2h0aW5nOjpjcmVhdGUoRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9y
LAogICAgIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwKICAgICBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IGxpZ2h0U291cmNlKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVTcGVjdWxhckxpZ2h0aW5nKGxpZ2h0aW5nQ29sb3Is
IHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZFU3BlY3VsYXJMaWdodGluZyhmaWx0ZXIsIGxpZ2h0aW5nQ29s
b3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwKICAg
ICAgICAga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBsaWdodFNvdXJjZSkp
OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFU3BlY3Vs
YXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShjb25zdCBDb2xvciYsIGZsb2F0LCBm
bG9hdCwKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVNwZWN1bGFyTGlnaHRpbmc+IGNyZWF0ZShG
aWx0ZXIqLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwKICAgICAgICAgZmxvYXQsIGZsb2F0
LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogICAgIHZpcnR1YWwgfkZFU3BlY3Vs
YXJMaWdodGluZygpOwogCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRp
b24pIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xv
ciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNv
dXJjZT4pOworICAgIEZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXIqLCBjb25zdCBDb2xvciYsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4p
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDI2ICszMSwyNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFVGlsZTo6RkVUaWxl
KCkKLSAgICA6IEZpbHRlckVmZmVjdCgpCitGRVRpbGU6OkZFVGlsZShGaWx0ZXIqIGZpbHRlcikK
KyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RkVUaWxlPiBG
RVRpbGU6OmNyZWF0ZSgpCitQYXNzUmVmUHRyPEZFVGlsZT4gRkVUaWxlOjpjcmVhdGUoRmlsdGVy
KiBmaWx0ZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRVRpbGUpOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRkVUaWxlKGZpbHRlcikpOwogfQogCi12b2lkIEZFVGlsZTo6YXBwbHko
RmlsdGVyKiBmaWx0ZXIpCit2b2lkIEZFVGlsZTo6YXBwbHkoKQogewogLy8gRklYTUU6IFNlZSBi
dWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZSBmYWlsdXJl
LCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVyd2lzZS4KICNpZiBFTkFCTEUoU1ZHKQog
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoZmls
dGVyKTsKKyAgICBpbi0+YXBwbHkoKTsKICAgICBpZiAoIWluLT5yZXN1bHRJbWFnZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZl
Y3RDb250ZXh0KGZpbHRlcik7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0g
ZWZmZWN0Q29udGV4dCgpOwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC02Miw4ICs2Miw4IEBAIHZvaWQgRkVUaWxlOjphcHBseShGaWx0ZXIqIGZpbHRlcikK
ICAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigp
OwogICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9j
YXRpb24oKTsKICAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RU
eXBlU291cmNlSW5wdXQpIHsKLSAgICAgICAgdGlsZVJlY3QgPSBmaWx0ZXItPmZpbHRlclJlZ2lv
bigpOwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS53
aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWlnaHQoKSk7CisgICAgICAgIHRp
bGVSZWN0ID0gZmlsdGVyKCktPmZpbHRlclJlZ2lvbigpOworICAgICAgICB0aWxlUmVjdC5zY2Fs
ZShmaWx0ZXIoKS0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlcigpLT5maWx0ZXJS
ZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwogICAgIH0KIAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
dGlsZUltYWdlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE5ICszMCwxOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgCiBjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVRpbGU+IGNyZWF0ZSgpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZFVGlsZT4gY3JlYXRlKEZpbHRlciogZmlsdGVyKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhcHBseShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2
aXJ0dWFsIHZvaWQgZHVtcCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KEZpbHRlciopIHsgc2V0QWJzb2x1dGVQYWludFJlY3QobWF4RWZmZWN0UmVjdCgp
KTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QobWF4RWZmZWN0UmVjdCgpKTsgfQogCiAgICAgdmlydHVhbCBGaWx0
ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCB7IHJldHVybiBGaWx0ZXJFZmZl
Y3RUeXBlVGlsZTsgfQogCiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICBGRVRpbGUoKTsKKyAgICBGRVRpbGUoRmlsdGVyKik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCAr
NDcsOCBAQCBzdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3CiBzdGF0aWMg
Y29uc3QgaW50IHNfcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCiBzdGF0aWMgY29uc3QgaW50IHNf
cmFuZFIgPSAyODM2OyAvLyBtICUgYQogCi1GRVR1cmJ1bGVuY2U6OkZFVHVyYnVsZW5jZShUdXJi
dWxhbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDog
RmlsdGVyRWZmZWN0KCkKK0ZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciogZmlsdGVy
LCBUdXJidWxhbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQor
ICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV9i
YXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCkKICAgICAsIG1fYmFzZUZyZXF1ZW5jeVkoYmFz
ZUZyZXF1ZW5jeVkpCkBAIC01OCw5ICs1OCw5IEBAIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNl
KFR1cmJ1bGFuY2VUeXAKIHsKIH0KIAotUGFzc1JlZlB0cjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVs
ZW5jZTo6Y3JlYXRlKFR1cmJ1bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3Rp
dGNoVGlsZXMpCitQYXNzUmVmUHRyPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUo
RmlsdGVyKiBmaWx0ZXIsIFR1cmJ1bGFuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lY
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wg
c3RpdGNoVGlsZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRVR1cmJ1bGVuY2UodHlw
ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0
Y2hUaWxlcykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUdXJidWxlbmNlKGZpbHRlciwg
dHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBz
dGl0Y2hUaWxlcykpOwogfQogCiBUdXJidWxhbmNlVHlwZSBGRVR1cmJ1bGVuY2U6OnR5cGUoKSBj
b25zdApAQCAtMzE4LDkgKzMxOCw5IEBAIHVuc2lnbmVkIGNoYXIgRkVUdXJidWxlbmNlOjpjYWxj
dWxhdGVUdXIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0ICogMjU1KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KEZp
bHRlciogZmlsdGVyKQordm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KCkKIHsKLSAgICBpZiAoIWVm
ZmVjdENvbnRleHQoZmlsdGVyKSkKKyAgICBpZiAoIWVmZmVjdENvbnRleHQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2Uo
KS0+c2l6ZSgpKTsKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6YXBwbHko
RmlsdGVyKiBmaWx0ZXIpCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaW1hZ2VSZWN0Lndp
ZHRoKCk7ICsreCkgewogICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54KCkgKyAxKTsKICAg
ICAgICAgICAgIGZvciAocGFpbnRpbmdEYXRhLmNoYW5uZWwgPSAwOyBwYWludGluZ0RhdGEuY2hh
bm5lbCA8IDQ7ICsrcGFpbnRpbmdEYXRhLmNoYW5uZWwsICsraW5kZXhPZlBpeGVsQ2hhbm5lbCkK
LSAgICAgICAgICAgICAgICBwaXhlbEFycmF5LT5zZXQoaW5kZXhPZlBpeGVsQ2hhbm5lbCwgY2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBmaWx0ZXItPm1hcEFi
c29sdXRlUG9pbnRUb0xvY2FsUG9pbnQocG9pbnQpKSk7CisgICAgICAgICAgICAgICAgcGl4ZWxB
cnJheS0+c2V0KGluZGV4T2ZQaXhlbENoYW5uZWwsIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZv
clBvaW50KHBhaW50aW5nRGF0YSwgZmlsdGVyKCktPm1hcEFic29sdXRlUG9pbnRUb0xvY2FsUG9p
bnQocG9pbnQpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmVzdWx0SW1hZ2UoKS0+cHV0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YS5nZXQoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgp
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmgJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIGVu
dW0gVHVyYnVsYW5jZVR5cGUgewogCiBjbGFzcyBGRVR1cmJ1bGVuY2UgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRVR1cmJ1bGVuY2U+IGNy
ZWF0ZShUdXJidWxhbmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGRVR1cmJ1bGVuY2U+IGNyZWF0ZShGaWx0ZXIqLCBUdXJidWxh
bmNlVHlwZSwgZmxvYXQsIGZsb2F0LCBpbnQsIGZsb2F0LCBib29sKTsKIAogICAgIFR1cmJ1bGFu
Y2VUeXBlIHR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldFR5cGUoVHVyYnVsYW5jZVR5cGUpOwpA
QCAtNTgsMTAgKzU4LDEwIEBAIHB1YmxpYzoKICAgICBib29sIHN0aXRjaFRpbGVzKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTdGl0Y2hUaWxlcyhib29sKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eShGaWx0ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcCgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChGaWx0ZXIqKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KG1heEVmZmVjdFJlY3QoKSk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRl
UGFpbnRSZWN0KG1heEVmZmVjdFJlY3QoKSk7IH0KIAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7
CiAKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaW5saW5lIGxvbmcgcmFuZG9t
KCk7CiAgICAgfTsKIAotICAgIEZFVHVyYnVsZW5jZShUdXJidWxhbmNlVHlwZSwgZmxvYXQsIGZs
b2F0LCBpbnQsIGZsb2F0LCBib29sKTsKKyAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyKiwgVHVyYnVs
YW5jZVR5cGUsIGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CiAKICAgICBpbmxpbmUg
dm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7CiAgICAgZmxvYXQgbm9pc2UyRChQYWludGlu
Z0RhdGEmLCBjb25zdCBGbG9hdFBvaW50Jik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gNzIwODkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMjAgKzI2LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3QoKQorRmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZlY3Qo
RmlsdGVyKiBmaWx0ZXIpCiAgICAgOiBtX2FscGhhSW1hZ2UoZmFsc2UpCisgICAgLCBtX2ZpbHRl
cihmaWx0ZXIpCiAgICAgLCBtX2hhc1goZmFsc2UpCiAgICAgLCBtX2hhc1koZmFsc2UpCiAgICAg
LCBtX2hhc1dpZHRoKGZhbHNlKQogICAgICwgbV9oYXNIZWlnaHQoZmFsc2UpCiB7CisgICAgQVNT
RVJUKG1fZmlsdGVyKTsKIH0KIAogRmlsdGVyRWZmZWN0Ojp+RmlsdGVyRWZmZWN0KCkKIHsKIH0K
IAotdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KEZpbHRlciop
Cit2b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewogICAg
IG1fYWJzb2x1dGVQYWludFJlY3QgPSBJbnRSZWN0KCk7CiAgICAgdW5zaWduZWQgc2l6ZSA9IG1f
aW5wdXRFZmZlY3RzLnNpemUoKTsKQEAgLTcwLDkgKzcyLDkgQEAgRmlsdGVyRWZmZWN0KiBGaWx0
ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KAogICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1i
ZXIpLmdldCgpOwogfQogCi1HcmFwaGljc0NvbnRleHQqIEZpbHRlckVmZmVjdDo6ZWZmZWN0Q29u
dGV4dChGaWx0ZXIqIGZpbHRlcikKK0dyYXBoaWNzQ29udGV4dCogRmlsdGVyRWZmZWN0OjplZmZl
Y3RDb250ZXh0KCkKIHsKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwor
ICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWlu
dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBtX2VmZmVjdEJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIENvbG9yU3Bh
Y2VMaW5lYXJSR0IpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ3JlYXRlcyB0aGUgSW1hZ2VCdWZmZXIgZm9yIHRo
ZSBjdXJyZW50IGZpbHRlciBwcmltaXRpdmUgcmVzdWx0IGluIHRoZSBzaXplIG9mIHRoZQogICAg
IC8vIHJlcGFpbnRSZWN0LiBHaXZlcyBiYWNrIHRoZSBHcmFwaGljc0NvbnRleHQgb2YgdGhlIG93
biBJbWFnZUJ1ZmZlci4KLSAgICBHcmFwaGljc0NvbnRleHQqIGVmZmVjdENvbnRleHQoRmlsdGVy
Kik7CisgICAgR3JhcGhpY3NDb250ZXh0KiBlZmZlY3RDb250ZXh0KCk7CiAKICAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CkBAIC03NSwxMCAr
NzUsMTAgQEAgcHVibGljOgogICAgIEludFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQogICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBJ
bnRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7
IH0gCiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBhcHBseSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpID0gMDsKIAotICAgIHZp
cnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChGaWx0ZXIqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKIAogICAgIHZpcnR1YWwgRmls
dGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZm
ZWN0VHlwZVVua25vd247IH0KIApAQCAtMTA1LDggKzEwNSwxMCBAQCBwdWJsaWM6CiAgICAgRmxv
YXRSZWN0IGVmZmVjdEJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdEJvdW5kYXJp
ZXM7IH0KICAgICB2b2lkIHNldEVmZmVjdEJvdW5kYXJpZXMoY29uc3QgRmxvYXRSZWN0JiBlZmZl
Y3RCb3VuZGFyaWVzKSB7IG1fZWZmZWN0Qm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXM7IH0K
IAorICAgIEZpbHRlciogZmlsdGVyKCkgeyByZXR1cm4gbV9maWx0ZXI7IH0KKwogcHJvdGVjdGVk
OgotICAgIEZpbHRlckVmZmVjdCgpOworICAgIEZpbHRlckVmZmVjdChGaWx0ZXIqKTsKIAogcHJp
dmF0ZToKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZWZmZWN0QnVmZmVyOwpAQCAtMTE5LDYg
KzEyMSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIGZpbHRlciBw
cmltaXRpdmUuIEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIGluIGFic29s
dXRlIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgLy8gVGhlIGFic29sdXRlIHBhaW50IHJlY3Qgc2hv
dWxkIG5ldmVyIGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0UmVjdC4KICAgICBJbnRSZWN0IG1f
bWF4RWZmZWN0UmVjdDsKKyAgICBGaWx0ZXIqIG1fZmlsdGVyOwogCiBwcml2YXRlOgogICAgIC8v
IFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhcmlhYmxlcyBhcmUgU1ZHIHNwZWNpZmljIGFuZCB3aWxs
IG1vdmUgdG8gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHJldmlz
aW9uIDcyMDg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8U291cmNlQWxwaGE+IFNvdXJjZUFscGhhOjpjcmVhdGUoKQor
UGFzc1JlZlB0cjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXIqIGZpbHRl
cikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUFscGhhKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNvdXJjZUFscGhhKGZpbHRlcikpOwogfQogCiBjb25zdCBBdG9taWNTdHJp
bmcmIFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkKQEAgLTQyLDI0ICs0MiwyNCBAQCBjb25zdCBB
dG9taWNTdHJpbmcmIFNvdXJjZUFscGhhOjplZmZlY3ROCiAgICAgcmV0dXJuIHNfZWZmZWN0TmFt
ZTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoRmls
dGVyKiBmaWx0ZXIpCit2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpCiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci0+c291cmNlSW1hZ2VSZWN0
KCk7Ci0gICAgcGFpbnRSZWN0LnNjYWxlKGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRo
KCksIGZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3Qg
cGFpbnRSZWN0ID0gZmlsdGVyKCktPnNvdXJjZUltYWdlUmVjdCgpOworICAgIHBhaW50UmVjdC5z
Y2FsZShmaWx0ZXIoKS0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlcigpLT5maWx0
ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OmFwcGx5KEZp
bHRlciogZmlsdGVyKQordm9pZCBTb3VyY2VBbHBoYTo6YXBwbHkoKQogewotICAgIEdyYXBoaWNz
Q29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoZmlsdGVyKTsKLSAgICBpZiAo
IWZpbHRlckNvbnRleHQgfHwgIWZpbHRlci0+c291cmNlSW1hZ2UoKSkKKyAgICBHcmFwaGljc0Nv
bnRleHQqIGZpbHRlckNvbnRleHQgPSBlZmZlY3RDb250ZXh0KCk7CisgICAgaWYgKCFmaWx0ZXJD
b250ZXh0IHx8ICFmaWx0ZXIoKS0+c291cmNlSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgc2V0SXNBbHBoYUltYWdlKHRydWUpOwogCiAgICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9h
dFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBmaWx0ZXJDb250ZXh0
LT5zYXZlKCk7Ci0gICAgZmlsdGVyQ29udGV4dC0+Y2xpcFRvSW1hZ2VCdWZmZXIoZmlsdGVyLT5z
b3VyY2VJbWFnZSgpLCBpbWFnZVJlY3QpOworICAgIGZpbHRlckNvbnRleHQtPmNsaXBUb0ltYWdl
QnVmZmVyKGZpbHRlcigpLT5zb3VyY2VJbWFnZSgpLCBpbWFnZVJlY3QpOwogICAgIGZpbHRlckNv
bnRleHQtPmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKICAgICBmaWx0ZXJDb250ZXh0LT5yZXN0b3JlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAkocmV2aXNpb24gNzIw
ODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMjEgKzMwLDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU291cmNlQWxwaGEgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAg
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNvdXJjZUFscGhhPiBjcmVhdGUoKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTb3VyY2VBbHBoYT4gY3JlYXRlKEZpbHRlciopOwogCiAgICAgc3RhdGlj
IGNvbnN0IEF0b21pY1N0cmluZyYgZWZmZWN0TmFtZSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFw
cGx5KEZpbHRlciopOworICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwogICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
RmlsdGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7
CiAKICAgICB2aXJ0dWFsIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQogCiAgICAgdmlydHVhbCBU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBTb3VyY2VBbHBoYSgpIHsgfQorICAgIFNvdXJj
ZUFscGhhKEZpbHRlciogZmlsdGVyKQorICAgICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIpCisg
ICAgeworICAgIH0KIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkocmV2
aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNy
ZWF0ZSgpCitQYXNzUmVmUHRyPFNvdXJjZUdyYXBoaWM+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShG
aWx0ZXIqIGZpbHRlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUdyYXBoaWMp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU291cmNlR3JhcGhpYyhmaWx0ZXIpKTsKIH0KIAog
Y29uc3QgQXRvbWljU3RyaW5nJiBTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCkKQEAgLTQxLDIw
ICs0MSwyMCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFNvdXJjZUdyYXBoaWM6OmVmZmVjCiAgICAg
cmV0dXJuIHNfZWZmZWN0TmFtZTsKIH0KIAotdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdChGaWx0ZXIqIGZpbHRlcikKK3ZvaWQgU291cmNlR3JhcGhpYzo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBm
aWx0ZXItPnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXItPmZp
bHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXItPmZpbHRlclJlc29sdXRpb24oKS5oZWln
aHQoKSk7CisgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlcigpLT5zb3VyY2VJbWFnZVJl
Y3QoKTsKKyAgICBwYWludFJlY3Quc2NhbGUoZmlsdGVyKCktPmZpbHRlclJlc29sdXRpb24oKS53
aWR0aCgpLCBmaWx0ZXIoKS0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKICAgICBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi12b2lk
IFNvdXJjZUdyYXBoaWM6OmFwcGx5KEZpbHRlciogZmlsdGVyKQordm9pZCBTb3VyY2VHcmFwaGlj
OjphcHBseSgpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0
Q29udGV4dChmaWx0ZXIpOwotICAgIGlmICghZmlsdGVyQ29udGV4dCB8fCAhZmlsdGVyLT5zb3Vy
Y2VJbWFnZSgpKQorICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENv
bnRleHQoKTsKKyAgICBpZiAoIWZpbHRlckNvbnRleHQgfHwgIWZpbHRlcigpLT5zb3VyY2VJbWFn
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZm
ZXIoZmlsdGVyLT5zb3VyY2VJbWFnZSgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludCgp
KTsKKyAgICBmaWx0ZXJDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoZmlsdGVyKCktPnNvdXJjZUlt
YWdlKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50KCkpOwogfQogCiB2b2lkIFNvdXJj
ZUdyYXBoaWM6OmR1bXAoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDIxICszMSwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUdyYXBo
aWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzogICAgICAgIAotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNvdXJjZUdyYXBoaWM+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNvdXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXIqKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcmIGVmZmVjdE5hbWUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0ZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KEZpbHRlciopOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwogCiAgICAgdmly
dHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCB7IHJldHVybiBG
aWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0KIAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgU291cmNlR3JhcGhpYygpIHsgfQorICAgIFNvdXJjZUdyYXBoaWMo
RmlsdGVyKiBmaWx0ZXIpCisgICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKKyAgICB7Cisg
ICAgfQogfTsKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCShyZXZpc2lvbiA3MjA4OSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTMgKzg4LDEzIEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJlbW92
ZUNsaWUKICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFs
aWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9u
KTsKIH0KIAotUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6YnVpbGRQcmltaXRpdmVzKCkKK1Bhc3NSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhGaWx0ZXIqIGZpbHRlcikKIHsK
ICAgICBTVkdGaWx0ZXJFbGVtZW50KiBmaWx0ZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRmls
dGVyRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUg
PSBmaWx0ZXJFbGVtZW50LT5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKIAogICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBi
dWlsZGVyCi0gICAgUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGJ1aWxkZXIgPSBTVkdGaWx0ZXJC
dWlsZGVyOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlciA9
IFNWR0ZpbHRlckJ1aWxkZXI6OmNyZWF0ZShmaWx0ZXIpOwogICAgIGZvciAoTm9kZSogbm9kZSA9
IGZpbHRlckVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtMTA0LDcgKzEwNCw3IEBAIFBhc3NSZWZQdHI8U1ZHRmlsdGVyQnVpbGRl
cj4gUmVuZGVyU1ZHUmUKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZWZmZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyo+KGVsZW1lbnQpOwotICAgICAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LT5idWlsZChidWls
ZGVyLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gZWZmZWN0
RWxlbWVudC0+YnVpbGQoYnVpbGRlci5nZXQoKSwgZmlsdGVyKTsKICAgICAgICAgaWYgKCFlZmZl
Y3QpIHsKICAgICAgICAgICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwogICAgICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6YXBwbHlSZXNvdQogICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRl
KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLCBhYnNvbHV0ZURyYXdpbmdS
ZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCBwcmltaXRp
dmVCb3VuZGluZ0JveE1vZGUpOwogCiAgICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIg
cHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCk7
CisgICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IGJ1aWxkUHJpbWl0aXZlcyhmaWx0ZXJEYXRhLT5m
aWx0ZXIuZ2V0KCkpOwogICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cG9zdEFwcGx5UgogICAgICAgICAvLyBzZWNvbmQgZHJhd2luZy4KICAgICAgICAgaWYg
KCFmaWx0ZXJEYXRhLT5idWlsZGVkKSB7CiAgICAgICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXIt
PnNldFNvdXJjZUltYWdlKGZpbHRlckRhdGEtPnNvdXJjZUdyYXBoaWNCdWZmZXIucmVsZWFzZSgp
KTsKLSAgICAgICAgICAgIGxhc3RFZmZlY3QtPmFwcGx5KGZpbHRlckRhdGEtPmZpbHRlci5nZXQo
KSk7CisgICAgICAgICAgICBsYXN0RWZmZWN0LT5hcHBseSgpOwogI2lmICFQTEFURk9STShDRykK
ICAgICAgICAgICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGxhc3RFZmZlY3QtPnJlc3Vs
dEltYWdlKCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0SW1hZ2UpCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmgJKHJldmlzaW9uIDcyMDg5KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXNv
dXJjZUJvdW5kaW5nQm94KFJlbmRlck9iamVjdCopOwogCi0gICAgUGFzc1JlZlB0cjxTVkdGaWx0
ZXJCdWlsZGVyPiBidWlsZFByaW1pdGl2ZXMoKTsKKyAgICBQYXNzUmVmUHRyPFNWR0ZpbHRlckJ1
aWxkZXI+IGJ1aWxkUHJpbWl0aXZlcyhGaWx0ZXIqKTsKIAogICAgIFNWR1VuaXRUeXBlczo6U1ZH
VW5pdFR5cGUgZmlsdGVyVW5pdHMoKSBjb25zdCB7IHJldHVybiB0b1VuaXRUeXBlKHN0YXRpY19j
YXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpLT5maWx0ZXJVbml0cygpKTsgfQogICAgIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMoKSBjb25zdCB7IHJldHVybiB0
b1VuaXRUeXBlKHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQqPihub2RlKCkpLT5wcmltaXRp
dmVVbml0cygpKTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1OCwxMCArNTU4LDEzIEBAIHZvaWQgd3Jp
dGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWEKICAgICAgICAgd3JpdGVOYW1lVmFsdWVQ
YWlyKHRzLCAiZmlsdGVyVW5pdHMiLCBmaWx0ZXItPmZpbHRlclVuaXRzKCkpOwogICAgICAgICB3
cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwcmltaXRpdmVVbml0cyIsIGZpbHRlci0+cHJpbWl0aXZl
VW5pdHMoKSk7CiAgICAgICAgIHRzIDw8ICJcbiI7Ci0gICAgICAgIGlmIChSZWZQdHI8U1ZHRmls
dGVyQnVpbGRlcj4gYnVpbGRlciA9IGZpbHRlci0+YnVpbGRQcmltaXRpdmVzKCkpIHsKKyAgICAg
ICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBmaWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRo
ZSBidWlsZGVyLgorICAgICAgICBGbG9hdFJlY3QgZHVtbXlSZWN0OworICAgICAgICBSZWZQdHI8
U1ZHRmlsdGVyPiBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKEFmZmluZVRyYW5zZm9y
bSgpLCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0LCB0cnVlKTsKKyAgICAgICAgaWYg
KFJlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBidWlsZGVyID0gZmlsdGVyLT5idWlsZFByaW1pdGl2
ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoRmlsdGVyRWZmZWN0KiBs
YXN0RWZmZWN0ID0gYnVpbGRlci0+bGFzdEVmZmVjdCgpKQogICAgICAgICAgICAgICAgIGxhc3RF
ZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMsIGluZGVudCArIDEpOwotICAgICAgICB9
ICAgICAgCisgICAgICAgIH0KICNlbmRpZgogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UtPnJlc291
cmNlVHlwZSgpID09IENsaXBwZXJSZXNvdXJjZVR5cGUpIHsKICAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VDbGlwcGVyKiBjbGlwcGVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyKj4ocmVzb3VyY2UpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAkocmV2aXNp
b24gNzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3luY2hyb25p
emVQcm9wZQogICAgICAgICBzeW5jaHJvbml6ZUluMigpOwogfQogCi1QYXNzUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIpCitQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVCbGVuZEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciogZmlsdGVyKQogewog
ICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMigpKTsKQEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQmxlbmRFbGVtZQogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVCbGVuZDo6Y3Jl
YXRlKHN0YXRpY19jYXN0PEJsZW5kTW9kZVR5cGU+KG1vZGUoKSkpOworICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFQmxlbmQ6OmNyZWF0ZShmaWx0ZXIsIHN0YXRpY19jYXN0PEJs
ZW5kTW9kZVR5cGU+KG1vZGUoKSkpOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKTsKICAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNh
cGFjaXR5KDIpOwogICAgIGlucHV0RWZmZWN0cy5hcHBlbmQoaW5wdXQxKTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUJs
ZW5kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZp
cnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXIqKTsKIAogICAgIERFQ0xBUkVfQU5JTUFURURfU1RBVElDX1BS
T1BFUlRZX05FVyhTVkdGRUJsZW5kRWxlbWVudCwgU1ZHTmFtZXM6OmluQXR0ciwgU3RyaW5nLCBJ
bjEsIGluMSkKICAgICBERUNMQVJFX0FOSU1BVEVEX1NUQVRJQ19QUk9QRVJUWV9ORVcoU1ZHRkVC
bGVuZEVsZW1lbnQsIFNWR05hbWVzOjppbjJBdHRyLCBTdHJpbmcsIEluMiwgaW4yKQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAkocmV2aXNpb24gNzIwODkpCisr
KyBXZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6c3luY2hyb25p
egogICAgICAgICBzeW5jaHJvbml6ZVZhbHVlcygpOwogfQogCi1QYXNzUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIpCitQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciogZmls
dGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7CiAKQEAgLTEzMCw3ICsxMzAsNyBAQCBQYXNzUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVDb2xvck1hdHJpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmls
dGVyVHlwZSwgZmlsdGVyVmFsdWVzKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Qg
PSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBmaWx0ZXJUeXBlLCBmaWx0ZXJWYWx1ZXMp
OwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKGlucHV0MSk7CiAgICAgcmV0dXJu
IGVmZmVjdC5yZWxlYXNlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmgJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyKik7CiAKICAgICBERUNMQVJFX0FOSU1BVEVEX1NUQVRJQ19QUk9QRVJU
WV9ORVcoU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQsIFNWR05hbWVzOjppbkF0dHIsIFN0cmluZywg
SW4xLCBpbjEpCiAgICAgREVDTEFSRV9BTklNQVRFRF9TVEFUSUNfUFJPUEVSVFlfTkVXKFNWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LCBTVkdOYW1lczo6dHlwZUF0dHIsIGludCwgVHlwZSwgdHlwZSkK
SW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnN5bmMKICAgICAgICAgc3luY2hyb25pemVJbjEoKTsKIH0K
IAotUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQorUGFzc1JlZlB0cjxGaWx0
ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZl
Y3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIApA
QCAtODMsNyArODMsNyBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRU
CiAgICAgICAgICAgICBhbHBoYSA9IHN0YXRpY19jYXN0PFNWR0ZFRnVuY0FFbGVtZW50Kj4obikt
PnRyYW5zZmVyRnVuY3Rpb24oKTsKICAgICB9CiAgICAgCi0gICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjcmVhdGUoZmlsdGVyLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoaW5wdXQxKTsKICAgICByZXR1cm4gZWZmZWN0LnJl
bGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYp
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiwgRmlsdGVyKik7CiAKICAgICBERUNMQVJFX0FOSU1BVEVEX1NUQVRJQ19Q
Uk9QRVJUWV9ORVcoU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQsIFNWR05hbWVzOjppbkF0
dHIsIFN0cmluZywgSW4xLCBpbjEpCiB9OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIFNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6c3luY2hyb25pemVQCiAgICAgICAgIHN5bmNocm9uaXplSzQoKTsK
IH0KIAotUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnVp
bGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKK1Bhc3NSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIsIEZpbHRlciogZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0g
ZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CiAgICAgRmlsdGVyRWZmZWN0KiBp
bnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMigpKTsKQEAgLTEyNCw3ICsx
MjQsNyBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb3NpdGVFCiAgICAgaWYg
KCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENvbXBv
c2l0ZU9wZXJhdGlvblR5cGU+KF9vcGVyYXRvcigpKSwKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBlZmZlY3QgPSBGRUNvbXBvc2l0ZTo6Y3JlYXRlKGZpbHRlciwgc3RhdGljX2Nhc3Q8Q29tcG9z
aXRlT3BlcmF0aW9uVHlwZT4oX29wZXJhdG9yKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxKCksIGsyKCksIGszKCksIGs0KCkp
OwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVm
ZmVjdHMoKTsKICAgICBpbnB1dEVmZmVjdHMucmVzZXJ2ZUNhcGFjaXR5KDIpOwpJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKik7CiAgICAgdmlydHVhbCB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlckVmZmVj
dD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRlciopOwogCiAgICAgREVDTEFSRV9BTklN
QVRFRF9TVEFUSUNfUFJPUEVSVFlfTkVXKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgU1ZHTmFtZXM6
OmluQXR0ciwgU3RyaW5nLCBJbjEsIGluMSkKICAgICBERUNMQVJFX0FOSU1BVEVEX1NUQVRJQ19Q
Uk9QRVJUWV9ORVcoU1ZHRkVDb21wb3NpdGVFbGVtZW50LCBTVkdOYW1lczo6aW4yQXR0ciwgU3Ry
aW5nLCBJbjIsIGluMikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxl
bWVudC5jcHAJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6c3ZnQXR0cgogICAgICAgICBpbnZhbGlkYXRlKCk7
CiB9CiAKLVBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKK1Bhc3NSZWZQdHI8Rmls
dGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyKiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKIApAQCAtMTg5
LDcgKzE4OSw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbnZvbHZlTWEKICAg
ICAgICAgICAgIGRpdmlzb3JWYWx1ZSA9IDE7CiAgICAgfQogCi0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gZWZmZWN0ID0gRkVDb252b2x2ZU1hdHJpeDo6Y3JlYXRlKAorICAgIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsCiAgICAg
ICAgICAgICAgICAgICAgIEludFNpemUob3JkZXJYVmFsdWUsIG9yZGVyWVZhbHVlKSwgZGl2aXNv
clZhbHVlLAogICAgICAgICAgICAgICAgICAgICBiaWFzKCksIEludFBvaW50KHRhcmdldFhWYWx1
ZSwgdGFyZ2V0WVZhbHVlKSwgc3RhdGljX2Nhc3Q8RWRnZU1vZGVUeXBlPihlZGdlTW9kZSgpKSwK
ICAgICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJu
ZWxVbml0TGVuZ3RoWCgpKSwgcHJlc2VydmVBbHBoYSgpLCBrZXJuZWxNYXRyaXgpOwpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5oCShyZXZpc2lvbiA3MjA4OSkK
KysrIFdlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRl
Q2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZp
bHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciopOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIqKTsKICAg
ICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBvcmRlclhJZGVudGlmaWVyKCk7CiAgICAgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgb3JkZXJZSWRlbnRpZmllcigpOwogCkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDcyMDg5
KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50OjpzeW5jaHIKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxk
ZXIpCitQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIqIGZpbHRlcikK
IHsKICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4xKCkpOwogICAgIApAQCAtMTIyLDcgKzEyMiw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRURpZmZ1c2VMaWcKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGZpbHRlclN0eWxl
ID0gc3R5bGVGb3JSZW5kZXJlcigpOwogICAgIENvbG9yIGNvbG9yID0gZmlsdGVyU3R5bGUtPnN2
Z1N0eWxlKCktPmxpZ2h0aW5nQ29sb3IoKTsKICAgICAKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBlZmZlY3QgPSBGRURpZmZ1c2VMaWdodGluZzo6Y3JlYXRlKGNvbG9yLCBzdXJmYWNlU2NhbGUo
KSwgZGlmZnVzZUNvbnN0YW50KCksIAorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9
IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwgc3VyZmFjZVNjYWxlKCks
IGRpZmZ1c2VDb25zdGFudCgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLCBrZXJuZWxV
bml0TGVuZ3RoWSgpLCBmaW5kTGlnaHRzKCkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCku
YXBwZW5kKGlucHV0MSk7CiAgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAkocmV2aXNpb24gNzIwODkpCisr
KyBXZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hh
bmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXpl
UHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyKik7CiAK
ICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBrZXJuZWxVbml0TGVuZ3RoWElkZW50aWZp
ZXIoKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBrZXJuZWxVbml0TGVuZ3RoWUlk
ZW50aWZpZXIoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBT
VkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN5bmNocgogICAgICAgICBzeW5jaHJvbml6ZVNj
YWxlKCk7CiB9CiAKLVBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCitQYXNzUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyLCBGaWx0ZXIqIGZpbHRlcikKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOwog
ICAgIEZpbHRlckVmZmVjdCogaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjIoKSk7CkBAIC0xMTQsNyArMTE0LDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
RGlzcGxhY2VtZQogICAgIGlmICghaW5wdXQxIHx8ICFpbnB1dDIpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVEaXNwbGFjZW1lbnRNYXA6
OmNyZWF0ZShzdGF0aWNfY2FzdDxDaGFubmVsU2VsZWN0b3JUeXBlPih4Q2hhbm5lbFNlbGVjdG9y
KCkpLCAKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRURpc3BsYWNlbWVudE1h
cDo6Y3JlYXRlKGZpbHRlciwgc3RhdGljX2Nhc3Q8Q2hhbm5lbFNlbGVjdG9yVHlwZT4oeENoYW5u
ZWxTZWxlY3RvcigpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q2hhbm5lbFNlbGVjdG9yVHlwZT4o
eUNoYW5uZWxTZWxlY3RvcigpKSwgc2NhbGUoKSk7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwogICAgIGlucHV0RWZmZWN0cy5y
ZXNlcnZlQ2FwYWNpdHkoMik7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7
CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChT
VkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyKik7CiAgICAgCiAgICAgREVDTEFSRV9BTklNQVRFRF9T
VEFUSUNfUFJPUEVSVFlfTkVXKFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCwgU1ZHTmFtZXM6
OmluQXR0ciwgU3RyaW5nLCBJbjEsIGluMSkKICAgICBERUNMQVJFX0FOSU1BVEVEX1NUQVRJQ19Q
Uk9QRVJUWV9ORVcoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBTVkdOYW1lczo6aW4yQXR0
ciwgU3RyaW5nLCBJbjIsIGluMikKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwxNCArMzksMTQgQEAgUGFzc1JlZlB0cjxTVkdGRUZsb29kRWxlbWVu
dD4gU1ZHRkVGbG9vZAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRkVGbG9vZEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
Rmxvb2RFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKikKK1Bhc3NSZWZQdHI8RmlsdGVy
RWZmZWN0PiBTVkdGRUZsb29kRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciogZmlsdGVyKQogewogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZmlsdGVyU3R5bGUgPSBzdHls
ZUZvclJlbmRlcmVyKCk7CiAKICAgICBDb2xvciBjb2xvciA9IGZpbHRlclN0eWxlLT5zdmdTdHls
ZSgpLT5mbG9vZENvbG9yKCk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IGZpbHRlclN0eWxlLT5zdmdT
dHlsZSgpLT5mbG9vZE9wYWNpdHkoKTsKIAotICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoY29s
b3IsIG9wYWNpdHkpOworICAgIHJldHVybiBGRUZsb29kOjpjcmVhdGUoZmlsdGVyLCBjb2xvciwg
b3BhY2l0eSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAkocmV2aXNpb24g
NzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHRkVGbG9vZEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKik7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciosIEZpbHRl
ciopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxNCAr
MTAwLDE0IEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzeW5jaHJvbmkKICAgICAg
ICAgc3luY2hyb25pemVJbjEoKTsKIH0KIAotUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRl
cikKK1Bhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciogZmlsdGVyKQogewog
ICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlh
dGlvblgoKSwgc3RkRGV2aWF0aW9uWSgpKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZl
Y3QgPSBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uWCgpLCBzdGRE
ZXZpYXRpb25ZKCkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKGlucHV0MSk7
CiAgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWRO
YW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNW
R0ZpbHRlckJ1aWxkZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBi
dWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyKik7CiAKICAgICBzdGF0aWMgY29uc3QgQXRv
bWljU3RyaW5nJiBzdGREZXZpYXRpb25YSWRlbnRpZmllcigpOwogICAgIHN0YXRpYyBjb25zdCBB
dG9taWNTdHJpbmcmIHN0ZERldmlhdGlvbllJZGVudGlmaWVyKCk7CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgU1ZH
RkVJbWFnZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKEMKICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6
bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKHBhcmVudC0+cmVuZGVy
ZXIoKSk7CiB9CiAKLVBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUltYWdlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciopCitQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJ
bWFnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIqIGZpbHRlcikKIHsK
ICAgICBpZiAoIW1fY2FjaGVkSW1hZ2UgJiYgIW1fdGFyZ2V0SW1hZ2UpIHsKICAgICAgICAgRWxl
bWVudCogaHJlZkVsZW1lbnQgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChTVkdVUklSZWZl
cmVuY2U6OmdldFRhcmdldChocmVmKCkpKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBQYXNzUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lCiAgICAgICAgIFNWR0ltYWdlQnVmZmVyVG9v
bHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKG1fdGFyZ2V0SW1hZ2UuZ2V0KCksIHJlbmRl
cmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwogICAgIH0KIAotICAgIHJldHVybiBGRUltYWdl
OjpjcmVhdGUobV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmNvcHlJbWFnZSgpIDogbV9j
YWNoZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKKyAgICByZXR1cm4g
RkVJbWFnZTo6Y3JlYXRlKGZpbHRlciwgbV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmNv
cHlJbWFnZSgpIDogbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygp
KTsKIH0KIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZH
RkVJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxl
bWVudC5oCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciopOwogCiAgICAgdm9pZCByZXF1ZXN0SW1hZ2VSZXNvdXJjZSgp
OwogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MjA4OSkKKysr
IFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
OSArMzcsOSBAQCBQYXNzUmVmUHRyPFNWR0ZFTWVyZ2VFbGVtZW50PiBTVkdGRU1lcmdlCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdGRU1lcmdlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkp
OwogfQogCi1QYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxk
KFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCitQYXNzUmVmUHRyPEZpbHRlckVmZmVj
dD4gU1ZHRkVNZXJnZUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxk
ZXIsIEZpbHRlciogZmlsdGVyKQogewotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9
IEZFTWVyZ2U6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZF
TWVyZ2U6OmNyZWF0ZShmaWx0ZXIpOwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgbWVyZ2VJbnB1
dHMgPSBlZmZlY3QtPmlucHV0RWZmZWN0cygpOwogICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hp
bGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAobi0+aGFz
VGFnTmFtZShTVkdOYW1lczo6ZmVNZXJnZU5vZGVUYWcpKSB7CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdGRU1lcmdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmgJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFNWR0ZFTWVyZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVp
bGRlciopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqLCBGaWx0ZXIqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MjA4OSkK
KysrIFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTVkdGRU1vcnBob2xvZ3lFbGVtZW50OjpzeW5jaHJv
bml6ZQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCitQYXNzUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyKiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZm
ZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICBm
bG9hdCB4UmFkaXVzID0gcmFkaXVzWCgpOwpAQCAtMTIyLDcgKzEyMiw3IEBAIFBhc3NSZWZQdHI8
RmlsdGVyRWZmZWN0PiBTVkdGRU1vcnBob2xvZ3kKICAgICBpZiAoeFJhZGl1cyA8IDAgfHwgeVJh
ZGl1cyA8IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
ZWZmZWN0ID0gRkVNb3JwaG9sb2d5OjpjcmVhdGUoc3RhdGljX2Nhc3Q8TW9ycGhvbG9neU9wZXJh
dG9yVHlwZT4oX29wZXJhdG9yKCkpLCB4UmFkaXVzLCB5UmFkaXVzKTsKKyAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3QgPSBGRU1vcnBob2xvZ3k6OmNyZWF0ZShmaWx0ZXIsIHN0YXRpY19j
YXN0PE1vcnBob2xvZ3lPcGVyYXRvclR5cGU+KF9vcGVyYXRvcigpKSwgeFJhZGl1cywgeVJhZGl1
cyk7CiAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoaW5wdXQxKTsKICAgICByZXR1
cm4gZWZmZWN0LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9n
eUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmgJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwg
dm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciop
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1
aWxkZXIqLCBGaWx0ZXIqKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHJhZGl1
c1hJZGVudGlmaWVyKCk7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgcmFkaXVzWUlk
ZW50aWZpZXIoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAkocmV2aXNpb24g
NzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OSwxNCArNzksMTQgQEAgdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnN5bmNocm9u
aXplUHJvcAogICAgICAgICBzeW5jaHJvbml6ZUluMSgpOwogfQogCi1QYXNzUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0
ZXJCdWlsZGVyKQorUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFT2Zmc2V0RWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVyKiBmaWx0ZXIpCiB7
CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlk
KGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFT2Zmc2V0OjpjcmVhdGUoZHgoKSwgZHkoKSk7
CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0ID0gRkVPZmZzZXQ6OmNyZWF0ZShmaWx0
ZXIsIGR4KCksIGR5KCkpOwogICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkuYXBwZW5kKGlucHV0
MSk7CiAgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdGRU9mZnNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNl
dEVsZW1lbnQuaAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmly
dHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJC
dWlsZGVyKiwgRmlsdGVyKik7CiAKICAgICBERUNMQVJFX0FOSU1BVEVEX1NUQVRJQ19QUk9QRVJU
WV9ORVcoU1ZHRkVPZmZzZXRFbGVtZW50LCBTVkdOYW1lczo6aW5BdHRyLCBTdHJpbmcsIEluMSwg
aW4xKQogICAgIERFQ0xBUkVfQU5JTUFURURfU1RBVElDX1BST1BFUlRZX05FVyhTVkdGRU9mZnNl
dEVsZW1lbnQsIFNWR05hbWVzOjpkeEF0dHIsIGZsb2F0LCBEeCwgZHgpCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gNzIwODkp
CisrKyBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+IFNWR0ZF
U3BlY3VsYXJMaWcKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIpCitQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlciwgRmlsdGVy
KiBmaWx0ZXIpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKICAgICAKQEAgLTEzMSw3ICsxMzEsNyBAQCBQYXNzUmVmUHRy
PEZpbHRlckVmZmVjdD4gU1ZHRkVTcGVjdWxhckxpCiAgICAgCiAgICAgQ29sb3IgY29sb3IgPSBm
aWx0ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+bGlnaHRpbmdDb2xvcigpOwogCi0gICAgUmVmUHRyPEZp
bHRlckVmZmVjdD4gZWZmZWN0ID0gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29sb3IsIHN1
cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIAorICAgIFJlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGVmZmVjdCA9IEZFU3BlY3VsYXJMaWdodGluZzo6Y3JlYXRlKGZpbHRlciwgY29sb3IsIHN1
cmZhY2VTY2FsZSgpLCBzcGVjdWxhckNvbnN0YW50KCksIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXJFeHBvbmVudCgpLCBrZXJuZWxVbml0TGVuZ3Ro
WCgpLCBrZXJuZWxVbml0TGVuZ3RoWSgpLCBmaW5kTGlnaHRzKCkpOwogICAgIGVmZmVjdC0+aW5w
dXRFZmZlY3RzKCkuYXBwZW5kKGlucHV0MSk7CiAgICAgcmV0dXJuIGVmZmVjdC5yZWxlYXNlKCk7
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCShyZXZp
c2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciopOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxk
ZXIqLCBGaWx0ZXIqKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGtlcm5lbFVu
aXRMZW5ndGhYSWRlbnRpZmllcigpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGtl
cm5lbFVuaXRMZW5ndGhZSWRlbnRpZmllcigpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDE0ICs2MywxNCBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6
OnN5bmNocm9uaXplUHJvcGVyCiAgICAgICAgIHN5bmNocm9uaXplSW4xKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRVRpbGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyKQorUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFVGlsZUVs
ZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIsIEZpbHRlciogZmls
dGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QgPSBGRVRpbGU6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCA9IEZFVGlsZTo6Y3JlYXRlKGZpbHRlcik7CiAg
ICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoaW5wdXQxKTsKICAgICByZXR1cm4gZWZm
ZWN0LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgJKHJldmlzaW9uIDcy
MDg5KQorKysgV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2Vk
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25pemVQcm9w
ZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGQoU1ZHRmlsdGVyQnVpbGRlciopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqLCBGaWx0ZXIqKTsKIAogICAg
IERFQ0xBUkVfQU5JTUFURURfU1RBVElDX1BST1BFUlRZX05FVyhTVkdGRVRpbGVFbGVtZW50LCBT
VkdOYW1lczo6aW5BdHRyLCBTdHJpbmcsIEluMSwgaW4xKQogfTsKSW5kZXg6IFdlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvc3Zn
L1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMTIgKzEx
OSwxMiBAQCB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN5bmNocm9uaXplCiAgICAgICAg
IHN5bmNocm9uaXplTnVtT2N0YXZlcygpOwogfQogCi1QYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciopCitQYXNzUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVy
QnVpbGRlciosIEZpbHRlciogZmlsdGVyKQogewogICAgIGlmIChiYXNlRnJlcXVlbmN5WCgpIDwg
MCB8fCBiYXNlRnJlcXVlbmN5WSgpIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1
cm4gRkVUdXJidWxlbmNlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8VHVyYnVsYW5jZVR5cGU+KHR5cGUo
KSksIGJhc2VGcmVxdWVuY3lYKCksIAorICAgIHJldHVybiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShm
aWx0ZXIsIHN0YXRpY19jYXN0PFR1cmJ1bGFuY2VUeXBlPih0eXBlKCkpLCBiYXNlRnJlcXVlbmN5
WCgpLCAKICAgICAgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSgpLCBudW1PY3RhdmVzKCksIHNl
ZWQoKSwgc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOwogfQogCkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCShyZXZpc2lvbiA3MjA4OSkKKysrIFdl
YkNvcmUvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NyArNDMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9uaXplUHJvcGVydHko
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZl
Y3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rmls
dGVyRWZmZWN0PiBidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiwgRmlsdGVyKik7CiAKICAgICBzdGF0
aWMgY29uc3QgQXRvbWljU3RyaW5nJiBiYXNlRnJlcXVlbmN5WElkZW50aWZpZXIoKTsKICAgICBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBiYXNlRnJlcXVlbmN5WUlkZW50aWZpZXIoKTsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oCShyZXZpc2lvbiA3MjA4OSkKKysrIFdlYkNvcmUvc3ZnL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNs
YXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXQKIHB1YmxpYzoKICAgICB2b2lk
IHNldFN0YW5kYXJkQXR0cmlidXRlcyhib29sLCBGaWx0ZXJFZmZlY3QqKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIq
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGQoU1ZHRmls
dGVyQnVpbGRlciosIEZpbHRlciogZmlsdGVyKSA9IDA7CiAKIHByb3RlY3RlZDoKICAgICBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTkgKzMyLDE5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRkVJbWFnZTo6RkVJbWFnZShSZWZQdHI8SW1hZ2U+IGltYWdlLCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQotICAgIDog
RmlsdGVyRWZmZWN0KCkKK0ZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVyKiBmaWx0ZXIsIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIHByZXNlcnZlQXNwZWN0
UmF0aW8pCisgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyKQogICAgICwgbV9pbWFnZShpbWFnZSkK
ICAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQog
Ci1QYXNzUmVmUHRyPEZFSW1hZ2U+IEZFSW1hZ2U6OmNyZWF0ZShSZWZQdHI8SW1hZ2U+IGltYWdl
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQorUGFz
c1JlZlB0cjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGUoRmlsdGVyKiBmaWx0ZXIsIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mIHByZXNlcnZlQXNwZWN0
UmF0aW8pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUltYWdlKGltYWdlLCBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUltYWdlKGZpbHRlciwg
aW1hZ2UsIHByZXNlcnZlQXNwZWN0UmF0aW8pKTsKIH0KIAotdm9pZCBGRUltYWdlOjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChGaWx0ZXIqKQordm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgQVNTRVJUKG1faW1hZ2UpOwogICAgIEZsb2F0UmVjdCBz
cmNSZWN0KEZsb2F0UG9pbnQoKSwgbV9pbWFnZS0+c2l6ZSgpKTsKQEAgLTU0LDEyICs1NCwxMiBA
QCB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0CiAgICAgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRUlt
YWdlOjphcHBseShGaWx0ZXIqIGZpbHRlcikKK3ZvaWQgRkVJbWFnZTo6YXBwbHkoKQogewogICAg
IGlmICghbV9pbWFnZS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250
ZXh0KiBmaWx0ZXJDb250ZXh0ID0gZWZmZWN0Q29udGV4dChmaWx0ZXIpOworICAgIEdyYXBoaWNz
Q29udGV4dCogZmlsdGVyQ29udGV4dCA9IGVmZmVjdENvbnRleHQoKTsKICAgICBpZiAoIWZpbHRl
ckNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgJKHJldmlzaW9uIDcyMDg5KQorKysgV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIxICszMSwy
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZFSW1hZ2UgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUltYWdlPiBjcmVhdGUo
UmVmUHRyPEltYWdlPiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyYpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZFSW1hZ2U+IGNyZWF0ZShGaWx0ZXIqLCBSZWZQdHI8SW1hZ2U+LCBjb25z
dCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvJik7CiAKICAgICB2b2lkIHNldEFic29sdXRlU3VicmVn
aW9uKGNvbnN0IEZsb2F0UmVjdCYgYWJzb2x1dGVTdWJyZWdpb24pIHsgbV9hYnNvbHV0ZVN1YnJl
Z2lvbiA9IGFic29sdXRlU3VicmVnaW9uOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmls
dGVyKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChGaWx0ZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKIAogICAg
IHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgeyByZXR1
cm4gRmlsdGVyRWZmZWN0VHlwZUltYWdlOyB9CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKLSAgICBGRUltYWdlKFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW8mKTsKKyAgICBGRUltYWdlKEZpbHRlciosIFJlZlB0cjxJbWFnZT4sIGNv
bnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8mKTsKIAogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFn
ZTsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKSW5k
ZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAkocmV2aXNpb24gNzIwODkpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsMTEgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVy
KCkKK1NWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoRmlsdGVyKiBmaWx0ZXIpCiAg
ICAgOiBtX2xhc3RFZmZlY3QoMCkKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCksIFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpKTsKLSAgICBtX2J1
aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6
Y3JlYXRlKCkpOworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVj
dE5hbWUoKSwgU291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOworICAgIG1fYnVpbHRpbkVm
ZmVjdHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUo
ZmlsdGVyKSk7CiAgICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKIH0KIApJbmRleDogV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgJKHJldmlzaW9uIDcy
MDg5KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVm
ZmVjdFNldDsKIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRmlsdGVyQnVpbGRlcik7IH0KKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gY3JlYXRlKEZpbHRlciogZmls
dGVyKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRmlsdGVyQnVpbGRlcihmaWx0ZXIpKTsgfQog
CiAgICAgICAgIHZvaWQgYWRkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGVmZmVjdCk7CiAKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU1ZH
RmlsdGVyQnVpbGRlcigpOworICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyKEZpbHRlciopOwogCiAg
ICAgICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKICAgICAgICAgewo=
</data>
<flag name="review"
          id="65091"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>