<?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>205001</bug_id>
          
          <creation_ts>2019-12-08 17:33:05 -0800</creation_ts>
          <short_desc>Add encoding and decoding support for more DisplayListItems</short_desc>
          <delta_ts>2019-12-09 00:18:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>justin_fan</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1596743</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-08 17:33:05 -0800</bug_when>
    <thetext>See: DisplayListItems.h in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596756</commentid>
    <comment_count>1</comment_count>
      <attachid>385132</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-08 20:53:59 -0800</bug_when>
    <thetext>Created attachment 385132
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596757</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-08 21:00:43 -0800</bug_when>
    <thetext>❤️</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596758</commentid>
    <comment_count>3</comment_count>
      <attachid>385132</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-08 21:08:56 -0800</bug_when>
    <thetext>Comment on attachment 385132
WIP

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

&gt; Source/WebCore/platform/graphics/GraphicsTypes.h:199
&gt; +    WebCore::LineCap::ButtCap,

At some point we should enum class these (and drop the suffixes). I&apos;d mostly been doing that as I went along, but I can see why you might not want to :D

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:533
&gt; +void SetLineCap::encode(Encoder&amp; encoder) const

Wonder why these aren&apos;t in the State thing

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:1233
&gt; +    encoder &lt;&lt; m_point1 &lt;&lt; m_point2;

I don&apos;t love multiple items on one line.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:1358
&gt; +    encoder &lt;&lt; m_rect &lt;&lt; m_style;

Ditto

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:1845
&gt; +    encoder &lt;&lt; m_rect;

Much better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596759</commentid>
    <comment_count>4</comment_count>
      <attachid>385132</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-08 21:49:00 -0800</bug_when>
    <thetext>Comment on attachment 385132
WIP

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

I’m also adding a few more image-y display list item encoder/decoders in a v2.

&gt;&gt; Source/WebCore/platform/graphics/GraphicsTypes.h:199
&gt;&gt; +    WebCore::LineCap::ButtCap,
&gt; 
&gt; At some point we should enum class these (and drop the suffixes). I&apos;d mostly been doing that as I went along, but I can see why you might not want to :D

Definitely considered it! But yes, I’ll do that it a separate change (since this patch has already gotten quite large).

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:533
&gt;&gt; +void SetLineCap::encode(Encoder&amp; encoder) const
&gt; 
&gt; Wonder why these aren&apos;t in the State thing

Good question. I’ll leave it like this for now (it might be something to fix when I work on getting SetState to propagate all of its bits).

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:1233
&gt;&gt; +    encoder &lt;&lt; m_point1 &lt;&lt; m_point2;
&gt; 
&gt; I don&apos;t love multiple items on one line.

Ok! Moved to one &lt;&lt; per line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596760</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-08 21:52:12 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #4)
&gt; Comment on attachment 385132 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385132&amp;action=review
&gt; 
&gt; I’m also adding a few more image-y display list item encoder/decoders in a
&gt; v2.

Woot

&gt; &gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.h:533
&gt; &gt;&gt; +void SetLineCap::encode(Encoder&amp; encoder) const
&gt; &gt; 
&gt; &gt; Wonder why these aren&apos;t in the State thing
&gt; 
&gt; Good question. I’ll leave it like this for now (it might be something to fix
&gt; when I work on getting SetState to propagate all of its bits).

Yeah this was more of a smfr question</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596761</commentid>
    <comment_count>6</comment_count>
      <attachid>385133</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-08 22:02:27 -0800</bug_when>
    <thetext>Created attachment 385133
v2 (w/ more drawing items supported)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596771</commentid>
    <comment_count>7</comment_count>
      <attachid>385133</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-09 00:17:45 -0800</bug_when>
    <thetext>Comment on attachment 385133
v2 (w/ more drawing items supported)

Clearing flags on attachment: 385133

Committed r253283: &lt;https://trac.webkit.org/changeset/253283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596772</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-09 00:17:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596773</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-09 00:18:44 -0800</bug_when>
    <thetext>&lt;rdar://problem/57742387&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385132</attachid>
            <date>2019-12-08 20:53:59 -0800</date>
            <delta_ts>2019-12-08 22:02:26 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-205001-20191208205358.patch</filename>
            <type>text/plain</type>
            <size>67926</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODllYzkxYWVhYjg5YjE0
Nzg3ZWY2OWQ5ZDg3Zjg5MmNmYWFjOTgyMC4uZGIyYWU2MzVjZGRiMzM4N2JiYWVhOTIwOTQ3ZGE5
OTU1ZmE1MTM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNiBAQAorMjAxOS0xMi0wOCAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZW5jb2Rp
bmcgYW5kIGRlY29kaW5nIHN1cHBvcnQgZm9yIG1vcmUgRGlzcGxheUxpc3RJdGVtcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MDAxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBib2lsZXJwbGF0
ZSBjb2RlIHRvIGVuY29kZSBhbmQgZGVjb2RlIHRoZSBmb2xsb3dpbmcgZGlzcGxheSBsaXN0IGl0
ZW1zOiBTZXRMaW5lQ2FwLCBTZXRMaW5lRGFzaCwKKyAgICAgICAgU2V0TGluZUpvaW4sIFNldE1p
dGVyTGltaXQsIENsZWFyU2hhZG93LCBDbGlwLCBDbGlwT3V0LCBDbGlwT3V0VG9QYXRoLCBDbGlw
UGF0aCwgQmVnaW5UcmFuc3BhcmVuY3lMYXllciwKKyAgICAgICAgRW5kVHJhbnNwYXJlbmN5TGF5
ZXIsIERyYXdMaW5lLCBEcmF3TGluZXNGb3JUZXh0LCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
LCBEcmF3RWxsaXBzZSwgRHJhd0ZvY3VzUmluZ1BhdGgsCisgICAgICAgIERyYXdGb2N1c1JpbmdS
ZWN0cywgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsIEZpbGxFbGxpcHNlLCBTdHJva2VSZWN0LCBT
dHJva2VQYXRoLCBTdHJva2VFbGxpcHNlLAorICAgICAgICBBcHBseVN0cm9rZVBhdHRlcm4sIEFw
cGx5RmlsbFBhdHRlcm4gYW5kIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpbmRS
dWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OlNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNo
OjpTZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpv
aW46OlNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRl
ckxpbWl0OjpTZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGVhclNoYWRvdzo6Q2xlYXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXA6OkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OkNs
aXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OkNs
aXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpD
bGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRyYXdM
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpE
cmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpEcmF3Rm9jdXNSaW5n
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OjpEcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpF
bmRUcmFuc3BhcmVuY3lMYXllcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6QXBwbHlTdHJva2VQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpBcHBs
eUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmlj
ZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsaXBPdXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXRUb1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcFBhdGg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcFBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVn
aW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsRWxsaXBzZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsRWxsaXBzZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VSZWN0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZVJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlUGF0aDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZUVsbGlwc2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OlNldExpbmVD
YXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNo
OjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TGluZUpvaW46OlNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Q2xlYXJTaGFkb3cpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OkNsaXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OkNsaXBPdXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OkNsaXBP
dXRUb1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQ
YXRoOjpDbGlwUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TGluZTo6RHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6
OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQ
YXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUmVjdHM6OkRyYXdGb2N1c1JpbmdSZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxs
aXBzZTo6RmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVJlY3Q6OlN0cm9rZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6
QXBwbHlTdHJva2VQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURl
dmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKwogMjAxOS0xMi0wOCAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFdlYkNvcmU6OlBhdGggZW5j
b2RlcnMgYW5kIGRlY29kZXJzIGludG8gV2ViQ29yZSBmcm9tIFdlYkNvcmVBcmd1bWVudENvZGVy
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAppbmRleCBiMTVmZmZjYTdjMDNlOWM5Njk2YWZiMDNiYTRiYmE2ZTY0YWQyMzA4Li5jNTJk
NmI4YjQzMDA2Y2Y3Y2E5ZDkwY2YzMjExMWMxZDU1NzhkZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTI0LDggKzEy
NCwzMyBAQCBzdHJ1Y3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgewogICAgICAgICBEaWN0YXRp
b25BbHRlcm5hdGl2ZXMKICAgICB9IG1vZGU7CiAgICAgYm9vbCBzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZSB7IGZhbHNlIH07CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAor
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbW9kZSA8PCBz
aG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09w
dGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8TW9kZT4gbW9kZTsKKyAg
ICBkZWNvZGVyID4+IG1vZGU7CisgICAgaWYgKCFtb2RlKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgT3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Cisg
ICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0
dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfX07Cit9CisKIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdCB7CiBjbGFzcyBSZWNvcmRlcjsKIH0KQEAgLTcyMywzICs3NDgsMTggQEAg
cHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRo
QWx0ZXJuYXRpdmVzLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
OjpTcGVsbGluZywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6
R3JhbW1hciwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0
b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oCmluZGV4IDU5ODNkMjY5OWVkMzY5YjAxZjc1YTA1ZmRmNTQ0NTRkNWM4N2ZlMzku
LmNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDkyMDFiNzZmMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTE5Myw2ICsx
OTMsMjQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpCbGVuZE1vZGU+
IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpM
aW5lQ2FwPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpM
aW5lQ2FwLAorICAgIFdlYkNvcmU6OkxpbmVDYXA6OkJ1dHRDYXAsCisgICAgV2ViQ29yZTo6TGlu
ZUNhcDo6Um91bmRDYXAsCisgICAgV2ViQ29yZTo6TGluZUNhcDo6U3F1YXJlQ2FwCisgICAgPjsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6TGluZUpvaW4+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkxpbmVKb2luLAor
ICAgIFdlYkNvcmU6OkxpbmVKb2luOjpNaXRlckpvaW4sCisgICAgV2ViQ29yZTo6TGluZUpvaW46
OlJvdW5kSm9pbiwKKyAgICBXZWJDb3JlOjpMaW5lSm9pbjo6QmV2ZWxKb2luCisgICAgPjsKK307
CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1
YWxpdHk+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgIFdlYkNvcmU6Oklu
dGVycG9sYXRpb25RdWFsaXR5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2luZFJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
bmRSdWxlLmgKaW5kZXggNTY0ZTIwMzdjZmNhN2Y5Mjg0NzkzOTliNmZiMzg4NjQ4MTQ2M2QwZS4u
ODhhY2Y4ZmU1ZGYxYTAzODNmNzAxZjYzMTMwZjgwNjc0YTU2Nzk1OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2luZFJ1bGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaW5kUnVsZS5oCkBAIC0zNCw0ICszNCwxNiBAQCBlbnVt
IGNsYXNzIFdpbmRSdWxlIDogdWludDhfdCB7CiAgICAgRXZlbk9kZCA9IDEKIH07CiAKLX0KK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6V2luZFJ1bGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OldpbmRSdWxlLAorICAgIFdlYkNvcmU6OldpbmRSdWxl
OjpOb25aZXJvLAorICAgIFdlYkNvcmU6OldpbmRSdWxlOjpFdmVuT2RkCisgICAgPjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmlu
ZGV4IDc2NDc3OTMzOTBhMzg5ZTQzODUxZWRkNWY4ZTYxY2QwMzJhM2U4MzguLjZjMWQ2ZTNiYjQ5
MTY0MTg5NTk1ZDczMzk4ZDQ3ODk0MmMyODVlMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKQEAgLTMyMiw2ICszMjIsMTQgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkKICAgICByZXR1cm4g
dHM7CiB9CiAKK1NldExpbmVDYXA6OlNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorICAgIDog
SXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkKKyAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQorewor
fQorCitTZXRMaW5lQ2FwOjp+U2V0TGluZUNhcCgpID0gZGVmYXVsdDsKKwogdm9pZCBTZXRMaW5l
Q2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7CkBAIC0zMzMsNiArMzQxLDE1IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5l
Q2FwKQogICAgIHJldHVybiB0czsKIH0KIAorU2V0TGluZURhc2g6OlNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIDogSXRlbShJdGVt
VHlwZTo6U2V0TGluZURhc2gpCisgICAgLCBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCisgICAgLCBt
X2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKK3sKK30KKworU2V0TGluZURhc2g6On5TZXRMaW5lRGFz
aCgpID0gZGVmYXVsdDsKKwogdm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXks
IG1fZGFzaE9mZnNldCk7CkBAIC0zNDUsNiArMzYyLDE0IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCiAg
ICAgcmV0dXJuIHRzOwogfQogCitTZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4oTGluZUpvaW4gbGlu
ZUpvaW4pCisgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lSm9pbikKKyAgICAsIG1fbGluZUpv
aW4obGluZUpvaW4pCit7Cit9CisKK1NldExpbmVKb2luOjp+U2V0TGluZUpvaW4oKSA9IGRlZmF1
bHQ7CisKIHZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwpAQCAtMzU2LDYg
KzM4MSwxNCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU2V0TGluZUpvaW4mIGxpbmVKb2luKQogICAgIHJldHVybiB0czsKIH0KIAorU2V0TWl0
ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQorICAgIDogSXRlbShJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdCkKKyAgICAsIG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQorewor
fQorCitTZXRNaXRlckxpbWl0Ojp+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKwogdm9pZCBT
ZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7CkBAIC0zNjcsMTEgKzQwMCwy
NiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKICAgICByZXR1cm4gdHM7CiB9CiAKK0NsZWFyU2hh
ZG93OjpDbGVhclNoYWRvdygpCisgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKK3sK
K30KKworQ2xlYXJTaGFkb3c6On5DbGVhclNoYWRvdygpID0gZGVmYXVsdDsKKwogdm9pZCBDbGVh
clNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuY2xlYXJTaGFkb3coKTsKIH0KIAorQ2xpcDo6Q2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCisgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQorICAgICwgbV9yZWN0KHJlY3QpCit7Cit9
CisKK0NsaXA6On5DbGlwKCkgPSBkZWZhdWx0OworCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAg
LTM4Myw2ICs0MzEsMTQgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENsaXAmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCitDbGlwT3V0OjpD
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBP
dXQpCisgICAgLCBtX3JlY3QocmVjdCkKK3sKK30KKworQ2xpcE91dDo6fkNsaXBPdXQoKSA9IGRl
ZmF1bHQ7CisKIHZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3QpOwpAQCAtMzk0LDYgKzQ1MCwxNCBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xp
cE91dCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKK0NsaXBPdXRUb1BhdGg6OkNsaXBPdXRU
b1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGgpCisgICAgLCBtX3BhdGgocGF0aCkKK3sKK30KKworQ2xpcE91dFRvUGF0aDo6fkNsaXBPdXRU
b1BhdGgoKSA9IGRlZmF1bHQ7CisKIHZvaWQgQ2xpcE91dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcE91dChtX3BhdGgpOwpA
QCAtNDA1LDYgKzQ2OSwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgQ2xpcE91dFRvUGF0aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAK
K0NsaXBQYXRoOjpDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
KyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQorICAgICwgbV9wYXRoKHBhdGgpCisgICAg
LCBtX3dpbmRSdWxlKHdpbmRSdWxlKQoreworfQorCitDbGlwUGF0aDo6fkNsaXBQYXRoKCkgPSBk
ZWZhdWx0OworCiB2b2lkIENsaXBQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwUGF0aChtX3BhdGgsIG1fd2luZFJ1bGUpOwpAQCAt
NjQ4LDYgKzcyMSwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRHJhd1JlY3QmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCitEcmF3TGlu
ZTo6RHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmUpCisgICAgLCBtX3Bv
aW50MShwb2ludDEpCisgICAgLCBtX3BvaW50Mihwb2ludDIpCit7Cit9CisKK0RyYXdMaW5lOjp+
RHJhd0xpbmUoKSA9IGRlZmF1bHQ7CisKIE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0xpbmU6Omxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0
IGJvdW5kczsKQEAgLTY2OCw2ICs3NTAsMTkgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lJiBpdGVtKQogICAgIHJldHVybiB0czsK
IH0KIAorRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCisg
ICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKKyAgICAsIG1fbG9jYWxBbmNob3Io
bG9jYWxBbmNob3IpCisgICAgLCBtX3dpZHRocyh3aWR0aHMpCisgICAgLCBtX3RoaWNrbmVzcyh0
aGlja25lc3MpCisgICAgLCBtX3ByaW50aW5nKHByaW50aW5nKQorICAgICwgbV9kb3VibGVMaW5l
cyhkb3VibGVMaW5lcykKK3sKK30KKworRHJhd0xpbmVzRm9yVGV4dDo6fkRyYXdMaW5lc0ZvclRl
eHQoKSA9IGRlZmF1bHQ7CisKIHZvaWQgRHJhd0xpbmVzRm9yVGV4dDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChw
b2ludCgpLCBtX3RoaWNrbmVzcywgbV93aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMp
OwpAQCAtNjk5LDYgKzc5NCwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4dCYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKK0RyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
KyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQor
ICAgICwgbV9yZWN0KHJlY3QpCisgICAgLCBtX3N0eWxlKHN0eWxlKQoreworfQorCitEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOjp+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVs
dDsKKwogdm9pZCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKG1fcmVjdCwgbV9zdHlsZSk7CkBAIC03MTYsNiArODIwLDE0IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyJiBpCiAgICAgcmV0dXJuIHRzOwogfQogCitEcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdF
bGxpcHNlKQorICAgICwgbV9yZWN0KHJlY3QpCit7Cit9CisKK0RyYXdFbGxpcHNlOjp+RHJhd0Vs
bGlwc2UoKSA9IGRlZmF1bHQ7CisKIHZvaWQgRHJhd0VsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdFbGxpcHNlKG1fcmVjdCk7
CkBAIC03NTEsNiArODYzLDE3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKK0Ry
YXdGb2N1c1JpbmdQYXRoOjpEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGgpCisgICAgLCBtX3BhdGgocGF0aCkKKyAg
ICAsIG1fd2lkdGgod2lkdGgpCisgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX2NvbG9y
KGNvbG9yKQoreworfQorCitEcmF3Rm9jdXNSaW5nUGF0aDo6fkRyYXdGb2N1c1JpbmdQYXRoKCkg
PSBkZWZhdWx0OworCiB2b2lkIERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwg
bV93aWR0aCwgbV9vZmZzZXQsIG1fY29sb3IpOwpAQCAtNzczLDYgKzg5NiwxNyBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmlu
Z1BhdGgmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCitEcmF3Rm9jdXNSaW5nUmVjdHM6OkRy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHMpCisgICAgLCBtX3JlY3RzKHJlY3RzKQorICAg
ICwgbV93aWR0aCh3aWR0aCkKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fY29sb3Io
Y29sb3IpCit7Cit9CisKK0RyYXdGb2N1c1JpbmdSZWN0czo6fkRyYXdGb2N1c1JpbmdSZWN0cygp
ID0gZGVmYXVsdDsKKwogdm9pZCBEcmF3Rm9jdXNSaW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0
cywgbV93aWR0aCwgbV9vZmZzZXQsIG1fY29sb3IpOwpAQCAtOTAyLDYgKzEwMzYsMTYgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3Vu
ZGVkUmVjdCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKK0ZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQorICAg
ICwgbV9yZWN0KHJlY3QpCisgICAgLCBtX3JvdW5kZWRIb2xlUmVjdChyb3VuZGVkSG9sZVJlY3Qp
CisgICAgLCBtX2NvbG9yKGNvbG9yKQoreworfQorCitGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6
fkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCkgPSBkZWZhdWx0OworCiB2b2lkIEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3JlY3QsIG1fcm91bmRlZEhvbGVS
ZWN0LCBtX2NvbG9yKTsKQEAgLTkzNiw2ICsxMDgwLDE0IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUGF0aCYgaXRlbSkKICAgICByZXR1
cm4gdHM7CiB9CiAKK0ZpbGxFbGxpcHNlOjpGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbEVsbGlwc2UpCisgICAgLCBtX3Jl
Y3QocmVjdCkKK3sKK30KKworRmlsbEVsbGlwc2U6On5GaWxsRWxsaXBzZSgpID0gZGVmYXVsdDsK
Kwogdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuZmlsbEVsbGlwc2UobV9yZWN0KTsKQEAgLTk0OCw2ICsxMTAwLDE1
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBG
aWxsRWxsaXBzZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKK1N0cm9rZVJlY3Q6OlN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUmVjdCkKKyAgICAsIG1fcmVjdChyZWN0KQorICAgICwg
bV9saW5lV2lkdGgobGluZVdpZHRoKQoreworfQorCitTdHJva2VSZWN0Ojp+U3Ryb2tlUmVjdCgp
ID0gZGVmYXVsdDsKKwogT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VSZWN0Ojpsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBib3VuZHMg
PSBtX3JlY3Q7CkBAIC05OTAsNiArMTE1MSwxNCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKICAgICByZXR1cm4g
dHM7CiB9CiAKK1N0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2UpCisgICAgLCBt
X3JlY3QocmVjdCkKK3sKK30KKworU3Ryb2tlRWxsaXBzZTo6flN0cm9rZUVsbGlwc2UoKSA9IGRl
ZmF1bHQ7CisKIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGZsb2F0IHN0cm9r
ZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMDExLDYgKzExODAs
MTQgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFN0cm9rZUVsbGlwc2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCitTdHJva2VQYXRoOjpT
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
U3Ryb2tlUGF0aCkKKyAgICAsIG1fcGF0aChwYXRoKQoreworfQorCitTdHJva2VQYXRoOjp+U3Ry
b2tlUGF0aCgpID0gZGVmYXVsdDsKKwogQ2xlYXJSZWN0OjpDbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkNsZWFyUmVjdCkKICAgICAs
IG1fcmVjdChyZWN0KQpAQCAtMTAzMSw2ICsxMjA4LDE0IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGVhclJlY3QmIGl0ZW0pCiAgICAgcmV0
dXJuIHRzOwogfQogCitCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcikKKyAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQoreworfQorCitCZWdpblRy
YW5zcGFyZW5jeUxheWVyOjp+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKKwog
dm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fb3BhY2l0
eSk7CkBAIC0xMDQzLDIzICsxMjI4LDUyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtCiAgICAg
cmV0dXJuIHRzOwogfQogCitFbmRUcmFuc3BhcmVuY3lMYXllcjo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyKQor
eworfQorCitFbmRUcmFuc3BhcmVuY3lMYXllcjo6fkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBk
ZWZhdWx0OworCiB2b2lkIEVuZFRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OwogfQogCiAjaWYgVVNFKENHKQorQXBwbHlTdHJva2VQYXR0ZXJuOjpBcHBseVN0cm9rZVBhdHRl
cm4oKQorICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuKQoreworfQorCitB
cHBseVN0cm9rZVBhdHRlcm46On5BcHBseVN0cm9rZVBhdHRlcm4oKSA9IGRlZmF1bHQ7CisKIHZv
aWQgQXBwbHlTdHJva2VQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKIH0KIAorQXBwbHlGaWxs
UGF0dGVybjo6QXBwbHlGaWxsUGF0dGVybigpCisgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseUZp
bGxQYXR0ZXJuKQoreworfQorCitBcHBseUZpbGxQYXR0ZXJuOjp+QXBwbHlGaWxsUGF0dGVybigp
ID0gZGVmYXVsdDsKKwogdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7CiB9
CiAjZW5kaWYKIAorQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBzY2FsZUZhY3RvcikKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IpCisgICAgLCBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQoreworfQorCitBcHBs
eURldmljZVNjYWxlRmFjdG9yOjp+QXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpID0gZGVmYXVsdDsK
Kwogdm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fc2Nh
bGVGYWN0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggZDIyNDY3MDUy
ZGQyNjdkM2E4ZmFkMmVmYTMzOTlmY2QxNjJiMDg3Zi4uZTc1M2RiMWI2MzYyMWViMjBkNTQ1MWQz
M2UxZGEyMzhhZGY1OWVjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC01
MTMsMjEgKzUxMywzOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTZXRMaW5lQ2FwKGxpbmVDYXApKTsKICAgICB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5TZXRMaW5lQ2FwKCk7CiAgICAgCiAgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQ2FwOyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxTZXRMaW5lQ2FwPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0
ZToKLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICAgICAgOiBJdGVtKEl0ZW1U
eXBlOjpTZXRMaW5lQ2FwKQotICAgICAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQotICAgIHsKLSAg
ICB9CisgICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZUNhcChMaW5lQ2FwKTsKIAogICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBMaW5lQ2FwIG1f
bGluZUNhcDsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFNldExpbmVDYXA6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9saW5l
Q2FwOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPFNldExpbmVD
YXA+PiBTZXRMaW5lQ2FwOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25h
bDxMaW5lQ2FwPiBsaW5lQ2FwOworICAgIGRlY29kZXIgPj4gbGluZUNhcDsKKyAgICBpZiAoIWxp
bmVDYXApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU2V0TGlu
ZUNhcDo6Y3JlYXRlKCpsaW5lQ2FwKTsKK30KKwogY2xhc3MgU2V0TGluZURhc2ggOiBwdWJsaWMg
SXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0
IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQpAQCAtNTM1LDE2ICs1NTMs
MTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lRGFzaChk
YXNoQXJyYXksIGRhc2hPZmZzZXQpKTsKICAgICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5TZXRMaW5lRGFzaCgpOworCiAgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBj
b25zdCB7IHJldHVybiBtX2Rhc2hBcnJheTsgfQogICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX2Rhc2hPZmZzZXQ7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gZGVjb2RlKERlY29kZXImKTsKKwog
cHJpdmF0ZToKLSAgICBTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxv
YXQgZGFzaE9mZnNldCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lRGFzaCkKLSAg
ICAgICAgLCBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgICAgICwgbV9kYXNoT2Zmc2V0KGRh
c2hPZmZzZXQpCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBTZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KTsKIAogICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTU1MiwyNyArNTcwLDY3IEBAIHBy
aXZhdGU6CiAgICAgZmxvYXQgbV9kYXNoT2Zmc2V0OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgbV9kYXNoQXJyYXkgPDwgbV9kYXNoT2Zmc2V0OworfQorCit0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gU2V0TGluZURh
c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPERhc2hBcnJheT4g
ZGFzaEFycmF5OworICAgIGRlY29kZXIgPj4gZGFzaEFycmF5OworICAgIGlmICghZGFzaEFycmF5
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8ZmxvYXQ+IGRh
c2hPZmZzZXQ7CisgICAgZGVjb2RlciA+PiBkYXNoT2Zmc2V0OworICAgIGlmICghZGFzaE9mZnNl
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBTZXRMaW5lRGFz
aDo6Y3JlYXRlKCpkYXNoQXJyYXksICpkYXNoT2Zmc2V0KTsKK30KKwogY2xhc3MgU2V0TGluZUpv
aW4gOiBwdWJsaWMgSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTZXRMaW5lSm9pbj4g
Y3JlYXRlKExpbmVKb2luIGxpbmVKb2luKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2V0TGluZUpvaW4obGluZUpvaW4pKTsKICAgICB9CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpOwogICAgIAogICAgIExpbmVKb2luIGxpbmVKb2luKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQogCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBkZWNvZGUoRGVjb2RlciYpOwor
CiBwcml2YXRlOgotICAgIFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotICAgICAgICA6
IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVKb2luKQotICAgICAgICAsIG1fbGluZUpvaW4obGluZUpv
aW4pCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBTZXRMaW5lSm9pbihMaW5lSm9p
bik7CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwog
CiAgICAgTGluZUpvaW4gbV9saW5lSm9pbjsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIFNldExpbmVKb2luOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IG1fbGluZUpvaW47Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitP
cHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBTZXRMaW5lSm9pbjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgT3B0aW9uYWw8TGluZUpvaW4+IGxpbmVKb2luOworICAgIGRlY29kZXIg
Pj4gbGluZUpvaW47CisgICAgaWYgKCFsaW5lSm9pbikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIHJldHVybiBTZXRMaW5lSm9pbjo6Y3JlYXRlKCpsaW5lSm9pbik7Cit9CisK
IGNsYXNzIFNldE1pdGVyTGltaXQgOiBwdWJsaWMgSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxTZXRNaXRlckxpbWl0PiBjcmVhdGUoZmxvYXQgbGltaXQpCkBAIC01ODAsMjAgKzYzOCwz
OCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGltaXQo
bGltaXQpKTsKICAgICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRNaXRlckxp
bWl0KCk7CisKICAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxp
bWl0OyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxTZXRNaXRlckxpbWl0Pj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBTZXRN
aXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0
TWl0ZXJMaW1pdCkKLSAgICAgICAgLCBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkKLSAgICB7Ci0g
ICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIFNldE1pdGVyTGltaXQoZmxvYXQpOwogCiAgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1f
bWl0ZXJMaW1pdDsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFNldE1pdGVy
TGltaXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
bV9taXRlckxpbWl0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVm
PFNldE1pdGVyTGltaXQ+PiBTZXRNaXRlckxpbWl0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBPcHRpb25hbDxmbG9hdD4gbWl0ZXJMaW1pdDsKKyAgICBkZWNvZGVyID4+IG1pdGVy
TGltaXQ7CisgICAgaWYgKCFtaXRlckxpbWl0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgcmV0dXJuIFNldE1pdGVyTGltaXQ6OmNyZWF0ZSgqbWl0ZXJMaW1pdCk7Cit9CisK
IGNsYXNzIENsZWFyU2hhZG93IDogcHVibGljIEl0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBS
ZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCkBAIC02MDEsMTUgKzY3NywyOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyU2hhZG93KTsKICAgICB9CiAKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGVhclNoYWRvdygpOworCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xlYXJTaGFkb3c+PiBkZWNvZGUoRGVj
b2RlciYpOworCiBwcml2YXRlOgotICAgIENsZWFyU2hhZG93KCkKLSAgICAgICAgOiBJdGVtKEl0
ZW1UeXBlOjpDbGVhclNoYWRvdykKLSAgICB7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIENs
ZWFyU2hhZG93KCk7CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ2xlYXJTaGFkb3c6
OmVuY29kZShFbmNvZGVyJikgY29uc3QKK3sKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K09wdGlvbmFsPFJlZjxDbGVhclNoYWRvdz4+IENsZWFyU2hhZG93OjpkZWNvZGUoRGVjb2RlciYp
Cit7CisgICAgcmV0dXJuIENsZWFyU2hhZG93OjpjcmVhdGUoKTsKK30KKwogLy8gRklYTUU6IHRy
ZWF0IGFzIERyYXdpbmdJdGVtPwogY2xhc3MgQ2xpcCA6IHB1YmxpYyBJdGVtIHsKIHB1YmxpYzoK
QEAgLTYxOCwyMCArNzA3LDM4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQ2xpcChyZWN0KSk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q2xp
cCgpOworCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXA+PiBk
ZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIENsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXApCi0gICAgICAgICwgbV9yZWN0KHJl
Y3QpCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBDbGlwKGNvbnN0IEZsb2F0UmVj
dCYpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgor
dm9pZCBDbGlwOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IG1fcmVjdDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxD
bGlwPj4gQ2xpcDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiByZWN0OworICAgIGRlY29kZXIgPj4gcmVjdDsKKyAgICBpZiAoIXJlY3QpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gQ2xpcDo6Y3JlYXRlKCpyZWN0
KTsKK30KKwogY2xhc3MgQ2xpcE91dCA6IHB1YmxpYyBJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC02MzksMjAg
Kzc0NiwzOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXQo
cmVjdCkpOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsaXBPdXQoKTsK
KwogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwT3V0Pj4gZGVj
b2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0KQotICAgICAgICAsIG1fcmVj
dChyZWN0KQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQ2xpcE91dChjb25zdCBG
bG9hdFJlY3QmKTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgQ2xpcE91dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX3JlY3Q7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRp
b25hbDxSZWY8Q2xpcE91dD4+IENsaXBPdXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKKyAgICBkZWNvZGVyID4+IHJlY3Q7CisgICAg
aWYgKCFyZWN0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENs
aXBPdXQ6OmNyZWF0ZSgqcmVjdCk7Cit9CisKIGNsYXNzIENsaXBPdXRUb1BhdGggOiBwdWJsaWMg
SXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDbGlwT3V0VG9QYXRoPiBjcmVhdGUoY29u
c3QgUGF0aCYgcGF0aCkKQEAgLTY2MCwyMCArNzg1LDM4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dFRvUGF0aChwYXRoKSk7CiAgICAgfQogCisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+Q2xpcE91dFRvUGF0aCgpOworCiAgICAgY29uc3QgUGF0aCYg
cGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcE91dFRvUGF0aD4+IGRlY29kZShEZWNvZGVy
Jik7CisKIHByaXZhdGU6Ci0gICAgQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAg
ICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0gICAgICAgICwgbV9wYXRoKHBh
dGgpCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0VG9QYXRoKGNvbnN0
IFBhdGgmKTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBjb25zdCBQYXRoIG1fcGF0aDsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIENsaXBPdXRUb1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgbV9wYXRoOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgor
T3B0aW9uYWw8UmVmPENsaXBPdXRUb1BhdGg+PiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxQYXRoPiBwYXRoOworICAgIGRlY29kZXIgPj4g
cGF0aDsKKyAgICBpZiAoIXBhdGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICByZXR1cm4gQ2xpcE91dFRvUGF0aDo6Y3JlYXRlKCpwYXRoKTsKK30KKwogY2xhc3MgQ2xpcFBh
dGggOiBwdWJsaWMgSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDbGlwUGF0aD4gY3Jl
YXRlKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQpAQCAtNjgxLDE2ICs4MjQs
MTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwUGF0aChwYXRo
LCB3aW5kUnVsZSkpOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlwUGF0aCgpOwor
CiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIFdp
bmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aW5kUnVsZTsgfQogCisgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcFBhdGg+PiBkZWNv
ZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHdpbmRSdWxlKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQot
ICAgICAgICAsIG1fcGF0aChwYXRoKQotICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCi0g
ICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBDbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKIApAQCAtNjk4LDYgKzg0MSwyOCBAQCBwcml2YXRlOgogICAgIFdpbmRSdWxlIG1fd2luZFJ1
bGU7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBDbGlwUGF0aDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3BhdGggPDwgbV93
aW5kUnVsZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxDbGlw
UGF0aD4+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25h
bDxQYXRoPiBwYXRoOworICAgIGRlY29kZXIgPj4gcGF0aDsKKyAgICBpZiAoIXBhdGgpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxXaW5kUnVsZT4gd2luZFJ1
bGU7CisgICAgZGVjb2RlciA+PiB3aW5kUnVsZTsKKyAgICBpZiAoIXdpbmRSdWxlKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENsaXBQYXRoOjpjcmVhdGUoKnBh
dGgsICp3aW5kUnVsZSk7Cit9CisKIGNsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGJs
b2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCkBAIC05MjgsMjAgKzEwOTMsMzggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpKTsK
ICAgICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxh
eWVyKCk7CisKICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9
CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxCZWdp
blRyYW5zcGFyZW5jeUxheWVyPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi0gICAgICAgICwgbV9vcGFjaXR5
KG9wYWNpdHkpCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fb3BhY2l0eTsKIH07CiAKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9vcGFjaXR5OworfQor
Cit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI+PiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBPcHRpb25hbDxmbG9hdD4gb3BhY2l0eTsKKyAgICBkZWNvZGVyID4+IG9wYWNpdHk7
CisgICAgaWYgKCFvcGFjaXR5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
cmV0dXJuIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgqb3BhY2l0eSk7Cit9CisKIGNs
YXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUoKQpAQCAtOTQ5LDE1
ICsxMTMyLDI4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5kVHJh
bnNwYXJlbmN5TGF5ZXIpOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkVu
ZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxFbmRUcmFuc3BhcmVuY3lMYXllcj4+IGRlY29kZShEZWNvZGVyJik7
CisKIHByaXZhdGU6Ci0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgICAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcikKLSAgICB7Ci0gICAgfQorICAg
IFdFQkNPUkVfRVhQT1JUIEVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKICAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogfTsKIAordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNvZGVyJikgY29u
c3QKK3sKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxFbmRUcmFu
c3BhcmVuY3lMYXllcj4+IEVuZFRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2RlciYpCit7
CisgICAgcmV0dXJuIEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKTsKK30KKwogY2xhc3Mg
RHJhd1JlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
RHJhd1JlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKQEAgLTEwMTMsMTYgKzEyMDksMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3TGluZShwb2ludDEsIHBvaW50MikpOwogICAgIH0KIAorICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdMaW5lKCk7CisKICAgICBGbG9hdFBvaW50IHBvaW50MSgp
IGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQxOyB9CiAgICAgRmxvYXRQb2ludCBwb2ludDIoKSBjb25z
dCB7IHJldHVybiBtX3BvaW50MjsgfQogCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RHJhd0xpbmU+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRl
OgotICAgIERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZSkKLSAg
ICAgICAgLCBtX3BvaW50MShwb2ludDEpCi0gICAgICAgICwgbV9wb2ludDIocG9pbnQyKQotICAg
IHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKQEAgLTEwMzEsNiArMTIyNywyOCBA
QCBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9wb2ludDI7CiB9OwogCit0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgordm9pZCBEcmF3TGluZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBtX3BvaW50MSA8PCBtX3BvaW50MjsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxEcmF3TGluZT4+IERyYXdMaW5lOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDE7Cisg
ICAgZGVjb2RlciA+PiBwb2ludDE7CisgICAgaWYgKCFwb2ludDEpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDI7CisgICAgZGVj
b2RlciA+PiBwb2ludDI7CisgICAgaWYgKCFwb2ludDIpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4gRHJhd0xpbmU6OmNyZWF0ZSgqcG9pbnQxLCAqcG9pbnQyKTsK
K30KKwogY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQ
b2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcykKQEAgLTEwMzgsNiArMTI1Niw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hv
ciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcykpOwogICAgIH0KIAor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKTsKKwogICAgIHZv
aWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1f
YmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KICAgICBjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CiAgICAgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7
IH0KQEAgLTEwNDcsMTcgKzEyNjcsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcmludGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KICAgICBib29sIGRvdWJsZUxpbmVzKCkgY29u
c3QgeyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQogCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IGRlY29kZShEZWNvZGVy
Jik7CisKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0KQot
ICAgICAgICAsIG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQotICAgICAgICAsIG1fbG9j
YWxBbmNob3IobG9jYWxBbmNob3IpCi0gICAgICAgICwgbV93aWR0aHMod2lkdGhzKQotICAgICAg
ICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKLSAgICAgICAgLCBtX3ByaW50aW5nKHByaW50aW5n
KQotICAgICAgICAsIG1fZG91YmxlTGluZXMoZG91YmxlTGluZXMpCi0gICAgewotICAgIH0KKyAg
ICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMp
OwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKIApA
QCAtMTA3MSw2ICsxMjg1LDQ4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RvdWJsZUxpbmVzOwog
fTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRHJhd0xpbmVzRm9yVGV4dDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2Jsb2NrTG9j
YXRpb24gPDwgbV9sb2NhbEFuY2hvciA8PCBtX3dpZHRocyA8PCBtX3RoaWNrbmVzcyA8PCBtX3By
aW50aW5nIDw8IG1fZG91YmxlTGluZXM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitP
cHRpb25hbDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IERyYXdMaW5lc0ZvclRleHQ6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGJsb2NrTG9jYXRp
b247CisgICAgZGVjb2RlciA+PiBibG9ja0xvY2F0aW9uOworICAgIGlmICghYmxvY2tMb2NhdGlv
bikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPEZsb2F0U2l6
ZT4gbG9jYWxBbmNob3I7CisgICAgZGVjb2RlciA+PiBsb2NhbEFuY2hvcjsKKyAgICBpZiAoIWxv
Y2FsQW5jaG9yKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8
RGFzaEFycmF5PiB3aWR0aHM7CisgICAgZGVjb2RlciA+PiB3aWR0aHM7CisgICAgaWYgKCF3aWR0
aHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxmbG9hdD4g
dGhpY2tuZXNzOworICAgIGRlY29kZXIgPj4gdGhpY2tuZXNzOworICAgIGlmICghdGhpY2tuZXNz
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Ym9vbD4gcHJp
bnRpbmc7CisgICAgZGVjb2RlciA+PiBwcmludGluZzsKKyAgICBpZiAoIXByaW50aW5nKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Ym9vbD4gZG91YmxlTGlu
ZXM7CisgICAgZGVjb2RlciA+PiBkb3VibGVMaW5lczsKKyAgICBpZiAoIWRvdWJsZUxpbmVzKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIERyYXdMaW5lc0ZvclRl
eHQ6OmNyZWF0ZSgqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhpY2tuZXNzLCAqd2lk
dGhzLCAqcHJpbnRpbmcsICpkb3VibGVMaW5lcyk7Cit9CisKIGNsYXNzIERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBS
ZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCkBAIC0xMDc4LDE1ICsxMzM0LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihyZWN0LCBzdHlsZSkpOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKTsKKwogICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPj4gZGVjb2RlKERl
Y29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpCi0gICAg
ICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICB7Ci0gICAg
fQorICAgIFdFQkNPUkVfRVhQT1JUIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOwogCiAgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTA5Niw2ICsxMzUyLDI4IEBAIHBy
aXZhdGU6CiAgICAgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgbV9zdHlsZTsKIH07CiAKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9yZWN0IDw8IG1f
c3R5bGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWY8RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcj4+IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKKyAgICBk
ZWNvZGVyID4+IHJlY3Q7CisgICAgaWYgKCFyZWN0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgT3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHN0eWxlOworICAg
IGRlY29kZXIgPj4gc3R5bGU7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIHJldHVybiBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUo
KnJlY3QsICpzdHlsZSk7Cit9CisKIGNsYXNzIERyYXdFbGxpcHNlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERyYXdFbGxpcHNlPiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQpAQCAtMTEwMywxNCArMTM4MSwxNSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKKyAgICBX
RUJDT1JFX0VYUE9SVCB+RHJhd0VsbGlwc2UoKTsKKwogICAgIEZsb2F0UmVjdCByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxEcmF3RWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZh
dGU6Ci0gICAgRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkK
LSAgICB7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTExOCw2ICsxMzk3
LDIzIEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIERyYXdFbGxpcHNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fcmVjdDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KK09wdGlvbmFsPFJlZjxEcmF3RWxsaXBzZT4+IERyYXdFbGxpcHNlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CisgICAgZGVj
b2RlciA+PiByZWN0OworICAgIGlmICghcmVjdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIHJldHVybiBEcmF3RWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsKK30KKwogY2xhc3Mg
RHJhd1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
RHJhd1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTE2NiwyMCArMTQ2MiwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdQYXRo
KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+RHJhd0ZvY3VzUmluZ1BhdGgoKTsKKwogICAgIGNvbnN0IFBhdGgmIHBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2lkdGg7IH0KICAgICBmbG9hdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
IAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdG
b2N1c1JpbmdQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBEcmF3Rm9j
dXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdG
b2N1c1JpbmdQYXRoKQotICAgICAgICAsIG1fcGF0aChwYXRoKQotICAgICAgICAsIG1fd2lkdGgo
d2lkdGgpCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAsIG1fY29sb3IoY29s
b3IpCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUGF0aChj
b25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKIAog
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTEx
OTEsNiArMTQ4NSwzOCBAQCBwcml2YXRlOgogICAgIENvbG9yIG1fY29sb3I7CiB9OwogCit0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3BhdGggPDwgbV93aWR0aCA8
PCBtX29mZnNldCA8PCBtX2NvbG9yOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0
aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CisgICAgZGVjb2Rl
ciA+PiBwYXRoOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIE9wdGlvbmFsPGZsb2F0PiB3aWR0aDsKKyAgICBkZWNvZGVyID4+IHdpZHRoOworICAg
IGlmICghd2lkdGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25h
bDxmbG9hdD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Q29sb3I+IGNv
bG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRl
KCpwYXRoLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvcik7Cit9CisKIGNsYXNzIERyYXdGb2N1c1Jp
bmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxE
cmF3Rm9jdXNSaW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTExOTgs
MjAgKzE1MjQsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CiAgICAgfQogCisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0ZvY3VzUmluZ1JlY3RzKCk7CisKICAgICBj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiByZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdHM7IH0K
ICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICBmbG9hdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IGRlY29kZShEZWNv
ZGVyJik7CisKIHByaXZhdGU6Ci0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVj
dHMpCi0gICAgICAgICwgbV9yZWN0cyhyZWN0cykKLSAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQot
ICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAg
IHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
KTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAK
QEAgLTEyMjMsNiArMTU0NywzOCBAQCBwcml2YXRlOgogICAgIENvbG9yIG1fY29sb3I7CiB9Owog
Cit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEcmF3Rm9jdXNSaW5nUmVjdHM6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9yZWN0cyA8PCBt
X3dpZHRoIDw8IG1fb2Zmc2V0IDw8IG1fY29sb3I7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitPcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPj4gRHJhd0ZvY3VzUmluZ1JlY3Rz
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxWZWN0b3I8RmxvYXRS
ZWN0Pj4gcmVjdHM7CisgICAgZGVjb2RlciA+PiByZWN0czsKKyAgICBpZiAoIXJlY3RzKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8ZmxvYXQ+IHdpZHRoOwor
ICAgIGRlY29kZXIgPj4gd2lkdGg7CisgICAgaWYgKCF3aWR0aCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisgICAgZGVjb2RlciA+
PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICBPcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsKKyAg
ICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJu
IERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKCpyZWN0cywgKndpZHRoLCAqb2Zmc2V0LCAqY29s
b3IpOworfQorCiBjbGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxGaWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
QEAgLTE0NjMsMTggKzE4MTksMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9y
KSk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoKTsKKwogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBkZWNv
ZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgICAg
ICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAgICAgLCBtX2NvbG9y
KGNvbG9yKQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IENvbG9yJik7CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CkBAIC0xNDg0LDYgKzE4
MzksMzUgQEAgcHJpdmF0ZToKICAgICBDb2xvciBtX2NvbG9yOwogfTsKIAordGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KK3ZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9yZWN0OworICAgIGVuY29kZXIg
PDwgbV9yb3VuZGVkSG9sZVJlY3Q7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yOworfQorCit0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
Pj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKKyAgICBkZWNvZGVyID4+IHJlY3Q7CisgICAg
aWYgKCFyZWN0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8
RmxvYXRSb3VuZGVkUmVjdD4gcm91bmRlZEhvbGVSZWN0OworICAgIGRlY29kZXIgPj4gcm91bmRl
ZEhvbGVSZWN0OworICAgIGlmICghcm91bmRlZEhvbGVSZWN0KQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Q29sb3I+IGNvbG9yOworICAgIGRlY29kZXIgPj4g
Y29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKCpyZWN0LCAqcm91bmRl
ZEhvbGVSZWN0LCAqY29sb3IpOworfQorCiBjbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3JlYXRlKGNvbnN0IFBh
dGgmIHBhdGgpCkBAIC0xNTMxLDE0ICsxOTE1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRmlsbEVsbGlwc2UocmVjdCkpOwogICAgIH0KIAorICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCk7CisKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RmlsbEVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2
YXRlOgotICAgIEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAgICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbEVsbGlwc2UpCi0gICAgICAgICwgbV9yZWN0KHJlY3Qp
Ci0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CiAKQEAgLTE1NDcsNiArMTkzMiwyMyBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWxsRWxsaXBzZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3JlY3Q7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWY8RmlsbEVsbGlwc2U+PiBG
aWxsRWxsaXBzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiByZWN0OworICAgIGRlY29kZXIgPj4gcmVjdDsKKyAgICBpZiAoIXJlY3QpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRmlsbEVsbGlwc2U6OmNyZWF0
ZSgqcmVjdCk7Cit9CisKIGNsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8U3Ryb2tlUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQpAQCAtMTU1NCwxNiArMTk1NiwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRo
KSk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlUmVjdCgpOwor
CiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBmbG9h
dCBsaW5lV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVXaWR0aDsgfQogCisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlUmVjdD4+IGRlY29k
ZShEZWNvZGVyJik7CisKIHByaXZhdGU6Ci0gICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
U3Ryb2tlUmVjdCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2xpbmVXaWR0
aChsaW5lV2lkdGgpCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKQEAgLTE1NzIsNiArMTk3
NCwyOCBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbGluZVdpZHRoOwogfTsKIAordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU3Ryb2tlUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3JlY3QgPDwgbV9saW5lV2lkdGg7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWY8U3Ryb2tlUmVjdD4+IFN0cm9rZVJl
Y3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKKyAgICBkZWNvZGVyID4+IHJlY3Q7CisgICAgaWYgKCFyZWN0KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8ZmxvYXQ+IGxpbmVXaWR0aDsKKyAgICBk
ZWNvZGVyID4+IGxpbmVXaWR0aDsKKyAgICBpZiAoIWxpbmVXaWR0aCkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBTdHJva2VSZWN0OjpjcmVhdGUoKnJlY3QsICps
aW5lV2lkdGgpOworfQorCiBjbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBw
YXRoKQpAQCAtMTU3OSwyMiArMjAwMywzOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflN0cm9rZVBhdGgoKTsKKwogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7
IHJldHVybiBtX3BhdGg7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgot
ICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICB7Ci0gICAg
fQorICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOwogCiAgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKICAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgY29uc3QgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9j
YXRpb247CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTdHJva2VQYXRoOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fcGF0aDsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTdHJva2VQYXRoPj4g
U3Ryb2tlUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8UGF0
aD4gcGF0aDsKKyAgICBkZWNvZGVyID4+IHBhdGg7CisgICAgaWYgKCFwYXRoKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIFN0cm9rZVBhdGg6OmNyZWF0ZSgqcGF0
aCk7Cit9CisKIGNsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKQEAgLTE2MDIsMTQgKzIwNDMsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTdHJva2VFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKKyAgICBXRUJDT1JF
X0VYUE9SVCB+U3Ryb2tlRWxsaXBzZSgpOworCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRl
OgotICAgIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgICAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlKQotICAgICAgICAsIG1fcmVjdChyZWN0
KQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKQEAgLTE2MTcsNiArMjA1OSwyMyBAQCBwcml2YXRl
OgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgor
dm9pZCBTdHJva2VFbGxpcHNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IG1fcmVjdDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlv
bmFsPFJlZjxTdHJva2VFbGxpcHNlPj4gU3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OworICAgIGRlY29kZXIgPj4g
cmVjdDsKKyAgICBpZiAoIXJlY3QpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICByZXR1cm4gU3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsKK30KKwogY2xhc3MgQ2xlYXJS
ZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENsZWFy
UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTE2NjUsMTUgKzIxMjQsMjgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRl
cm4pOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5U3Ryb2tlUGF0
dGVybigpOworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8QXBwbHlTdHJva2VQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAg
ICBBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ry
b2tlUGF0dGVybikKLSAgICB7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIEFwcGx5U3Ryb2tl
UGF0dGVybigpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEFwcGx5U3Ryb2tlUGF0
dGVybjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAoreworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorT3B0aW9uYWw8UmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4+IEFwcGx5U3Ryb2tlUGF0dGVy
bjo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiBBcHBseVN0cm9rZVBhdHRlcm46OmNy
ZWF0ZSgpOworfQorCiBjbGFzcyBBcHBseUZpbGxQYXR0ZXJuIDogcHVibGljIEl0ZW0gewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8QXBwbHlGaWxsUGF0dGVybj4gY3JlYXRlKCkKQEAgLTE2ODEs
MTQgKzIxNTMsMjcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBs
eUZpbGxQYXR0ZXJuKTsKICAgICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBs
eUZpbGxQYXR0ZXJuKCk7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxBcHBseUZpbGxQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0
ZToKLSAgICBBcHBseUZpbGxQYXR0ZXJuKCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuKQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlGaWxs
UGF0dGVybigpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKIH07CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEFwcGx5RmlsbFBhdHRl
cm46OmVuY29kZShFbmNvZGVyJikgY29uc3QKK3sKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK09wdGlvbmFsPFJlZjxBcHBseUZpbGxQYXR0ZXJuPj4gQXBwbHlGaWxsUGF0dGVybjo6ZGVj
b2RlKERlY29kZXImKQoreworICAgIHJldHVybiBBcHBseUZpbGxQYXR0ZXJuOjpjcmVhdGUoKTsK
K30KICNlbmRpZgogCiBjbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0ZW0g
ewpAQCAtMTY5OCwyMCArMjE4MywzOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKICAgICB9CiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseURldmljZVNjYWxlRmFjdG9yKCk7CisKICAg
ICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVGYWN0b3I7IH0KIAor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgICAgIDogSXRlbShJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgLCBtX3NjYWxlRmFjdG9yKHNj
YWxlRmFjdG9yKQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3Rvcik7CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKIH07
CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9zY2Fs
ZUZhY3RvcjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxBcHBs
eURldmljZVNjYWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8ZmxvYXQ+IHNjYWxlRmFjdG9yOworICAgIGRl
Y29kZXIgPj4gc2NhbGVGYWN0b3I7CisgICAgaWYgKCFzY2FsZUZhY3RvcikKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBBcHBseURldmljZVNjYWxlRmFjdG9yOjpj
cmVhdGUoKnNjYWxlRmFjdG9yKTsKK30KKworCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpAQCAtMTc0MiwzMSArMjI0NiwzMSBAQCB2b2lkIEl0ZW06OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldFN0YXRlPigqdGhpcyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAg
IFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29k
ZSBTZXRMaW5lQ2FwIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4o
KnRoaXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoK
LSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5
ZXQgZW5jb2RlIFNldExpbmVEYXNoIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0
TGluZURhc2g+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUpvaW46Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29k
ZSBjYW5ub3QgeWV0IGVuY29kZSBTZXRMaW5lSm9pbiIpOworICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PFNldExpbmVKb2luPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6
Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBTZXRNaXRlckxpbWl0Iik7CisgICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oKnRoaXMpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgV1RGTG9nQWx3YXlz
KCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIENsZWFyU2hhZG93
Iik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KCp0aGlzKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgV1RGTG9nQWx3
YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIENsaXAiKTsK
KyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwPigqdGhpcyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlz
cGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBDbGlwT3V0Iik7CisgICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcE91dD4oKnRoaXMpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICBXVEZMb2dBbHdheXMo
IkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUgQ2xpcE91dFRvUGF0
aCIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBPdXRUb1BhdGg+KCp0aGlzKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIFdU
RkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBD
bGlwUGF0aCIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBQYXRoPigqdGhpcyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CiAgICAgICAg
IFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29k
ZSBEcmF3R2x5cGhzIik7CkBAIC0xNzkyLDI1ICsyMjk2LDI1IEBAIHZvaWQgSXRlbTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJh
d1JlY3Q+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xp
bmU6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5u
b3QgeWV0IGVuY29kZSBEcmF3TGluZSIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERy
YXdMaW5lPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdM
aW5lc0ZvclRleHQ6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVu
Y29kZSBjYW5ub3QgeWV0IGVuY29kZSBEcmF3TGluZXNGb3JUZXh0Iik7CisgICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oKnRoaXMpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICBX
VEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUg
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxh
eUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBEcmF3RWxsaXBzZSIpOworICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPigqdGhpcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PERyYXdQYXRoPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0
OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUgRHJhd0ZvY3VzUmluZ1BhdGgiKTsKKyAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4oKnRoaXMpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAg
ICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVu
Y29kZSBEcmF3Rm9jdXNSaW5nUmVjdHMiKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxE
cmF3Rm9jdXNSaW5nUmVjdHM+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3Q6CiAgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KCp0
aGlzKTsKQEAgLTE4MjgsNDIgKzIzMzIsNDIgQEAgdm9pZCBJdGVtOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKICAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJl
Y3Q+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06
OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSIpOworICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigqdGhpcyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PEZpbGxQYXRoPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3Bs
YXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUgRmlsbEVsbGlwc2UiKTsKKyAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oKnRoaXMpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgotICAgICAgICBXVEZMb2dBbHdh
eXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUgU3Ryb2tlUmVj
dCIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KCp0aGlzKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIFN0
cm9rZVBhdGgiKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VQYXRoPigqdGhp
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0
IGVuY29kZSBTdHJva2VFbGxpcHNlIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ry
b2tlRWxsaXBzZT4oKnRoaXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6CiAgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xlYXJSZWN0PigqdGhpcyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5u
b3QgeWV0IGVuY29kZSBCZWdpblRyYW5zcGFyZW5jeUxheWVyIik7CisgICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKnRoaXMpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIEVu
ZFRyYW5zcGFyZW5jeUxheWVyIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RW5kVHJh
bnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAjaWYgVVNFKENHKQogICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgV1RGTG9nQWx3YXlz
KCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIEFwcGx5U3Ryb2tl
UGF0dGVybiIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVy
bj4oKnRoaXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQ
YXR0ZXJuOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUg
Y2Fubm90IHlldCBlbmNvZGUgQXBwbHlGaWxsUGF0dGVybiIpOworICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PEFwcGx5RmlsbFBhdHRlcm4+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAjZW5k
aWYKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICBX
VEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUg
QXBwbHlEZXZpY2VTY2FsZUZhY3RvciIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpA
QCAtMTkwNiwzMSArMjQxMCw0MCBAQCBPcHRpb25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06
OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBTZXRMaW5lQ2FwIik7CisgICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBTZXRMaW5lQ2FwOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIFdURkxvZ0Fsd2F5
cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBTZXRMaW5lRGFz
aCIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZURhc2g6OmRlY29kZShkZWNvZGVy
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9p
bjoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5v
dCB5ZXQgZGVjb2RlIFNldExpbmVKb2luIik7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRM
aW5lSm9pbjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxh
eUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBTZXRNaXRlckxpbWl0Iik7Cisg
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRNaXRlckxpbWl0OjpkZWNvZGUoZGVjb2RlcikpCisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0
IGRlY29kZSBDbGVhclNoYWRvdyIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xlYXJTaGFk
b3c6OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpk
ZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgQ2xpcCIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0g
Q2xpcDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0
ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBDbGlwT3V0Iik7CisgICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBDbGlwT3V0OjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgV1RGTG9nQWx3YXlz
KCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIENsaXBPdXRUb1Bh
dGgiKTsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBPdXRUb1BhdGg6OmRlY29kZShkZWNv
ZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0
aDoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5v
dCB5ZXQgZGVjb2RlIENsaXBQYXRoIik7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwUGF0
aDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdHbHlwaHM6CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0
ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBEcmF3R2x5cGhzIik7CkBAIC0xOTU4LDI2ICsy
NDcxLDMyIEBAIE9wdGlvbmFsPFJlZjxJdGVtPj4gSXRlbTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3Qg
eWV0IGRlY29kZSBEcmF3TGluZSIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmU6
OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0
OjpJdGVtOjpkZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgRHJhd0xpbmVzRm9yVGV4dCIpOworICAg
ICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKGRlY29kZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRl
Y29kZSBjYW5ub3QgeWV0IGRlY29kZSBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyIik7CisgICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUoZGVj
b2RlcikpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Vs
bGlwc2U6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBj
YW5ub3QgeWV0IGRlY29kZSBEcmF3RWxsaXBzZSIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0g
RHJhd0VsbGlwc2U6OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQ
YXRoOjpkZWNvZGUoZGVjb2RlcikpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxh
eUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBEcmF3Rm9jdXNSaW5nUGF0aCIp
OworICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShkZWNv
ZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9j
dXNSaW5nUmVjdHM6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRl
Y29kZSBjYW5ub3QgeWV0IGRlY29kZSBEcmF3Rm9jdXNSaW5nUmVjdHMiKTsKKyAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgogICAgICAgICBp
ZiAoYXV0byBpdGVtID0gRmlsbFJlY3Q6OmRlY29kZShkZWNvZGVyKSkKQEAgLTE5OTksNDQgKzI1
MTgsNTQgQEAgT3B0aW9uYWw8UmVmPEl0ZW0+PiBJdGVtOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZToKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6
ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIik7CisgICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKGRlY29k
ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRo
OgogICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFBhdGg6OmRlY29kZShkZWNvZGVyKSkKICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5ZXQg
ZGVjb2RlIEZpbGxFbGxpcHNlIik7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsRWxsaXBz
ZTo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0
ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBTdHJva2VSZWN0Iik7CisgICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBTdHJva2VSZWN0OjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgV1RGTG9nQWx3
YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIFN0cm9rZVBh
dGgiKTsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZVBhdGg6OmRlY29kZShkZWNvZGVy
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxp
cHNlOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUgY2Fu
bm90IHlldCBkZWNvZGUgU3Ryb2tlRWxsaXBzZSIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0g
U3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKICAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENs
ZWFyUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIFdURkxvZ0Fsd2F5
cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBCZWdpblRyYW5z
cGFyZW5jeUxheWVyIik7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBCZWdpblRyYW5zcGFyZW5j
eUxheWVyOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygi
RGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBFbmRUcmFuc3BhcmVu
Y3lMYXllciIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6
OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICNpZiBVU0UoQ0cpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgICAgICBXVEZMb2dBbHdh
eXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgQXBwbHlTdHJv
a2VQYXR0ZXJuIik7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseVN0cm9rZVBhdHRlcm46
OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0
OjpJdGVtOjpkZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgQXBwbHlGaWxsUGF0dGVybiIpOworICAg
ICAgICBpZiAoYXV0byBpdGVtID0gQXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRl
bTo6ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IiKTsKKyAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShkZWNv
ZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385133</attachid>
            <date>2019-12-08 22:02:27 -0800</date>
            <delta_ts>2019-12-09 00:17:45 -0800</delta_ts>
            <desc>v2 (w/ more drawing items supported)</desc>
            <filename>bug-205001-20191208220227.patch</filename>
            <type>text/plain</type>
            <size>80282</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODllYzkxYWVhYjg5YjE0
Nzg3ZWY2OWQ5ZDg3Zjg5MmNmYWFjOTgyMC4uYjk1YmE3YjVhYTBlY2NkZjYzMWZkOGQ5NjNkYzMy
ZjA1NTQxMDJhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAxOS0xMi0wOCAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZW5jb2Rp
bmcgYW5kIGRlY29kaW5nIHN1cHBvcnQgZm9yIG1vcmUgRGlzcGxheUxpc3RJdGVtcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MDAxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBib2lsZXJwbGF0
ZSBjb2RlIHRvIGVuY29kZSBhbmQgZGVjb2RlIHRoZSBmb2xsb3dpbmcgZGlzcGxheSBsaXN0IGl0
ZW1zOiBTZXRMaW5lQ2FwLCBTZXRMaW5lRGFzaCwKKyAgICAgICAgU2V0TGluZUpvaW4sIFNldE1p
dGVyTGltaXQsIENsZWFyU2hhZG93LCBDbGlwLCBDbGlwT3V0LCBDbGlwT3V0VG9QYXRoLCBDbGlw
UGF0aCwgQmVnaW5UcmFuc3BhcmVuY3lMYXllciwKKyAgICAgICAgRW5kVHJhbnNwYXJlbmN5TGF5
ZXIsIERyYXdMaW5lLCBEcmF3TGluZXNGb3JUZXh0LCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
LCBEcmF3RWxsaXBzZSwgRHJhd0ZvY3VzUmluZ1BhdGgsCisgICAgICAgIERyYXdGb2N1c1JpbmdS
ZWN0cywgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsIEZpbGxFbGxpcHNlLCBTdHJva2VSZWN0LCBT
dHJva2VQYXRoLCBTdHJva2VFbGxpcHNlLAorICAgICAgICBBcHBseVN0cm9rZVBhdHRlcm4sIEFw
cGx5RmlsbFBhdHRlcm4sIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsIERyYXdUaWxlZEltYWdlLCBE
cmF3VGlsZWRTY2FsZWRJbWFnZSwgYW5kCisgICAgICAgIERyYXdQYXR0ZXJuLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9X
aW5kUnVsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcDoKKworICAgICAgICBBZGRpdGlvbmFsbHkgbWFrZSBhIGZldyBvdGhl
ciBXZWJDb3JlIGNsYXNzZXMgYW5kIGVudW1zIGVuY29kYWJsZSBhbmQgZGVjb2RhYmxlLgorCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4p
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVy
TGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpDbGVh
clNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6RHJhd0xpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OkRyYXdGb2N1c1JpbmdS
ZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsRWxsaXBzZTo6RmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVJlY3Q6OlN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOgorCisgICAgICAgIEFsc28g
cmVtb3ZlIG1fYmxvY2tMb2NhdGlvbiBmcm9tIFN0cm9rZVBhdGggKHRoaXMgbWVtYmVyIHZhcmlh
YmxlIHdhcyB1bnVzZWQsIGFuZCBzZWVtcyB0byBoYXZlIGJlZW4gY29waWVkIG92ZXIKKyAgICAg
ICAgZnJvbSBvdGhlciBkcmF3aW5nIGl0ZW1zKS4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpFbmRU
cmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlT
dHJva2VQYXR0ZXJuOjpBcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZUNhcDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lQ2FwOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVE
YXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExp
bmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVK
b2luOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExp
bmVKb2luOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVy
TGltaXQ6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TWl0ZXJMaW1pdDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVh
clNoYWRvdzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGVhclNoYWRvdzo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
UGF0dGVybjo6RHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXR0ZXJuOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdQYXR0ZXJuOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbEVsbGlwc2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUmVjdDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VSZWN0OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VFbGxpcHNlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNj
YWxlRmFjdG9yOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRMaW5l
Q2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFz
aDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OkNsZWFyU2hhZG93KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpDbGlwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpDbGlwT3V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpDbGlw
T3V0VG9QYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
UGF0aDo6Q2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpF
bmRUcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpEcmF3Rm9jdXNSaW5n
UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3Vz
UmluZ1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVs
bGlwc2U6OkZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46
OkFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6QXBwbHlGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisKIDIwMTktMTItMDggIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBXZWJDb3JlOjpQYXRoIGVu
Y29kZXJzIGFuZCBkZWNvZGVycyBpbnRvIFdlYkNvcmUgZnJvbSBXZWJDb3JlQXJndW1lbnRDb2Rl
cnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgKaW5kZXggYjE1ZmZmY2E3YzAzZTljOTY5NmFmYjAzYmE0YmJhNmU2NGFkMjMwOC4uMmYz
YTA2ZDNjYWUzZDkwYWU3NmU3MjE4Zjc3YmI3YWQwY2M5YjQ5NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEyNCw4ICsx
MjQsMzQgQEAgc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKICAgICAgICAgRGljdGF0
aW9uQWx0ZXJuYXRpdmVzCiAgICAgfSBtb2RlOwogICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVh
cmFuY2UgeyBmYWxzZSB9OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKIH07CiAK
K3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1vZGU7Cisg
ICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK09wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8
TW9kZT4gbW9kZTsKKyAgICBkZWNvZGVyID4+IG1vZGU7CisgICAgaWYgKCFtb2RlKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFy
a0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKKyAg
ICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgcmV0dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfX07
Cit9CisKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiBjbGFzcyBSZWNvcmRlcjsKIH0KQEAgLTcy
MywzICs3NDksMTggQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlLAorICAg
IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0
YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKKyAgICBXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IDU5ODNkMjY5OWVkMzY5YjAxZjc1YTA1ZmRm
NTQ0NTRkNWM4N2ZlMzkuLmNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDkyMDFiNzZmMTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmgKQEAgLTE5Myw2ICsxOTMsMjQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpCbGVuZE1vZGU+IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpMaW5lQ2FwPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwK
KyAgICBXZWJDb3JlOjpMaW5lQ2FwLAorICAgIFdlYkNvcmU6OkxpbmVDYXA6OkJ1dHRDYXAsCisg
ICAgV2ViQ29yZTo6TGluZUNhcDo6Um91bmRDYXAsCisgICAgV2ViQ29yZTo6TGluZUNhcDo6U3F1
YXJlQ2FwCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6TGluZUpvaW4+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNv
cmU6OkxpbmVKb2luLAorICAgIFdlYkNvcmU6OkxpbmVKb2luOjpNaXRlckpvaW4sCisgICAgV2Vi
Q29yZTo6TGluZUpvaW46OlJvdW5kSm9pbiwKKyAgICBXZWJDb3JlOjpMaW5lSm9pbjo6QmV2ZWxK
b2luCisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
SW50ZXJwb2xhdGlvblF1YWxpdHk+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAog
ICAgIFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2luZFJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dpbmRSdWxlLmgKaW5kZXggNTY0ZTIwMzdjZmNhN2Y5Mjg0NzkzOTliNmZi
Mzg4NjQ4MTQ2M2QwZS4uN2IwYmQwOWJiMTljNzg3MDA1ZWQwNzg1MDc0OGUzNTE0ODQ4ZTY0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2luZFJ1bGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaW5kUnVsZS5oCkBAIC0yNyw2
ICsyNyw4IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4K
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIGNsYXNzIFdpbmRSdWxlIDogdWludDhfdCB7
CkBAIC0zNCw0ICszNiwxNiBAQCBlbnVtIGNsYXNzIFdpbmRSdWxlIDogdWludDhfdCB7CiAgICAg
RXZlbk9kZCA9IDEKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6V2luZFJ1bGU+
IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OldpbmRSdWxl
LAorICAgIFdlYkNvcmU6OldpbmRSdWxlOjpOb25aZXJvLAorICAgIFdlYkNvcmU6OldpbmRSdWxl
OjpFdmVuT2RkCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IDc2NDc3OTMzOTBhMzg5ZTQzODUxZWRkNWY4ZTYx
Y2QwMzJhM2U4MzguLmZhZDc0Nzc5NjU4ZGE4MjNhNzBhOGZkZWU4Nzc3MDUyZmMzYTNjMzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTMyMiw2ICszMjIsMTQgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0
YXRlJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKK1NldExpbmVDYXA6OlNldExpbmVDYXAo
TGluZUNhcCBsaW5lQ2FwKQorICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkKKyAgICAs
IG1fbGluZUNhcChsaW5lQ2FwKQoreworfQorCitTZXRMaW5lQ2FwOjp+U2V0TGluZUNhcCgpID0g
ZGVmYXVsdDsKKwogdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7CkBAIC0zMzMs
NiArMzQxLDE1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5lQ2FwKQogICAgIHJldHVybiB0czsKIH0KIAorU2V0TGlu
ZURhc2g6OlNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNo
T2Zmc2V0KQorICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZURhc2gpCisgICAgLCBtX2Rhc2hB
cnJheShkYXNoQXJyYXkpCisgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKK3sKK30KKwor
U2V0TGluZURhc2g6On5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKKwogdm9pZCBTZXRMaW5lRGFz
aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
c2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7CkBAIC0zNDUsNiArMzYyLDE0
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
ZXRMaW5lRGFzaCYgbGluZURhc2gpCiAgICAgcmV0dXJuIHRzOwogfQogCitTZXRMaW5lSm9pbjo6
U2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCisgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbikKKyAgICAsIG1fbGluZUpvaW4obGluZUpvaW4pCit7Cit9CisKK1NldExpbmVKb2lu
Ojp+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7CisKIHZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExpbmVKb2lu
KG1fbGluZUpvaW4pOwpAQCAtMzU2LDYgKzM4MSwxNCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpvaW4mIGxpbmVKb2luKQogICAg
IHJldHVybiB0czsKIH0KIAorU2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRl
ckxpbWl0KQorICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCkKKyAgICAsIG1fbWl0
ZXJMaW1pdChtaXRlckxpbWl0KQoreworfQorCitTZXRNaXRlckxpbWl0Ojp+U2V0TWl0ZXJMaW1p
dCgpID0gZGVmYXVsdDsKKwogdm9pZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJM
aW1pdCk7CkBAIC0zNjcsMTEgKzQwMCwyNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKICAgICBy
ZXR1cm4gdHM7CiB9CiAKK0NsZWFyU2hhZG93OjpDbGVhclNoYWRvdygpCisgICAgOiBJdGVtKEl0
ZW1UeXBlOjpDbGVhclNoYWRvdykKK3sKK30KKworQ2xlYXJTaGFkb3c6On5DbGVhclNoYWRvdygp
ID0gZGVmYXVsdDsKKwogdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKIH0KIAorQ2xpcDo6
Q2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQor
ICAgICwgbV9yZWN0KHJlY3QpCit7Cit9CisKK0NsaXA6On5DbGlwKCkgPSBkZWZhdWx0OworCiB2
b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTM4Myw2ICs0MzEsMTQgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXAmIGl0ZW0pCiAgICAgcmV0
dXJuIHRzOwogfQogCitDbGlwT3V0OjpDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAg
ICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCisgICAgLCBtX3JlY3QocmVjdCkKK3sKK30KKwor
Q2xpcE91dDo6fkNsaXBPdXQoKSA9IGRlZmF1bHQ7CisKIHZvaWQgQ2xpcE91dDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcE91dChtX3Jl
Y3QpOwpAQCAtMzk0LDYgKzQ1MCwxNCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAK
K0NsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICA6IEl0
ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCisgICAgLCBtX3BhdGgocGF0aCkKK3sKK30KKwor
Q2xpcE91dFRvUGF0aDo6fkNsaXBPdXRUb1BhdGgoKSA9IGRlZmF1bHQ7CisKIHZvaWQgQ2xpcE91
dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuY2xpcE91dChtX3BhdGgpOwpAQCAtNDA1LDYgKzQ2OSwxNSBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dFRvUGF0aCYgaXRl
bSkKICAgICByZXR1cm4gdHM7CiB9CiAKK0NsaXBQYXRoOjpDbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQor
ICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQoreworfQorCitD
bGlwUGF0aDo6fkNsaXBQYXRoKCkgPSBkZWZhdWx0OworCiB2b2lkIENsaXBQYXRoOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwUGF0aCht
X3BhdGgsIG1fd2luZFJ1bGUpOwpAQCAtNTE5LDYgKzU5Miw4IEBAIERyYXdUaWxlZEltYWdlOjpE
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0CiB7CiB9CiAKK0RyYXdUaWxlZEltYWdlOjp+RHJhd1RpbGVkSW1hZ2UoKSA9IGRlZmF1
bHQ7CisKIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCksIG1f
ZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTaXplLCBtX3NwYWNpbmcsIG1faW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwpAQCAtNTQ3LDYgKzYyMiw4IEBAIERyYXdUaWxlZFNjYWxlZEltYWdlOjpE
cmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
CiB7CiB9CiAKK0RyYXdUaWxlZFNjYWxlZEltYWdlOjp+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKSA9
IGRlZmF1bHQ7CisKIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1h
Z2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTY2FsZUZhY3RvciwgbV9o
UnVsZSwgbV92UnVsZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC02MDksNiArNjg2LDgg
QEAgRHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWMKIHsKIH0KIAorRHJhd1BhdHRlcm46On5EcmF3UGF0
dGVybigpID0gZGVmYXVsdDsKKwogdm9pZCBEcmF3UGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd1BhdHRlcm4obV9pbWFnZS5n
ZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV90aWxlUmVjdCwgbV9wYXR0ZXJuVHJhbnNmb3JtLCBtX3Bo
YXNlLCBtX3NwYWNpbmcsIG1fb3B0aW9ucyk7CkBAIC02NDgsNiArNzI3LDE1IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UmVjdCYgaXRl
bSkKICAgICByZXR1cm4gdHM7CiB9CiAKK0RyYXdMaW5lOjpEcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKKyAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3TGluZSkKKyAgICAsIG1fcG9pbnQxKHBvaW50MSkKKyAgICAsIG1fcG9p
bnQyKHBvaW50MikKK3sKK30KKworRHJhd0xpbmU6On5EcmF3TGluZSgpID0gZGVmYXVsdDsKKwog
T3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRzOwpAQCAtNjY4LDYgKzc1Niwx
OSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd0xpbmUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCitEcmF3TGluZXNGb3JUZXh0OjpE
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZs
b2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCisgICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dCkKKyAgICAsIG1fYmxvY2tMb2NhdGlvbihibG9j
a0xvY2F0aW9uKQorICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKKyAgICAsIG1fd2lk
dGhzKHdpZHRocykKKyAgICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKKyAgICAsIG1fcHJpbnRp
bmcocHJpbnRpbmcpCisgICAgLCBtX2RvdWJsZUxpbmVzKGRvdWJsZUxpbmVzKQoreworfQorCitE
cmF3TGluZXNGb3JUZXh0Ojp+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKKwogdm9pZCBE
cmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBvaW50KCksIG1fdGhpY2tuZXNzLCBtX3dp
ZHRocywgbV9wcmludGluZywgbV9kb3VibGVMaW5lcyk7CkBAIC02OTksNiArODAwLDE1IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGlu
ZXNGb3JUZXh0JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAorRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpCisgICAgLCBtX3JlY3QocmVjdCkKKyAgICAs
IG1fc3R5bGUoc3R5bGUpCit7Cit9CisKK0RyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6On5EcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OworCiB2b2lkIERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIobV9yZWN0LCBtX3N0eWxlKTsKQEAg
LTcxNiw2ICs4MjYsMTQgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXImIGkKICAgICByZXR1cm4gdHM7
CiB9CiAKK0RyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisg
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0VsbGlwc2UpCisgICAgLCBtX3JlY3QocmVj
dCkKK3sKK30KKworRHJhd0VsbGlwc2U6On5EcmF3RWxsaXBzZSgpID0gZGVmYXVsdDsKKwogdm9p
ZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKQEAgLTc1MSw2ICs4NjksMTcgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRo
JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAorRHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1
c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUGF0aCkKKyAgICAsIG1fcGF0aChwYXRoKQorICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAs
IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAsIG1fY29sb3IoY29sb3IpCit7Cit9CisKK0RyYXdGb2N1
c1JpbmdQYXRoOjp+RHJhd0ZvY3VzUmluZ1BhdGgoKSA9IGRlZmF1bHQ7CisKIHZvaWQgRHJhd0Zv
Y3VzUmluZ1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9wYXRoLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xv
cik7CkBAIC03NzMsNiArOTAyLDE3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUGF0aCYgaXRlbSkKICAgICByZXR1cm4g
dHM7CiB9CiAKK0RyYXdGb2N1c1JpbmdSZWN0czo6RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdS
ZWN0cykKKyAgICAsIG1fcmVjdHMocmVjdHMpCisgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICwg
bV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9jb2xvcihjb2xvcikKK3sKK30KKworRHJhd0ZvY3Vz
UmluZ1JlY3RzOjp+RHJhd0ZvY3VzUmluZ1JlY3RzKCkgPSBkZWZhdWx0OworCiB2b2lkIERyYXdG
b2N1c1JpbmdSZWN0czo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3JlY3RzLCBtX3dpZHRoLCBtX29mZnNldCwgbV9j
b2xvcik7CkBAIC05MDIsNiArMTA0MiwxNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQogICAgIHJldHVy
biB0czsKIH0KIAorRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCisgICAgLCBtX3JlY3QocmVjdCkKKyAgICAsIG1f
cm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKKyAgICAsIG1fY29sb3IoY29sb3IpCit7
Cit9CisKK0ZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjp+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
KSA9IGRlZmF1bHQ7CisKIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3IpOwpAQCAtOTM2LDYg
KzEwODYsMTQgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZpbGxQYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAorRmlsbEVsbGlwc2U6
OkZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpGaWxsRWxsaXBzZSkKKyAgICAsIG1fcmVjdChyZWN0KQoreworfQorCitGaWxsRWxs
aXBzZTo6fkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OworCiB2b2lkIEZpbGxFbGxpcHNlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsRWxs
aXBzZShtX3JlY3QpOwpAQCAtOTQ4LDYgKzExMDYsMTUgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAorU3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VS
ZWN0KQorICAgICwgbV9yZWN0KHJlY3QpCisgICAgLCBtX2xpbmVXaWR0aChsaW5lV2lkdGgpCit7
Cit9CisKK1N0cm9rZVJlY3Q6On5TdHJva2VSZWN0KCkgPSBkZWZhdWx0OworCiBPcHRpb25hbDxG
bG9hdFJlY3Q+IFN0cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKQEAgLTk5MCw2ICsxMTU3
LDE0IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTdHJva2VQYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAorU3Ryb2tlRWxsaXBzZTo6
U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6U3Ryb2tlRWxsaXBzZSkKKyAgICAsIG1fcmVjdChyZWN0KQoreworfQorCitTdHJv
a2VFbGxpcHNlOjp+U3Ryb2tlRWxsaXBzZSgpID0gZGVmYXVsdDsKKwogT3B0aW9uYWw8RmxvYXRS
ZWN0PiBTdHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29udGV4dC5zdHJv
a2VUaGlja25lc3MoKTsKQEAgLTEwMTEsNiArMTE4NiwxNCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKK1N0cm9rZVBhdGg6OlN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQorICAgICwgbV9wYXRo
KHBhdGgpCit7Cit9CisKK1N0cm9rZVBhdGg6On5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OworCiBD
bGVhclJlY3Q6OkNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6Q2xlYXJSZWN0KQogICAgICwgbV9yZWN0KHJlY3QpCkBAIC0xMDMxLDYg
KzEyMTQsMTQgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IENsZWFyUmVjdCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKK0JlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKQorICAgICwgbV9v
cGFjaXR5KG9wYWNpdHkpCit7Cit9CisKK0JlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6On5CZWdpblRy
YW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OworCiB2b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9vcGFjaXR5KTsKQEAgLTEwNDMsMjMgKzEyMzQsNTIg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXImIGl0ZW0KICAgICByZXR1cm4gdHM7CiB9CiAKK0VuZFRyYW5z
cGFyZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcigpCisgICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpCit7Cit9CisKK0VuZFRyYW5zcGFyZW5jeUxh
eWVyOjp+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7CisKIHZvaWQgRW5kVHJhbnNw
YXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKICNpZiBVU0UoQ0cpCitBcHBs
eVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybigpCisgICAgOiBJdGVtKEl0ZW1UeXBl
OjpBcHBseVN0cm9rZVBhdHRlcm4pCit7Cit9CisKK0FwcGx5U3Ryb2tlUGF0dGVybjo6fkFwcGx5
U3Ryb2tlUGF0dGVybigpID0gZGVmYXVsdDsKKwogdm9pZCBBcHBseVN0cm9rZVBhdHRlcm46OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmFwcGx5
U3Ryb2tlUGF0dGVybigpOwogfQogCitBcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJu
KCkKKyAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCit7Cit9CisKK0FwcGx5
RmlsbFBhdHRlcm46On5BcHBseUZpbGxQYXR0ZXJuKCkgPSBkZWZhdWx0OworCiB2b2lkIEFwcGx5
RmlsbFBhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KICNlbmRpZgogCitBcHBseURldmljZVNj
YWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorICAg
IDogSXRlbShJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKKyAgICAsIG1fc2NhbGVG
YWN0b3Ioc2NhbGVGYWN0b3IpCit7Cit9CisKK0FwcGx5RGV2aWNlU2NhbGVGYWN0b3I6On5BcHBs
eURldmljZVNjYWxlRmFjdG9yKCkgPSBkZWZhdWx0OworCiB2b2lkIEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9zY2FsZUZhY3Rvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaAppbmRleCBkMjI0NjcwNTJkZDI2N2QzYThmYWQyZWZhMzM5OWZjZDE2
MmIwODdmLi45Y2I2Mzg2ZjcyNjQ4NWM2Y2Y5MGEwZDBlOWRmMGVjOTViN2YyM2Y1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTUxMywyMSArNTEzLDM5IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAobGluZUNhcCkp
OwogICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVDYXAoKTsKICAg
ICAKICAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KIAor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExpbmVD
YXA+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIFNldExpbmVDYXAoTGluZUNh
cCBsaW5lQ2FwKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVDYXApCi0gICAgICAg
ICwgbV9saW5lQ2FwKGxpbmVDYXApCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBT
ZXRMaW5lQ2FwKExpbmVDYXApOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIExpbmVDYXAgbV9saW5lQ2FwOwogfTsKIAordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU2V0TGluZUNhcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2xpbmVDYXA7Cit9CisKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitPcHRpb25hbDxSZWY8U2V0TGluZUNhcD4+IFNldExpbmVDYXA6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPExpbmVDYXA+IGxpbmVDYXA7CisgICAg
ZGVjb2RlciA+PiBsaW5lQ2FwOworICAgIGlmICghbGluZUNhcCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHJldHVybiBTZXRMaW5lQ2FwOjpjcmVhdGUoKmxpbmVDYXApOwor
fQorCiBjbGFzcyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZs
b2F0IGRhc2hPZmZzZXQpCkBAIC01MzUsMTYgKzU1MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkpOwog
ICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVEYXNoKCk7CisKICAg
ICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5
OyB9CiAgICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsg
fQogCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0
TGluZURhc2g+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIFNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6
IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVEYXNoKQotICAgICAgICAsIG1fZGFzaEFycmF5KGRhc2hB
cnJheSkKLSAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKLSAgICB7Ci0gICAgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRh
c2hPZmZzZXQpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKIApAQCAtNTUyLDI3ICs1NzAsNjggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2Rhc2hP
ZmZzZXQ7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTZXRMaW5lRGFzaDo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2Rhc2hB
cnJheTsKKyAgICBlbmNvZGVyIDw8IG1fZGFzaE9mZnNldDsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTZXRMaW5lRGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsK
KyAgICBkZWNvZGVyID4+IGRhc2hBcnJheTsKKyAgICBpZiAoIWRhc2hBcnJheSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPGZsb2F0PiBkYXNoT2Zmc2V0Owor
ICAgIGRlY29kZXIgPj4gZGFzaE9mZnNldDsKKyAgICBpZiAoIWRhc2hPZmZzZXQpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU2V0TGluZURhc2g6OmNyZWF0ZSgq
ZGFzaEFycmF5LCAqZGFzaE9mZnNldCk7Cit9CisKIGNsYXNzIFNldExpbmVKb2luIDogcHVibGlj
IEl0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2V0TGluZUpvaW4+IGNyZWF0ZShMaW5l
Sm9pbiBsaW5lSm9pbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExp
bmVKb2luKGxpbmVKb2luKSk7CiAgICAgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U2V0TGluZUpvaW4oKTsKICAgICAKICAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUpvaW47IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPFNldExpbmVKb2luPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToK
LSAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICAgICAgOiBJdGVtKEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbikKLSAgICAgICAgLCBtX2xpbmVKb2luKGxpbmVKb2luKQotICAgIHsK
LSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZUpvaW4oTGluZUpvaW4pOwogCiAgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIExpbmVK
b2luIG1fbGluZUpvaW47CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTZXRM
aW5lSm9pbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCBtX2xpbmVKb2luOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVm
PFNldExpbmVKb2luPj4gU2V0TGluZUpvaW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIE9wdGlvbmFsPExpbmVKb2luPiBsaW5lSm9pbjsKKyAgICBkZWNvZGVyID4+IGxpbmVKb2lu
OworICAgIGlmICghbGluZUpvaW4pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICByZXR1cm4gU2V0TGluZUpvaW46OmNyZWF0ZSgqbGluZUpvaW4pOworfQorCiBjbGFzcyBTZXRN
aXRlckxpbWl0IDogcHVibGljIEl0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U2V0TWl0
ZXJMaW1pdD4gY3JlYXRlKGZsb2F0IGxpbWl0KQpAQCAtNTgwLDIwICs2MzksMzggQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRNaXRlckxpbWl0KGxpbWl0KSk7CiAg
ICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0TWl0ZXJMaW1pdCgpOworCiAg
ICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQogCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TWl0ZXJM
aW1pdD4+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZhdGU6Ci0gICAgU2V0TWl0ZXJMaW1pdChm
bG9hdCBtaXRlckxpbWl0KQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldE1pdGVyTGltaXQp
Ci0gICAgICAgICwgbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi0gICAgewotICAgIH0KKyAgICBX
RUJDT1JFX0VYUE9SVCBTZXRNaXRlckxpbWl0KGZsb2F0KTsKIAogICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX21pdGVyTGltaXQ7
CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTZXRNaXRlckxpbWl0OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fbWl0ZXJMaW1p
dDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTZXRNaXRlckxp
bWl0Pj4gU2V0TWl0ZXJMaW1pdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0
aW9uYWw8ZmxvYXQ+IG1pdGVyTGltaXQ7CisgICAgZGVjb2RlciA+PiBtaXRlckxpbWl0OworICAg
IGlmICghbWl0ZXJMaW1pdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJl
dHVybiBTZXRNaXRlckxpbWl0OjpjcmVhdGUoKm1pdGVyTGltaXQpOworfQorCiBjbGFzcyBDbGVh
clNoYWRvdyA6IHB1YmxpYyBJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENsZWFyU2hh
ZG93PiBjcmVhdGUoKQpAQCAtNjAxLDE1ICs2NzgsMjggQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDbGVhclNoYWRvdyk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+Q2xlYXJTaGFkb3coKTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsZWFyU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKKwog
cHJpdmF0ZToKLSAgICBDbGVhclNoYWRvdygpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6Q2xl
YXJTaGFkb3cpCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBDbGVhclNoYWRvdygp
OwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKIH07
CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENsZWFyU2hhZG93OjplbmNvZGUoRW5j
b2RlciYpIGNvbnN0Cit7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxS
ZWY8Q2xlYXJTaGFkb3c+PiBDbGVhclNoYWRvdzo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJl
dHVybiBDbGVhclNoYWRvdzo6Y3JlYXRlKCk7Cit9CisKIC8vIEZJWE1FOiB0cmVhdCBhcyBEcmF3
aW5nSXRlbT8KIGNsYXNzIENsaXAgOiBwdWJsaWMgSXRlbSB7CiBwdWJsaWM6CkBAIC02MTgsMjAg
KzcwOCwzOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXAocmVj
dCkpOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsaXAoKTsKKwogICAg
IEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwPj4gZGVjb2RlKERlY29k
ZXImKTsKKwogcHJpdmF0ZToKLSAgICBDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICAg
ICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgIHsK
LSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQ2xpcChjb25zdCBGbG9hdFJlY3QmKTsKIAogICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBGbG9h
dFJlY3QgbV9yZWN0OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ2xpcDo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3JlY3Q7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWY8Q2xpcD4+IENsaXA6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVj
dDsKKyAgICBkZWNvZGVyID4+IHJlY3Q7CisgICAgaWYgKCFyZWN0KQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENsaXA6OmNyZWF0ZSgqcmVjdCk7Cit9CisKIGNs
YXNzIENsaXBPdXQgOiBwdWJsaWMgSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDbGlw
T3V0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNjM5LDIwICs3NDcsMzggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKICAg
ICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwT3V0KCk7CisKICAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcE91dD4+IGRlY29kZShEZWNvZGVy
Jik7CisKIHByaXZhdGU6Ci0gICAgQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAg
ICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dCkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAg
ICB7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jik7
CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IENsaXBPdXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIg
PDwgbV9yZWN0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPENs
aXBPdXQ+PiBDbGlwT3V0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IHJlY3Q7CisgICAgZGVjb2RlciA+PiByZWN0OworICAgIGlmICghcmVjdCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBDbGlwT3V0OjpjcmVh
dGUoKnJlY3QpOworfQorCiBjbGFzcyBDbGlwT3V0VG9QYXRoIDogcHVibGljIEl0ZW0gewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8Q2xpcE91dFRvUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBh
dGgpCkBAIC02NjAsMjAgKzc4NiwzOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkNsaXBPdXRUb1BhdGgoKTsKKwogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGg7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPENsaXBPdXRUb1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2
YXRlOgotICAgIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBJdGVt
KEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoKQotICAgICAgICAsIG1fcGF0aChwYXRoKQotICAgIHsK
LSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJik7CiAK
ICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
Y29uc3QgUGF0aCBtX3BhdGg7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBD
bGlwT3V0VG9QYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyIDw8IG1fcGF0aDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJl
ZjxDbGlwT3V0VG9QYXRoPj4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Cit7CisgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKKyAgICBkZWNvZGVyID4+IHBhdGg7CisgICAg
aWYgKCFwYXRoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENs
aXBPdXRUb1BhdGg6OmNyZWF0ZSgqcGF0aCk7Cit9CisKIGNsYXNzIENsaXBQYXRoIDogcHVibGlj
IEl0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKQEAgLTY4MSwxNiArODI1LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUp
KTsKICAgICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB+Q2xpcFBhdGgoKTsKKwogICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBXaW5kUnVsZSB3aW5k
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gZGVjb2RlKERlY29kZXIm
KTsKKwogcHJpdmF0ZToKLSAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3
aW5kUnVsZSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwUGF0aCkKLSAgICAgICAgLCBt
X3BhdGgocGF0aCkKLSAgICAgICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQotICAgIHsKLSAgICB9
CisgICAgV0VCQ09SRV9FWFBPUlQgQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKIAog
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTY5
OCw2ICs4NDIsMjkgQEAgcHJpdmF0ZToKICAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOwogfTsKIAor
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ2xpcFBhdGg6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9wYXRoOworICAgIGVuY29kZXIgPDwg
bV93aW5kUnVsZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxD
bGlwUGF0aD4+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRp
b25hbDxQYXRoPiBwYXRoOworICAgIGRlY29kZXIgPj4gcGF0aDsKKyAgICBpZiAoIXBhdGgpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxXaW5kUnVsZT4gd2lu
ZFJ1bGU7CisgICAgZGVjb2RlciA+PiB3aW5kUnVsZTsKKyAgICBpZiAoIXdpbmRSdWxlKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENsaXBQYXRoOjpjcmVhdGUo
KnBhdGgsICp3aW5kUnVsZSk7Cit9CisKIGNsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhp
bmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC04MTMsNiArOTgwLDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24s
IHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CiAgICAg
fQogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVkSW1hZ2UoKTsKKwogICAg
IGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAg
ICBGbG9hdFBvaW50IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgRmxv
YXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQpAQCAt
ODIwLDggKzk4OSwxMSBAQCBwdWJsaWM6CiAgICAgRmxvYXRTaXplIHRpbGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV90aWxlU2l6ZTsgfQogICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGFjaW5nOyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZh
dGU6Ci0gICAgRHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKIApAQCAtODM1LDYgKzEwMDcsNTUgQEAgcHJpdmF0ZToKICAgICBJbWFnZVBhaW50aW5n
T3B0aW9ucyBtX2ltYWdlUGFpbnRpbmdPcHRpb25zOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgRHJhd1RpbGVkSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAoreworICAgIEltYWdlSGFuZGxlIGltYWdlSGFuZGxlOworICAgIGltYWdlSGFuZGxlLmltYWdl
ID0gbV9pbWFnZS5wdHIoKTsKKyAgICBlbmNvZGVyIDw8IGltYWdlSGFuZGxlOworICAgIGVuY29k
ZXIgPDwgbV9kZXN0aW5hdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fc291cmNlOworICAgIGVuY29k
ZXIgPDwgbV90aWxlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IG1fc3BhY2luZzsKKyAgICBlbmNvZGVy
IDw8IG1faW1hZ2VQYWludGluZ09wdGlvbnM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+
CitPcHRpb25hbDxSZWY8RHJhd1RpbGVkSW1hZ2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxl
OworICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7CisgICAgaWYgKCFpbWFnZUhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZGVz
dGluYXRpb247CisgICAgZGVjb2RlciA+PiBkZXN0aW5hdGlvbjsKKyAgICBpZiAoIWRlc3RpbmF0
aW9uKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8RmxvYXRQ
b2ludD4gc291cmNlOworICAgIGRlY29kZXIgPj4gc291cmNlOworICAgIGlmICghc291cmNlKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8RmxvYXRTaXplPiB0
aWxlU2l6ZTsKKyAgICBkZWNvZGVyID4+IHRpbGVTaXplOworICAgIGlmICghdGlsZVNpemUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxGbG9hdFNpemU+IHNw
YWNpbmc7CisgICAgZGVjb2RlciA+PiBzcGFjaW5nOworICAgIGlmICghc3BhY2luZykKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPEltYWdlUGFpbnRpbmdPcHRp
b25zPiBpbWFnZVBhaW50aW5nT3B0aW9uczsKKyAgICBkZWNvZGVyID4+IGltYWdlUGFpbnRpbmdP
cHRpb25zOworICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZSgqaW1hZ2VI
YW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2l6ZSwgKnNwYWNpbmcs
ICppbWFnZVBhaW50aW5nT3B0aW9ucyk7Cit9CisKIGNsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdl
IDogcHVibGljIERyYXdpbmdJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERyYXdUaWxl
ZFNjYWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2Nh
bGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCkBAIC04NDIs
MTIgKzEwNjMsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
VGlsZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFj
dG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CiAgICAgfQogCisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKTsKKwogICAgIGNv
bnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBG
bG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9hdFJl
Y3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRTY2Fs
ZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZhdGU6Ci0gICAgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpU
aWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpOworICAgIFdFQkNPUkVfRVhQT1JUIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKIAog
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTg2
Miw2ICsxMDg4LDU5IEBAIHByaXZhdGU6CiAgICAgSW1hZ2VQYWludGluZ09wdGlvbnMgbV9pbWFn
ZVBhaW50aW5nT3B0aW9uczsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERy
YXdUaWxlZFNjYWxlZEltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBJbWFnZUhhbmRsZSBpbWFnZUhhbmRsZTsKKyAgICBpbWFnZUhhbmRsZS5pbWFnZSA9IG1faW1h
Z2UucHRyKCk7CisgICAgZW5jb2RlciA8PCBpbWFnZUhhbmRsZTsKKyAgICBlbmNvZGVyIDw8IG1f
ZGVzdGluYXRpb247CisgICAgZW5jb2RlciA8PCBtX3NvdXJjZTsKKyAgICBlbmNvZGVyIDw8IG1f
dGlsZVNjYWxlRmFjdG9yOworICAgIGVuY29kZXIuZW5jb2RlRW51bShtX2hSdWxlKTsKKyAgICBl
bmNvZGVyLmVuY29kZUVudW0obV92UnVsZSk7CisgICAgZW5jb2RlciA8PCBtX2ltYWdlUGFpbnRp
bmdPcHRpb25zOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPERy
YXdUaWxlZFNjYWxlZEltYWdlPj4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKKyAg
ICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOworICAgIGlmICghaW1hZ2VIYW5kbGUpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0
aW9uOworICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247CisgICAgaWYgKCFkZXN0aW5hdGlvbikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
c291cmNlOworICAgIGRlY29kZXIgPj4gc291cmNlOworICAgIGlmICghc291cmNlKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8RmxvYXRTaXplPiB0aWxlU2Nh
bGVGYWN0b3I7CisgICAgZGVjb2RlciA+PiB0aWxlU2NhbGVGYWN0b3I7CisgICAgaWYgKCF0aWxl
U2NhbGVGYWN0b3IpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBJbWFnZTo6
VGlsZVJ1bGUgaFJ1bGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oaFJ1bGUpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHZSdWxlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPEltYWdlUGFpbnRpbmdPcHRpb25zPiBpbWFnZVBhaW50
aW5nT3B0aW9uczsKKyAgICBkZWNvZGVyID4+IGltYWdlUGFpbnRpbmdPcHRpb25zOworICAgIGlm
ICghaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICByZXR1cm4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSgqaW1hZ2VIYW5kbGUtPmlt
YWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVs
ZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zKTsKK30KKwogI2lmIFVTRShDRykgfHwgVVNFKENBSVJP
KSB8fCBVU0UoRElSRUNUMkQpCiBjbGFzcyBEcmF3TmF0aXZlSW1hZ2UgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0gewogcHVibGljOgpAQCAtODk3LDYgKzExNzYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7CiAgICAgfQogCisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1BhdHRlcm4oKTsKKwogICAgIGNvbnN0IElt
YWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhdHRl
cm5UcmFuc2Zvcm07IH0KICAgICBGbG9hdFJlY3QgdGlsZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3RpbGVSZWN0OyB9CkBAIC05MDQsOCArMTE4NSwxMSBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2lu
dCBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2U7IH0KICAgICBGbG9hdFNpemUgc3BhY2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQogCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBkZWNvZGUoRGVjb2RlciYp
OworCiBwcml2YXRlOgotICAgIERyYXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQ
YXR0ZXJuKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKIApAQCAtOTIwLDYgKzEyMDQsNjEgQEAgcHJpdmF0ZToKICAgICBJbWFnZVBhaW50aW5nT3B0
aW9ucyBtX29wdGlvbnM7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEcmF3
UGF0dGVybjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgSW1hZ2VIYW5k
bGUgaW1hZ2VIYW5kbGU7CisgICAgaW1hZ2VIYW5kbGUuaW1hZ2UgPSBtX2ltYWdlLnB0cigpOwor
ICAgIGVuY29kZXIgPDwgaW1hZ2VIYW5kbGU7CisgICAgZW5jb2RlciA8PCBtX3BhdHRlcm5UcmFu
c2Zvcm07CisgICAgZW5jb2RlciA8PCBtX3RpbGVSZWN0OworICAgIGVuY29kZXIgPDwgbV9kZXN0
aW5hdGlvbjsKKyAgICBlbmNvZGVyIDw8IG1fcGhhc2U7CisgICAgZW5jb2RlciA8PCBtX3NwYWNp
bmc7CisgICAgZW5jb2RlciA8PCBtX29wdGlvbnM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitPcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwor
ICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7CisgICAgaWYgKCFpbWFnZUhhbmRsZSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4g
cGF0dGVyblRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHBhdHRlcm5UcmFuc2Zvcm07CisgICAg
aWYgKCFwYXR0ZXJuVHJhbnNmb3JtKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiB0aWxlUmVjdDsKKyAgICBkZWNvZGVyID4+IHRpbGVSZWN0
OworICAgIGlmICghdGlsZVJlY3QpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0aW9uOworICAgIGRlY29kZXIgPj4gZGVzdGlu
YXRpb247CisgICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBoYXNlOworICAgIGRlY29kZXIgPj4gcGhh
c2U7CisgICAgaWYgKCFwaGFzZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IE9wdGlvbmFsPEZsb2F0U2l6ZT4gc3BhY2luZzsKKyAgICBkZWNvZGVyID4+IHNwYWNpbmc7Cisg
ICAgaWYgKCFzcGFjaW5nKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0
aW9uYWw8SW1hZ2VQYWludGluZ09wdGlvbnM+IG9wdGlvbnM7CisgICAgZGVjb2RlciA+PiBvcHRp
b25zOworICAgIGlmICghb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiBEcmF3UGF0dGVybjo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0
aW5hdGlvbiwgKnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNlLCAqc3BhY2luZywg
Km9wdGlvbnMpOworfQorCiAvLyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRo
ZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCiBjbGFz
cyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKIHB1YmxpYzoK
QEAgLTkyOCwyMCArMTI2NywzOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkpOwogICAgIH0KIAorICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKwogICAgIGZsb2F0
IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAorICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+
PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6QmVnaW5U
cmFuc3BhcmVuY3lMYXllcikKLSAgICAgICAgLCBtX29wYWNpdHkob3BhY2l0eSkKLSAgICB7Ci0g
ICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSk7CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgZmxvYXQgbV9vcGFjaXR5OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX29wYWNpdHk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitPcHRpb25hbDxSZWY8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4+IEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPGZs
b2F0PiBvcGFjaXR5OworICAgIGRlY29kZXIgPj4gb3BhY2l0eTsKKyAgICBpZiAoIW9wYWNpdHkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gQmVnaW5UcmFuc3Bh
cmVuY3lMYXllcjo6Y3JlYXRlKCpvcGFjaXR5KTsKK30KKwogY2xhc3MgRW5kVHJhbnNwYXJlbmN5
TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RW5k
VHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZSgpCkBAIC05NDksMTUgKzEzMDYsMjggQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFbmRUcmFuc3BhcmVuY3lMYXllcik7CiAg
ICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEVu
ZFRyYW5zcGFyZW5jeUxheWVyPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAgICBF
bmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyKQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBFbmRU
cmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAoreworfQorCit0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPj4gRW5k
VHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShEZWNvZGVyJikKK3sKKyAgICByZXR1cm4gRW5kVHJh
bnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpOworfQorCiBjbGFzcyBEcmF3UmVjdCA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEcmF3UmVjdD4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQpAQCAtMTAxMywxNiAr
MTM4MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5l
KHBvaW50MSwgcG9pbnQyKSk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
RHJhd0xpbmUoKTsKKwogICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4gbV9w
b2ludDE7IH0KICAgICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQy
OyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxE
cmF3TGluZT4+IGRlY29kZShEZWNvZGVyJik7CisKIHByaXZhdGU6Ci0gICAgRHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi0gICAgICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lKQotICAgICAgICAsIG1fcG9pbnQxKHBv
aW50MSkKLSAgICAgICAgLCBtX3BvaW50Mihwb2ludDIpCi0gICAgewotICAgIH0KKyAgICBXRUJD
T1JFX0VYUE9SVCBEcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
OwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKICAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwpAQCAtMTAzMSw2ICsxNDAxLDI5IEBAIHByaXZhdGU6CiAgICAgRmxv
YXRQb2ludCBtX3BvaW50MjsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERy
YXdMaW5lOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IG1fcG9pbnQxOworICAgIGVuY29kZXIgPDwgbV9wb2ludDI7Cit9CisKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitPcHRpb25hbDxSZWY8RHJhd0xpbmU+PiBEcmF3TGluZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQxOworICAgIGRl
Y29kZXIgPj4gcG9pbnQxOworICAgIGlmICghcG9pbnQxKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQyOworICAgIGRlY29kZXIg
Pj4gcG9pbnQyOworICAgIGlmICghcG9pbnQyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgcmV0dXJuIERyYXdMaW5lOjpjcmVhdGUoKnBvaW50MSwgKnBvaW50Mik7Cit9CisK
IGNsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8RHJhd0xpbmVzRm9yVGV4dD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMpCkBAIC0xMDM4LDYgKzE0MzEsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKICAgICB9CiAKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCk7CisKICAgICB2b2lkIHNl
dEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbikgeyBtX2Jsb2Nr
TG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9CiAgICAgY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbjsgfQogICAgIGNvbnN0IEZs
b2F0U2l6ZSYgbG9jYWxBbmNob3IoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsQW5jaG9yOyB9CkBA
IC0xMDQ3LDE3ICsxNDQyLDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJpbnRpbmcoKSBjb25z
dCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsg
cmV0dXJuIG1fZG91YmxlTGluZXM7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBkZWNvZGUoRGVjb2RlciYpOwor
CiBwcml2YXRlOgotICAgIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykK
LSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dCkKLSAgICAg
ICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKLSAgICAgICAgLCBtX2xvY2FsQW5j
aG9yKGxvY2FsQW5jaG9yKQotICAgICAgICAsIG1fd2lkdGhzKHdpZHRocykKLSAgICAgICAgLCBt
X3RoaWNrbmVzcyh0aGlja25lc3MpCi0gICAgICAgICwgbV9wcmludGluZyhwcmludGluZykKLSAg
ICAgICAgLCBtX2RvdWJsZUxpbmVzKGRvdWJsZUxpbmVzKQotICAgIHsKLSAgICB9CisgICAgV0VC
Q09SRV9FWFBPUlQgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKTsKIAog
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTEw
NzEsNiArMTQ2MCw1MyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kb3VibGVMaW5lczsKIH07CiAK
K3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERyYXdMaW5lc0ZvclRleHQ6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9ibG9ja0xvY2F0aW9u
OworICAgIGVuY29kZXIgPDwgbV9sb2NhbEFuY2hvcjsKKyAgICBlbmNvZGVyIDw8IG1fd2lkdGhz
OworICAgIGVuY29kZXIgPDwgbV90aGlja25lc3M7CisgICAgZW5jb2RlciA8PCBtX3ByaW50aW5n
OworICAgIGVuY29kZXIgPDwgbV9kb3VibGVMaW5lczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KK09wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gYmxv
Y2tMb2NhdGlvbjsKKyAgICBkZWNvZGVyID4+IGJsb2NrTG9jYXRpb247CisgICAgaWYgKCFibG9j
a0xvY2F0aW9uKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8
RmxvYXRTaXplPiBsb2NhbEFuY2hvcjsKKyAgICBkZWNvZGVyID4+IGxvY2FsQW5jaG9yOworICAg
IGlmICghbG9jYWxBbmNob3IpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBP
cHRpb25hbDxEYXNoQXJyYXk+IHdpZHRoczsKKyAgICBkZWNvZGVyID4+IHdpZHRoczsKKyAgICBp
ZiAoIXdpZHRocykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFs
PGZsb2F0PiB0aGlja25lc3M7CisgICAgZGVjb2RlciA+PiB0aGlja25lc3M7CisgICAgaWYgKCF0
aGlja25lc3MpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxi
b29sPiBwcmludGluZzsKKyAgICBkZWNvZGVyID4+IHByaW50aW5nOworICAgIGlmICghcHJpbnRp
bmcpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxib29sPiBk
b3VibGVMaW5lczsKKyAgICBkZWNvZGVyID4+IGRvdWJsZUxpbmVzOworICAgIGlmICghZG91Ymxl
TGluZXMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRHJhd0xp
bmVzRm9yVGV4dDo6Y3JlYXRlKCpibG9ja0xvY2F0aW9uLCAqbG9jYWxBbmNob3IsICp0aGlja25l
c3MsICp3aWR0aHMsICpwcmludGluZywgKmRvdWJsZUxpbmVzKTsKK30KKwogY2xhc3MgRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKQEAgLTEwNzgsMTUgKzE1
MTQsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKSk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpOworCiAgICAgRmxvYXRSZWN0
IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+PiBk
ZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
LSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cikKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAg
IHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSk7CiAKICAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0xMDk2LDYgKzE1MzIs
MjkgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOwogfTsK
IAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3Jl
Y3Q7CisgICAgZW5jb2RlciA8PCBtX3N0eWxlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgorT3B0aW9uYWw8UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+PiBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IHJlY3Q7CisgICAgZGVjb2RlciA+PiByZWN0OworICAgIGlmICghcmVjdCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPERvY3VtZW50TWFya2Vy
TGluZVN0eWxlPiBzdHlsZTsKKyAgICBkZWNvZGVyID4+IHN0eWxlOworICAgIGlmICghc3R5bGUp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjo6Y3JlYXRlKCpyZWN0LCAqc3R5bGUpOworfQorCiBjbGFzcyBEcmF3RWxs
aXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEcmF3
RWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTExMDMsMTQgKzE1NjIs
MTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShy
ZWN0KSk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgfkRyYXdFbGxpcHNlKCk7CisKICAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0VsbGlwc2U+PiBkZWNv
ZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0VsbGlwc2UpCi0g
ICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBE
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jl
Y3Q7IH0KQEAgLTExMTgsNiArMTU3OCwyMyBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEcmF3RWxsaXBzZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3JlY3Q7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWY8RHJhd0VsbGlwc2U+PiBE
cmF3RWxsaXBzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiByZWN0OworICAgIGRlY29kZXIgPj4gcmVjdDsKKyAgICBpZiAoIXJlY3QpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRHJhd0VsbGlwc2U6OmNyZWF0
ZSgqcmVjdCk7Cit9CisKIGNsYXNzIERyYXdQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPERyYXdQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkK
QEAgLTExNjYsMjAgKzE2NDMsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogICAg
IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdGb2N1c1JpbmdQYXRoKCk7CisK
ICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAgICAgZmxv
YXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAgICAgZmxvYXQgb2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2NvbG9yOyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisK
IHByaXZhdGU6Ci0gICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgICAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0
aCkKLSAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
LSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBP
UlQgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJik7CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwogCkBAIC0xMTkxLDYgKzE2NjYsNDEgQEAgcHJpdmF0ZToKICAgICBDb2xv
ciBtX2NvbG9yOwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRHJhd0ZvY3Vz
UmluZ1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIg
PDwgbV9wYXRoOworICAgIGVuY29kZXIgPDwgbV93aWR0aDsKKyAgICBlbmNvZGVyIDw8IG1fb2Zm
c2V0OworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK09wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4+IERyYXdGb2N1c1JpbmdQYXRoOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxQYXRoPiBwYXRoOworICAg
IGRlY29kZXIgPj4gcGF0aDsKKyAgICBpZiAoIXBhdGgpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBPcHRpb25hbDxmbG9hdD4gd2lkdGg7CisgICAgZGVjb2RlciA+PiB3aWR0
aDsKKyAgICBpZiAoIXdpZHRoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
T3B0aW9uYWw8ZmxvYXQ+IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAo
IW9mZnNldCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPENv
bG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gRHJhd0ZvY3VzUmluZ1BhdGg6
OmNyZWF0ZSgqcGF0aCwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IpOworfQorCiBjbGFzcyBEcmF3
Rm9jdXNSaW5nUmVjdHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPiBjcmVhdGUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCkBA
IC0xMTk4LDIwICsxNzA4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogICAg
IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdGb2N1c1JpbmdSZWN0cygpOwor
CiAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3RzOyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAgICAg
ZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBjb25zdCBDb2xv
ciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+PiBkZWNv
ZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAgIERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKLSAgICAgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ZvY3Vz
UmluZ1JlY3RzKQotICAgICAgICAsIG1fcmVjdHMocmVjdHMpCi0gICAgICAgICwgbV93aWR0aCh3
aWR0aCkKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICwgbV9jb2xvcihjb2xv
cikKLSAgICB7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIERyYXdGb2N1c1JpbmdSZWN0cyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJik7CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwogCkBAIC0xMjIzLDYgKzE3MzEsNDEgQEAgcHJpdmF0ZToKICAgICBDb2xvciBtX2NvbG9y
OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRHJhd0ZvY3VzUmluZ1JlY3Rz
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fcmVj
dHM7CisgICAgZW5jb2RlciA8PCBtX3dpZHRoOworICAgIGVuY29kZXIgPDwgbV9vZmZzZXQ7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbG9yOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0
aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8VmVjdG9yPEZsb2F0UmVjdD4+IHJl
Y3RzOworICAgIGRlY29kZXIgPj4gcmVjdHM7CisgICAgaWYgKCFyZWN0cykKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPGZsb2F0PiB3aWR0aDsKKyAgICBkZWNv
ZGVyID4+IHdpZHRoOworICAgIGlmICghd2lkdGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBPcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0
OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
T3B0aW9uYWw8Q29sb3I+IGNvbG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFj
b2xvcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBEcmF3Rm9j
dXNSaW5nUmVjdHM6OmNyZWF0ZSgqcmVjdHMsICp3aWR0aCwgKm9mZnNldCwgKmNvbG9yKTsKK30K
KwogY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8RmlsbFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0xNDYz
LDE4ICsyMDA2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmls
bFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOwogICAg
IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KCk7CisKICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7
IH0KICAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gZGVjb2RlKERlY29k
ZXImKTsKKwogcHJpdmF0ZToKLSAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQotICAgICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSkKLSAgICAgICAgLCBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX3Jv
dW5kZWRIb2xlUmVjdChyb3VuZGVkSG9sZVJlY3QpCi0gICAgICAgICwgbV9jb2xvcihjb2xvcikK
LSAgICB7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYp
OwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKICAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQpAQCAtMTQ4NCw2ICsyMDI2LDM1IEBA
IHByaXZhdGU6CiAgICAgQ29sb3IgbV9jb2xvcjsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fcmVjdDsKKyAgICBlbmNvZGVyIDw8IG1fcm91
bmRlZEhvbGVSZWN0OworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4+IEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IHJlY3Q7CisgICAgZGVjb2RlciA+PiByZWN0OworICAgIGlmICghcmVj
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPEZsb2F0Um91
bmRlZFJlY3Q+IHJvdW5kZWRIb2xlUmVjdDsKKyAgICBkZWNvZGVyID4+IHJvdW5kZWRIb2xlUmVj
dDsKKyAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIE9wdGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOwor
ICAgIGlmICghY29sb3IpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSgqcmVjdCwgKnJvdW5kZWRIb2xlUmVj
dCwgKmNvbG9yKTsKK30KKwogY2xhc3MgRmlsbFBhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8RmlsbFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRo
KQpAQCAtMTUzMSwxNCArMjEwMiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZpbGxFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5GaWxsRWxsaXBzZSgpOworCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPEZpbGxFbGxpcHNlPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0ZToKLSAg
ICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkZpbGxFbGxpcHNlKQotICAgICAgICAsIG1fcmVjdChyZWN0KQotICAgIHsK
LSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7
CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCkBA
IC0xNTQ3LDYgKzIxMTksMjMgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsK
IAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRmlsbEVsbGlwc2U6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9yZWN0OworfQorCit0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPEZpbGxFbGxpcHNlPj4gRmlsbEVsbGlw
c2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKKyAgICBkZWNvZGVyID4+IHJlY3Q7CisgICAgaWYgKCFyZWN0KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIEZpbGxFbGxpcHNlOjpjcmVhdGUoKnJlY3Qp
OworfQorCiBjbGFzcyBTdHJva2VSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKQEAgLTE1NTQsMTYgKzIxNDMsMTYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOwogICAg
IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0cm9rZVJlY3QoKTsKKwogICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgZmxvYXQgbGluZVdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lkdGg7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBkZWNvZGUoRGVjb2Rl
ciYpOworCiBwcml2YXRlOgotICAgIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgpCi0gICAgICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJl
Y3QpCi0gICAgICAgICwgbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9saW5lV2lkdGgobGluZVdp
ZHRoKQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCk7CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xNTcyLDYgKzIxNjEsMjkgQEAg
cHJpdmF0ZToKICAgICBmbG9hdCBtX2xpbmVXaWR0aDsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Cit2b2lkIFN0cm9rZVJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgbV9yZWN0OworICAgIGVuY29kZXIgPDwgbV9saW5lV2lkdGg7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWY8U3Ryb2tlUmVjdD4+IFN0
cm9rZVJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gcmVjdDsKKyAgICBkZWNvZGVyID4+IHJlY3Q7CisgICAgaWYgKCFyZWN0KQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8ZmxvYXQ+IGxpbmVXaWR0aDsK
KyAgICBkZWNvZGVyID4+IGxpbmVXaWR0aDsKKyAgICBpZiAoIWxpbmVXaWR0aCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBTdHJva2VSZWN0OjpjcmVhdGUoKnJl
Y3QsICpsaW5lV2lkdGgpOworfQorCiBjbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQ
YXRoJiBwYXRoKQpAQCAtMTU3OSwyMiArMjE5MSwzOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwogICAgIH0KIAorICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgflN0cm9rZVBhdGgoKTsKKwogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2
YXRlOgotICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICAgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAgICAgLCBtX3BhdGgocGF0aCkKLSAgICB7
Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOwogCiAg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKICAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgY29uc3QgUGF0aCBtX3BhdGg7Ci0gICAgRmxvYXRQb2ludCBtX2Js
b2NrTG9jYXRpb247CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTdHJva2VQ
YXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1f
cGF0aDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTdHJva2VQ
YXRoPj4gU3Ryb2tlUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9u
YWw8UGF0aD4gcGF0aDsKKyAgICBkZWNvZGVyID4+IHBhdGg7CisgICAgaWYgKCFwYXRoKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIFN0cm9rZVBhdGg6OmNyZWF0
ZSgqcGF0aCk7Cit9CisKIGNsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKQEAgLTE2MDIsMTQgKzIyMzEsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKKyAgICBX
RUJDT1JFX0VYUE9SVCB+U3Ryb2tlRWxsaXBzZSgpOworCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOworCiBw
cml2YXRlOgotICAgIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgICAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlKQotICAgICAgICAsIG1fcmVj
dChyZWN0KQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKTsKIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKQEAgLTE2MTcsNiArMjI0NywyMyBAQCBw
cml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgordm9pZCBTdHJva2VFbGxpcHNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IG1fcmVjdDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K09wdGlvbmFsPFJlZjxTdHJva2VFbGxpcHNlPj4gU3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OworICAgIGRlY29k
ZXIgPj4gcmVjdDsKKyAgICBpZiAoIXJlY3QpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4gU3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsKK30KKwogY2xhc3Mg
Q2xlYXJSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PENsZWFyUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTE2NjUsMTUgKzIz
MTIsMjggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0cm9r
ZVBhdHRlcm4pOwogICAgIH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5U3Ry
b2tlUGF0dGVybigpOworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKKwogcHJpdmF0
ZToKLSAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OkFw
cGx5U3Ryb2tlUGF0dGVybikKLSAgICB7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIEFwcGx5
U3Ryb2tlUGF0dGVybigpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEFwcGx5U3Ry
b2tlUGF0dGVybjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAoreworfQorCit0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4+IEFwcGx5U3Ryb2tl
UGF0dGVybjo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiBBcHBseVN0cm9rZVBhdHRl
cm46OmNyZWF0ZSgpOworfQorCiBjbGFzcyBBcHBseUZpbGxQYXR0ZXJuIDogcHVibGljIEl0ZW0g
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8QXBwbHlGaWxsUGF0dGVybj4gY3JlYXRlKCkKQEAg
LTE2ODEsMTQgKzIzNDEsMjcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBcHBseUZpbGxQYXR0ZXJuKTsKICAgICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5BcHBseUZpbGxQYXR0ZXJuKCk7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxBcHBseUZpbGxQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKKwog
cHJpdmF0ZToKLSAgICBBcHBseUZpbGxQYXR0ZXJuKCkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBl
OjpBcHBseUZpbGxQYXR0ZXJuKQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQXBw
bHlGaWxsUGF0dGVybigpOwogCiAgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKIH07CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEFwcGx5Rmls
bFBhdHRlcm46OmVuY29kZShFbmNvZGVyJikgY29uc3QKK3sKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxBcHBseUZpbGxQYXR0ZXJuPj4gQXBwbHlGaWxsUGF0dGVy
bjo6ZGVjb2RlKERlY29kZXImKQoreworICAgIHJldHVybiBBcHBseUZpbGxQYXR0ZXJuOjpjcmVh
dGUoKTsKK30KICNlbmRpZgogCiBjbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGlj
IEl0ZW0gewpAQCAtMTY5OCwyMCArMjM3MSwzOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKICAgICB9
CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseURldmljZVNjYWxlRmFjdG9yKCk7
CisKICAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVGYWN0b3I7
IH0KIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I+PiBkZWNvZGUoRGVjb2RlciYpOworCiBwcml2YXRlOgotICAg
IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgICAgIDogSXRl
bShJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgLCBtX3NjYWxlRmFj
dG9yKHNjYWxlRmFjdG9yKQotICAgIHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3Rvcik7CiAKICAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zY2FsZUZhY3Rv
cjsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
bV9zY2FsZUZhY3RvcjsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJl
ZjxBcHBseURldmljZVNjYWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8ZmxvYXQ+IHNjYWxlRmFjdG9yOwor
ICAgIGRlY29kZXIgPj4gc2NhbGVGYWN0b3I7CisgICAgaWYgKCFzY2FsZUZhY3RvcikKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBBcHBseURldmljZVNjYWxlRmFj
dG9yOjpjcmVhdGUoKnNjYWxlRmFjdG9yKTsKK30KKworCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOwogCiB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgpAQCAtMTc0MiwzMSArMjQzNCwzMSBAQCB2b2lkIEl0ZW06OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldFN0YXRlPigq
dGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0
IGVuY29kZSBTZXRMaW5lQ2FwIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGlu
ZUNhcD4oKnRoaXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNh
bm5vdCB5ZXQgZW5jb2RlIFNldExpbmVEYXNoIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2V0TGluZURhc2g+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06
OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBTZXRMaW5lSm9pbiIpOworICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PFNldExpbmVKb2luPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxh
eUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBTZXRNaXRlckxpbWl0Iik7Cisg
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oKnRoaXMpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgV1RGTG9n
QWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIENsZWFy
U2hhZG93Iik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KCp0aGlz
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIENs
aXAiKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwPigqdGhpcyk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIFdURkxvZ0Fsd2F5
cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBDbGlwT3V0Iik7
CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcE91dD4oKnRoaXMpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICBXVEZMb2dB
bHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUgQ2xpcE91
dFRvUGF0aCIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBPdXRUb1BhdGg+KCp0
aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAg
ICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVu
Y29kZSBDbGlwUGF0aCIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBQYXRoPigq
dGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CiAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0
IGVuY29kZSBEcmF3R2x5cGhzIik7CkBAIC0xNzc1LDEwICsyNDY3LDEwIEBAIHZvaWQgSXRlbTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8RHJhd0ltYWdlPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZEltYWdlOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVt
OjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUgRHJhd1RpbGVkSW1hZ2UiKTsKKyAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oKnRoaXMpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgV1RGTG9n
QWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIERyYXdU
aWxlZFNjYWxlZEltYWdlIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVk
U2NhbGVkSW1hZ2U+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAjaWYgVVNFKENHKSB8fCBVU0Uo
Q0FJUk8pIHx8IFVTRShESVJFQ1QyRCkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U6CkBAIC0xNzg2LDMxICsyNDc4LDMxIEBAIHZvaWQgSXRlbTo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdHRlcm46Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVu
Y29kZSBjYW5ub3QgeWV0IGVuY29kZSBEcmF3UGF0dGVybiIpOworICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PERyYXdQYXR0ZXJuPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdSZWN0OgogICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdSZWN0
PigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgot
ICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHll
dCBlbmNvZGUgRHJhd0xpbmUiKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3TGlu
ZT4oKnRoaXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNG
b3JUZXh0OgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUg
Y2Fubm90IHlldCBlbmNvZGUgRHJhd0xpbmVzRm9yVGV4dCIpOworICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgV1RGTG9n
QWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIiKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0
OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUgRHJhd0VsbGlwc2UiKTsKKyAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3RWxsaXBzZT4oKnRoaXMpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxEcmF3UGF0aD4oKnRoaXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRl
bTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIERyYXdGb2N1c1JpbmdQYXRoIik7CisgICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KCp0aGlzKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBX
VEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNvZGUg
RHJhd0ZvY3VzUmluZ1JlY3RzIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0Zv
Y3VzUmluZ1JlY3RzPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0OgogICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxSZWN0PigqdGhpcyk7
CkBAIC0xODI4LDQyICsyNTIwLDQyIEBAIHZvaWQgSXRlbTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiAgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0Pigq
dGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNv
ZGUgY2Fubm90IHlldCBlbmNvZGUgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUiKTsKKyAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKnRoaXMpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxGaWxsUGF0aD4oKnRoaXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlz
dDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIEZpbGxFbGxpcHNlIik7CisgICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbEVsbGlwc2U+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJE
aXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIFN0cm9rZVJlY3QiKTsK
KyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VSZWN0PigqdGhpcyk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIFdURkxvZ0Fs
d2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBTdHJva2VQ
YXRoIik7CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oKnRoaXMpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAg
ICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHlldCBlbmNv
ZGUgU3Ryb2tlRWxsaXBzZSIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZUVs
bGlwc2U+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJS
ZWN0OgogICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oKnRoaXMpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgot
ICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY2Fubm90IHll
dCBlbmNvZGUgQmVnaW5UcmFuc3BhcmVuY3lMYXllciIpOworICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIFdURkxvZ0Fs
d2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBFbmRUcmFu
c3BhcmVuY3lMYXllciIpOworICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEVuZFRyYW5zcGFy
ZW5jeUxheWVyPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogI2lmIFVTRShDRykKICAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlz
cGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjYW5ub3QgeWV0IGVuY29kZSBBcHBseVN0cm9rZVBhdHRl
cm4iKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KCp0
aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVy
bjoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5v
dCB5ZXQgZW5jb2RlIEFwcGx5RmlsbFBhdHRlcm4iKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxBcHBseUZpbGxQYXR0ZXJuPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAg
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgV1RGTG9n
QWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNhbm5vdCB5ZXQgZW5jb2RlIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IiKTsKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseURl
dmljZVNjYWxlRmFjdG9yPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTE5
MDYsMzEgKzI1OTgsNDAgQEAgT3B0aW9uYWw8UmVmPEl0ZW0+PiBJdGVtOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNv
ZGUgY2Fubm90IHlldCBkZWNvZGUgU2V0TGluZUNhcCIpOworICAgICAgICBpZiAoYXV0byBpdGVt
ID0gU2V0TGluZUNhcDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRp
c3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgU2V0TGluZURhc2giKTsK
KyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVEYXNoOjpkZWNvZGUoZGVjb2RlcikpCisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0
IGRlY29kZSBTZXRMaW5lSm9pbiIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZUpv
aW46OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0
OjpJdGVtOjpkZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgU2V0TWl0ZXJMaW1pdCIpOworICAgICAg
ICBpZiAoYXV0byBpdGVtID0gU2V0TWl0ZXJMaW1pdDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAg
ICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUgY2Fubm90IHlldCBkZWNv
ZGUgQ2xlYXJTaGFkb3ciKTsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyU2hhZG93Ojpk
ZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2Rl
IGNhbm5vdCB5ZXQgZGVjb2RlIENsaXAiKTsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXA6
OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpk
ZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgQ2xpcE91dCIpOworICAgICAgICBpZiAoYXV0byBpdGVt
ID0gQ2xpcE91dDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlz
cGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBDbGlwT3V0VG9QYXRoIik7
CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoZGVjb2Rlcikp
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUo
Kml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0
IGRlY29kZSBDbGlwUGF0aCIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcFBhdGg6OmRl
Y29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3R2x5cGhzOgogICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpk
ZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgRHJhd0dseXBocyIpOwpAQCAtMTk0MCwxMCArMjY0MSwx
MiBAQCBPcHRpb25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdl
OgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUgY2Fubm90
IHlldCBkZWNvZGUgRHJhd1RpbGVkSW1hZ2UiKTsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERy
YXdUaWxlZEltYWdlOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIFdURkxvZ0Fs
d2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBEcmF3VGls
ZWRTY2FsZWRJbWFnZSIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkU2NhbGVk
SW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICNpZiBVU0Uo
Q0cpIHx8IFVTRShDQUlSTykgfHwgVVNFKERJUkVDVDJEKQogICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdOYXRpdmVJbWFnZToKQEAgLTE5NTEsMzMgKzI2NTQsNDAgQEAgT3B0aW9uYWw8UmVmPEl0ZW0+
PiBJdGVtOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJE
aXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIERyYXdQYXR0ZXJuIik7
CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgogICAg
ICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1JlY3Q6OmRlY29kZShkZWNvZGVyKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIERy
YXdMaW5lIik7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3TGluZTo6ZGVjb2RlKGRlY29k
ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
c0ZvclRleHQ6Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29k
ZSBjYW5ub3QgeWV0IGRlY29kZSBEcmF3TGluZXNGb3JUZXh0Iik7CisgICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoK
LSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5
ZXQgZGVjb2RlIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIiKTsKKyAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZShkZWNvZGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAg
ICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5ZXQgZGVj
b2RlIERyYXdFbGxpcHNlIik7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3RWxsaXBzZTo6
ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdQYXRoOgogICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1BhdGg6OmRlY29kZShk
ZWNvZGVyKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6
ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIERyYXdGb2N1c1JpbmdQYXRoIik7CisgICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoK
LSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5
ZXQgZGVjb2RlIERyYXdGb2N1c1JpbmdSZWN0cyIpOworICAgICAgICBpZiAoYXV0byBpdGVtID0g
RHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CiAgICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBGaWxsUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQpAQCAtMTk5OSw0NCArMjcwOSw1NCBAQCBPcHRp
b25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
OgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUgY2Fubm90
IHlldCBkZWNvZGUgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUiKTsKKyAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBGaWxsUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQogICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICBXVEZMb2dB
bHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgRmlsbEVs
bGlwc2UiKTsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxFbGxpcHNlOjpkZWNvZGUoZGVj
b2RlcikpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
UmVjdDoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlIGNh
bm5vdCB5ZXQgZGVjb2RlIFN0cm9rZVJlY3QiKTsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0
cm9rZVJlY3Q6OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlM
aXN0OjpJdGVtOjpkZWNvZGUgY2Fubm90IHlldCBkZWNvZGUgU3Ryb2tlUGF0aCIpOworICAgICAg
ICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAgICAg
IFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29k
ZSBTdHJva2VFbGxpcHNlIik7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VFbGxpcHNl
OjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJSZWN0OgogICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xlYXJSZWN0OjpkZWNv
ZGUoZGVjb2RlcikpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlz
dDo6SXRlbTo6ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIi
KTsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29k
ZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpF
bmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJEaXNwbGF5TGlzdDo6
SXRlbTo6ZGVjb2RlIGNhbm5vdCB5ZXQgZGVjb2RlIEVuZFRyYW5zcGFyZW5jeUxheWVyIik7Cisg
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29k
ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogI2lmIFVTRShDRykKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxp
c3Q6Okl0ZW06OmRlY29kZSBjYW5ub3QgeWV0IGRlY29kZSBBcHBseVN0cm9rZVBhdHRlcm4iKTsK
KyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVjb2RlKGRlY29k
ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5Rmls
bFBhdHRlcm46Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiRGlzcGxheUxpc3Q6Okl0ZW06OmRlY29k
ZSBjYW5ub3QgeWV0IGRlY29kZSBBcHBseUZpbGxQYXR0ZXJuIik7CisgICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBBcHBseUZpbGxQYXR0ZXJuOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAg
ICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFj
dG9yOgotICAgICAgICBXVEZMb2dBbHdheXMoIkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUgY2Fu
bm90IHlldCBkZWNvZGUgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciIpOworICAgICAgICBpZiAoYXV0
byBpdGVtID0gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>