<?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>103864</bug_id>
          
          <creation_ts>2012-12-03 00:35:32 -0800</creation_ts>
          <short_desc>Coordinated Graphics: Move AreaAllocator and UpdateAtlas to CoordinatedGraphics</short_desc>
          <delta_ts>2012-12-05 13:58:23 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>102994</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jae Hyun Park">jaepark</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abecsi</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>781197</commentid>
    <comment_count>0</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-12-03 00:35:32 -0800</bug_when>
    <thetext>AreaAllocator and UpdateAtlas is only used for Coordinated Graphics. So, these must be moved to CoordinatedGraphics to clarify the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781200</commentid>
    <comment_count>1</comment_count>
      <attachid>177201</attachid>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-12-03 00:51:58 -0800</bug_when>
    <thetext>Created attachment 177201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782072</commentid>
    <comment_count>2</comment_count>
      <attachid>177201</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-03 17:37:57 -0800</bug_when>
    <thetext>Comment on attachment 177201
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.cpp:21
&gt; +

We need &quot;#if USE(COORDINATED_GRAPHICS)&quot; like UpdateAtlas.
Do we need to add Coordinated prefix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782237</commentid>
    <comment_count>3</comment_count>
      <attachid>177420</attachid>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-12-03 22:55:01 -0800</bug_when>
    <thetext>Created attachment 177420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782241</commentid>
    <comment_count>4</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-12-03 22:57:15 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 177201 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177201&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.cpp:21
&gt; &gt; +
&gt; 
&gt; We need &quot;#if USE(COORDINATED_GRAPHICS)&quot; like UpdateAtlas.

Fixed.

&gt; Do we need to add Coordinated prefix?

I&apos;m not sure about this. Any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782332</commentid>
    <comment_count>5</comment_count>
      <attachid>177420</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-04 00:43:02 -0800</bug_when>
    <thetext>Comment on attachment 177420
Patch

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

&gt; Source/WebKit2/ChangeLog:8
&gt; +        AreaAllocator and UpdateAtlas is only used for Coordinated Graphics.

are*

&gt; Source/WebKit2/ChangeLog:9
&gt; +        So, these must be moved to CoordinatedGraphics to clarify the code.

s/much/should

&gt; Source/WebKit2/ChangeLog:12
&gt; +

So why isn&apos;t something like the UpdateAtlas useful for something not using coordinated graphics? Is there a chance it will be moved back again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782349</commentid>
    <comment_count>6</comment_count>
      <attachid>177440</attachid>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-12-04 01:10:15 -0800</bug_when>
    <thetext>Created attachment 177440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782358</commentid>
    <comment_count>7</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2012-12-04 01:22:12 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 177420 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177420&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:8
&gt; &gt; +        AreaAllocator and UpdateAtlas is only used for Coordinated Graphics.
&gt; 
&gt; are*
Fixed.

&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:9
&gt; &gt; +        So, these must be moved to CoordinatedGraphics to clarify the code.
&gt; 
&gt; s/much/should
Fixed.

&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:12
&gt; &gt; +
&gt; 
&gt; So why isn&apos;t something like the UpdateAtlas useful for something not using coordinated graphics? Is there a chance it will be moved back again?

Thanks for the review!

First of all, UpdateAtlas is not used in any other codes other than Coordinated Graphics. So, it belongs to Coordinated Graphics.

Also, as far as I know, there aren&apos;t any plans on using UpdateAtlas other than Coordinated Graphics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784087</commentid>
    <comment_count>8</comment_count>
      <attachid>177440</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-05 13:58:18 -0800</bug_when>
    <thetext>Comment on attachment 177440
Patch

Clearing flags on attachment: 177440

Committed r136760: &lt;http://trac.webkit.org/changeset/136760&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784088</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-05 13:58:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177201</attachid>
            <date>2012-12-03 00:51:58 -0800</date>
            <delta_ts>2012-12-03 22:54:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103864-20121203005002.patch</filename>
            <type>text/plain</type>
            <size>51134</size>
            <attacher name="Jae Hyun Park">jaepark</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTgwMGUzMWQ0OTYwMzM1
ODAxNjc4MGVkNzUzYjdjZDhjNThlOTZlZi4uNTQzOWNiMjQ2NzQ4MjRlNjE0MTc4MzdlOTQxMTI5
YWM2ZDA1MjgyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTEyLTAzICBKYWUg
SHl1biBQYXJrICA8amFlLnBhcmtAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0
ZWQgR3JhcGhpY3M6IE1vdmUgQXJlYUFsbG9jYXRvciBhbmQgVXBkYXRlQXRsYXMgdG8gQ29vcmRp
bmF0ZWRHcmFwaGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQXJlYUFsbG9jYXRvciBhbmQgVXBkYXRlQXRsYXMgaXMgb25seSB1c2VkIGZvciBDb29y
ZGluYXRlZCBHcmFwaGljcy4KKyAgICAgICAgU28sIHRoZXNlIG11c3QgYmUgbW92ZWQgdG8gQ29v
cmRpbmF0ZWRHcmFwaGljcyB0byBjbGFyaWZ5IHRoZSBjb2RlLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OkFyZWFBbGxv
Y2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjp+QXJlYUFsbG9jYXRvcik6
CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZCk6CisgICAgICAgIChXZWJL
aXQ6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9j
YXRvcjo6cmVsZWFzZSk6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6Om92ZXJoZWFk
KToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVhQWxsb2NhdG9y
KToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5lcmFsQXJlYUFs
bG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBhbmQpOgorICAg
ICAgICAoV2ViS2l0OjpmaXRzV2l0aGluKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0
b3I6OmFsbG9jYXRlRnJvbU5vZGUpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9j
YXRvcjo6c3BsaXROb2RlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6
OnVwZGF0ZUxhcmdlc3RGcmVlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0
b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3Zl
cmhlYWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0FyZWFBbGxvY2F0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9BcmVhQWxsb2NhdG9yLmguCisgICAgICAgIChXZWJDb3JlOjpuZXh0UG93ZXJPZlR3
byk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChBcmVh
QWxsb2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6c2l6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6Om1pbmltdW1BbGxvY2F0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6c2V0TWluaW11bUFsbG9jYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpBcmVhQWxsb2NhdG9yOjptYXJnaW4pOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxs
b2NhdG9yOjpzZXRNYXJnaW4pOgorICAgICAgICAoR2VuZXJhbEFyZWFBbGxvY2F0b3IpOgorICAg
ICAgICAoTm9kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvVXBkYXRlQXRsYXMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OlVw
ZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6
YnVpbGRMYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpkaWRT
d2FwQnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5n
T25BdmFpbGFibGVCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFVwZGF0ZUF0bGFzQ2xpZW50KToKKyAgICAgICAgKFVw
ZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OnNpemUpOgorICAgICAg
ICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6ZmxhZ3MpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVB
dGxhczo6YWRkVGltZUluYWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6Omlz
SW5hY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6aXNJblVzZSk6CisKIDIw
MTItMTItMDIgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAg
ICAgICAgUkVHUkVTU0lPTihyMTM0Mzc2KTogQVNTRVJUKCFtX21haW5CYWNraW5nU3RvcmUpIGhp
dHMgaW4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKCkuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NN
YWtlTGlzdHMudHh0CmluZGV4IDAwMzM5NmE2NTdmZDQ1YjhiZTJjODI1MGUwOTJjZTJkM2Y2ZmQy
MjAuLjU5OTRhMmEzNWNiOWM1MzA5N2FhNDk5YjYzODA0OGQ5NDc2N2ZiZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CkBAIC00ODEsMTEgKzQ4MSw5IEBAIFNFVChXZWJLaXQyX1NPVVJDRVMKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKIAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxs
b2NhdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBk
YXRlQXRsYXMuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC00OTUsMTAgKzQ5MywxMiBAQCBTRVQo
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAorICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKyAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKICkKIAogU0VU
KFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDA5OGI1Yjk1NDNmNWZk
ZmI5YjhhOTMxYTEyODI3OTFlNmE5NzU2OTEuLjcwMjI5YzQ5ZTc0NmI0ZjYyNWRlNWJjNTZkZGRi
MWRlMTY5YjFkYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzYzLDE4ICszNjMsMTggQEAgSEVBREVSUyAr
PSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWFyY2hQb3B1cE1lbnUuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJWaWJyYXRpb25DbGllbnQuaCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmggXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmggXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWFJbXBsLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
aCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmggXAorICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oIFwKKyAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5oIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0
bGFzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
Ykluc3BlY3Rvci5oIFwKQEAgLTc0NCwyMSArNzQ0LDIxIEBAIFNPVVJDRVMgKz0gXAogICAgIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcCBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJQb3B1cE1lbnVRdC5jcHAgXAot
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0RlY29kZXJBZGFwdGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRlci5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZFRpbGUuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3Zlcmxh
eS5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJGcmFtZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0FyZWFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FyZWFBbGxvY2F0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDJl
ZmViNWYxYWVmYTdlN2FmMjI1MTc0MWVmNjdiMTQxMWI1NzNjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9BcmVhQWxsb2NhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLUFyZWFBbGxvY2F0b3I6OkFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2l6ZSkKLSAgICA6IG1fc2l6ZShzaXplKQotICAgICwgbV9taW5BbGxvYygxLCAxKQotICAgICwg
bV9tYXJnaW4oMCwgMCkKLXsKLX0KLQotQXJlYUFsbG9jYXRvcjo6fkFyZWFBbGxvY2F0b3IoKQot
ewotfQotCi12b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplKQotewotICAgIG1fc2l6ZSA9IG1fc2l6ZS5leHBhbmRlZFRvKHNpemUpOwotfQotCi12
b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUp
Ci17Ci0gICAgbV9zaXplICs9IHNpemU7Ci19Ci0KLXZvaWQgQXJlYUFsbG9jYXRvcjo6cmVsZWFz
ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKLXsKLX0KLQotaW50IEFyZWFBbGxvY2F0b3I6Om92
ZXJoZWFkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBB
cmVhQWxsb2NhdG9yOjpyb3VuZEFsbG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSkgY29uc3QKLXsKLSAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCkgKyBtX21hcmdpbi53aWR0
aCgpOwotICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpICsgbV9tYXJnaW4uaGVpZ2h0KCk7
Ci0gICAgaW50IGV4dHJhID0gd2lkdGggJSBtX21pbkFsbG9jLndpZHRoKCk7Ci0gICAgaWYgKGV4
dHJhKQotICAgICAgICB3aWR0aCArPSBtX21pbkFsbG9jLndpZHRoKCkgLSBleHRyYTsKLSAgICBl
eHRyYSA9IGhlaWdodCAlIG1fbWluQWxsb2MuaGVpZ2h0KCk7Ci0gICAgaWYgKGV4dHJhKQotICAg
ICAgICBoZWlnaHQgKz0gbV9taW5BbGxvYy5oZWlnaHQoKSAtIGV4dHJhOwotCi0gICAgcmV0dXJu
IFdlYkNvcmU6OkludFNpemUod2lkdGgsIGhlaWdodCk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2Nh
dG9yOjpHZW5lcmFsQXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQot
ICAgIDogQXJlYUFsbG9jYXRvcihXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhzaXplKSkKLXsKLSAg
ICBtX3Jvb3QgPSBuZXcgTm9kZSgpOwotICAgIG1fcm9vdC0+cmVjdCA9IFdlYkNvcmU6OkludFJl
Y3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9yb290LT5s
YXJnZXN0RnJlZSA9IG1fc2l6ZTsKLSAgICBtX3Jvb3QtPnBhcmVudCA9IDA7Ci0gICAgbV9yb290
LT5sZWZ0ID0gMDsKLSAgICBtX3Jvb3QtPnJpZ2h0ID0gMDsKLSAgICBtX25vZGVDb3VudCA9IDE7
Ci0gICAgc2V0TWluaW11bUFsbG9jYXRpb24oV2ViQ29yZTo6SW50U2l6ZSg4LCA4KSk7Ci19Ci0K
LUdlbmVyYWxBcmVhQWxsb2NhdG9yOjp+R2VuZXJhbEFyZWFBbGxvY2F0b3IoKQotewotICAgIGZy
ZWVOb2RlKG1fcm9vdCk7Ci19Ci0KLXZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmZyZWVOb2Rl
KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKG5vZGUpIHsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+
bGVmdCk7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsKLSAgICB9Ci0gICAgZGVsZXRl
IG5vZGU7Ci19Ci0KLXZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmV4cGFuZChjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIEFyZWFBbGxvY2F0b3I6OmV4cGFuZChXZWJDb3Jl
OjpuZXh0UG93ZXJPZlR3byhzaXplKSk7Ci0KLSAgICBpZiAobV9yb290LT5yZWN0LnNpemUoKSA9
PSBtX3NpemUpCi0gICAgICAgIHJldHVybjsgLy8gTm8gY2hhbmdlLgotCi0gICAgaWYgKCFtX3Jv
b3QtPmxlZnQgJiYgbV9yb290LT5sYXJnZXN0RnJlZS53aWR0aCgpID4gMCkgewotICAgICAgICAv
LyBObyBhbGxvY2F0aW9ucyBoYXZlIG9jY3VycmVkLCBzbyBqdXN0IGFkanVzdCB0aGUgcm9vdCBz
aXplLgotICAgICAgICBtX3Jvb3QtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX3Jvb3QtPmxhcmdlc3RGcmVl
ID0gbV9zaXplOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWRkIGV4dHJhIG5v
ZGVzIGFib3ZlIHRoZSBjdXJyZW50IHJvb3QgdG8gZXhwYW5kIHRoZSB0cmVlLgotICAgIE5vZGUq
IG9sZFJvb3QgPSBtX3Jvb3Q7Ci0gICAgU3BsaXQgc3BsaXQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0
aCgpID49IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICBl
bHNlCi0gICAgICAgIHNwbGl0ID0gU3BsaXRPblk7Ci0KLSAgICB3aGlsZSAobV9yb290LT5yZWN0
LnNpemUoKSAhPSBtX3NpemUpIHsKLSAgICAgICAgaWYgKG1fcm9vdC0+cmVjdC53aWR0aCgpID09
IG1fc2l6ZS53aWR0aCgpKQotICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAg
ZWxzZSBpZiAobV9yb290LT5yZWN0LmhlaWdodCgpID09IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgICAgIHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgICAgIE5vZGUqIHBhcmVudCA9IG5ldyBOb2Rl
KCk7Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKLSAgICAgICAgbV9ub2RlQ291
bnQgKz0gMjsKLSAgICAgICAgbV9yb290LT5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgIHBhcmVu
dC0+cGFyZW50ID0gMDsKLSAgICAgICAgcGFyZW50LT5sZWZ0ID0gbV9yb290OwotICAgICAgICBw
YXJlbnQtPnJpZ2h0ID0gcmlnaHQ7Ci0gICAgICAgIHBhcmVudC0+bGFyZ2VzdEZyZWUgPSBtX3Jv
b3QtPnJlY3Quc2l6ZSgpOwotICAgICAgICByaWdodC0+cGFyZW50ID0gcGFyZW50OwotICAgICAg
ICByaWdodC0+bGVmdCA9IDA7Ci0gICAgICAgIHJpZ2h0LT5yaWdodCA9IDA7Ci0gICAgICAgIHJp
Z2h0LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7Ci0gICAgICAgIGlmIChzcGxp
dCA9PSBTcGxpdE9uWCkgewotICAgICAgICAgICAgcGFyZW50LT5yZWN0ID0gV2ViQ29yZTo6SW50
UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSAqIDIsIG1f
cm9vdC0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6
OkludFJlY3QobV9yb290LT5yZWN0LngoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3Qt
PnJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
cm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcGFyZW50LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3Qt
PnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdo
dCgpICogMik7Ci0gICAgICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9y
b290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53
aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHNwbGl0
ID0gKHNwbGl0ID09IFNwbGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7Ci0gICAgICAgIG1f
cm9vdCA9IHBhcmVudDsKLSAgICB9Ci0gICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUxLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplMikKLXsKLSAgICByZXR1cm4gc2l6
ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNpemUyLmhl
aWdodCgpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxv
Y2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIFdlYkNvcmU6OkludFNp
emUgcm91bmRlZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKLSAgICByb3VuZGVkID0gV2ViQ29y
ZTo6bmV4dFBvd2VyT2ZUd28ocm91bmRlZCk7Ci0gICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAw
IHx8IHJvdW5kZWQud2lkdGgoKSA+IG1fc2l6ZS53aWR0aCgpCi0gICAgICAgIHx8IHJvdW5kZWQu
aGVpZ2h0KCkgPD0gMCB8fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgpKQotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdCgpOwotCi0gICAgV2ViQ29yZTo6SW50UG9pbnQg
cG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHJvdW5kZWQsIG1fcm9vdCk7Ci0gICAgaWYgKHBvaW50
LngoKSA+PSAwKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdChwb2ludCwgc2l6ZSk7
Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QoKTsKLX0KLQotV2ViQ29yZTo6SW50UG9pbnQg
R2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZSwgTm9kZSogbm9kZSkKLXsKLSAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8g
aW5zZXJ0IGludG8sIHdoaWNoIHNob3VsZCBiZQotICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFz
dCBhbW91bnQgb2YgdW51c2VkIHNwYWNlIHRoYXQgaXMKLSAgICAvLyBiaWcgZW5vdWdoIHRvIGNv
bnRhaW4gdGhlIHJlcXVlc3RlZCBzaXplLgotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIC8v
IEdvIGRvd24gYSBsZXZlbCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0Ci0gICAg
ICAgIC8vIHN1Yi10cmVlIGNvbnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgot
ICAgICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+bGVmdDsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBu
b2RlLT5yaWdodDsKLSAgICAgICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5s
YXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUs
IHJpZ2h0LT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2Vz
dEZyZWUud2lkdGgoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCi0gICAgICAgICAgICAg
ICAgICAgIHx8IGxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVl
LmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1
ZXMgbWF5IGJlIGEgbGl0dGxlIG92ZXJzaXplZCwKLSAgICAgICAgICAgICAgICAgICAgLy8gc28g
dHJ5IHRoZSBsZWZ0IHN1Yi10cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KLSAgICAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2Rl
KHNpemUsIGxlZnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnQ7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIHJpZ2h0KTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgbm9kZSA9IGxlZnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0
c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKQotICAgICAgICAgICAgbm9kZSA9IHJp
Z2h0OwotICAgICAgICBlbHNlIGlmIChsZWZ0IHx8IHJpZ2h0KSB7Ci0gICAgICAgICAgICAvLyBO
ZWl0aGVyIHN1Yi1ub2RlIGhhcyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KLSAgICAg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwotICAgICAgICB9IGVsc2Ug
aWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAv
LyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRoaXMgbm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPwotICAg
ICAgICAgICAgU3BsaXQgc3BsaXQ7Ci0gICAgICAgICAgICBpZiAoZml0c1dpdGhpbihXZWJDb3Jl
OjpJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFy
Z2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlv
bjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCi0gICAgICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBu
b2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRyeSB0byBiYWxhbmNlCi0gICAgICAgICAgICAgICAg
Ly8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMgZnVydGhlciBzdWJkaXZpc2lvbnMgaGFwcGVuLgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgJiYg
bm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LngoKSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0
LngoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0g
U3BsaXRPblk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0aCgpID49
IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRP
blg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNw
bGl0T25ZOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNp
emUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSksIG5vZGUtPmxhcmdlc3RGcmVlKSkg
ewotICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBYIGRpcmVjdGlvbi4KLSAgICAg
ICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRz
V2l0aGluKFdlYkNvcmU6OkludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICogMiks
IG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRo
ZSBZIGRpcmVjdGlvbi4KLSAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhlciAt
IGFsbG9jYXRlIHRoaXMgbm9kZS4KLSAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9
IFdlYkNvcmU6OkludFNpemUoMCwgMCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZy
ZWUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28g
YXJvdW5kIGFnYWluIHVzaW5nIHRoZSBsZWZ0IHN1Yi10cmVlLgotICAgICAgICAgICAgbm9kZSA9
IHNwbGl0Tm9kZShub2RlLCBzcGxpdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBDYW5ub3QgcG9zc2libHkgZml0IGludG8gdGhpcyBub2RlLgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KC0xLCAtMSk7
Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6
c3BsaXROb2RlCi0gICAgKE5vZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQotewotICAgIE5vZGUqIGxl
ZnQgPSBuZXcgTm9kZSgpOwotICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKLSAgICBtX25v
ZGVDb3VudCArPSAyOwotICAgIGxlZnQtPnBhcmVudCA9IG5vZGU7Ci0gICAgbGVmdC0+bGVmdCA9
IDA7Ci0gICAgbGVmdC0+cmlnaHQgPSAwOwotICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOwotICAg
IHJpZ2h0LT5sZWZ0ID0gMDsKLSAgICByaWdodC0+cmlnaHQgPSAwOwotICAgIG5vZGUtPmxlZnQg
PSBsZWZ0OwotICAgIG5vZGUtPnJpZ2h0ID0gcmlnaHQ7Ci0KLSAgICBpZiAoc3BsaXQgPT0gU3Bs
aXRPblgpIHsKLSAgICAgICAgbGVmdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVj
dC54KCksIG5vZGUtPnJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgpKTsKLSAgICAg
ICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KGxlZnQtPnJlY3QubWF4WCgpLCBub2Rl
LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVpZ2h0KCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGxlZnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2Rl
LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7Ci0gICAgICAgIHJpZ2h0LT5y
ZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwgbGVmdC0+cmVjdC5tYXhZKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRo
KCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0KLSAgICBsZWZ0LT5sYXJnZXN0
RnJlZSA9IGxlZnQtPnJlY3Quc2l6ZSgpOwotICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IHJpZ2h0
LT5yZWN0LnNpemUoKTsKLSAgICBub2RlLT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5sYXJnZXN0RnJl
ZTsKLSAgICByZXR1cm4gbGVmdDsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6dXBk
YXRlTGFyZ2VzdEZyZWUoTm9kZSogbm9kZSkKLXsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5w
YXJlbnQpKSB7Ci0gICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gV2ViQ29yZTo6SW50U2l6ZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFy
Z2VzdEZyZWUud2lkdGgoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0
RnJlZS5oZWlnaHQoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgfQotfQotCi12b2lkIEdlbmVyYWxBcmVhQWxs
b2NhdG9yOjpyZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8g
TG9jYXRlIHRoZSBub2RlIHRoYXQgY29udGFpbnMgdGhlIGFsbG9jYXRlZCByZWdpb24uCi0gICAg
Tm9kZSogbm9kZSA9IG1fcm9vdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IHJlY3Qu
bG9jYXRpb24oKTsKLSAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBpZiAobm9kZS0+bGVmdCAm
JiBub2RlLT5sZWZ0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT5sZWZ0OwotICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdodCAmJiBub2RlLT5yaWdodC0+
cmVjdC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7Ci0g
ICAgICAgIGVsc2UgaWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9pbnQpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybjsgLy8gUG9pbnQgaXMgY29t
cGxldGVseSBvdXRzaWRlIHRoZSB0cmVlLgotICAgIH0KLSAgICBpZiAoIW5vZGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIE1hcmsgdGhlIG5vZGUgYXMgZnJlZSBhbmQgdGhlbiB3b3JrIHVw
d2FyZHMgdGhyb3VnaCB0aGUgdHJlZQotICAgIC8vIHJlY29tYmluaW5nIGFuZCBkZWxldGluZyBu
b2RlcyB1bnRpbCB3ZSByZWFjaCBhIHNpYmxpbmcKLSAgICAvLyB0aGF0IGlzIHN0aWxsIGFsbG9j
YXRlZC4KLSAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOwotICAgIHdo
aWxlIChub2RlLT5wYXJlbnQpIHsKLSAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdCA9PSBu
b2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5yaWdodC0+bGFyZ2VzdEZyZWUg
IT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC5zaXplKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0
LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3Quc2l6ZSgpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnQ7
Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOwotICAgICAgICBmcmVlTm9kZShub2RlLT5y
aWdodCk7Ci0gICAgICAgIG1fbm9kZUNvdW50IC09IDI7Ci0gICAgICAgIG5vZGUtPmxlZnQgPSAw
OwotICAgICAgICBub2RlLT5yaWdodCA9IDA7Ci0gICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0g
bm9kZS0+cmVjdC5zaXplKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSB0aGUgcmVzdCBvZiBvdXIg
YW5jZXN0b3JzIGhhdmUgdGhlIGNvcnJlY3QgImxhcmdlc3QgZnJlZSBzaXplIi4KLSAgICB1cGRh
dGVMYXJnZXN0RnJlZShub2RlKTsKLX0KLQotaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVy
aGVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZUNvdW50ICogc2l6ZW9mKE5vZGUpOwot
fQotCi19IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0FyZWFBbGxvY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9BcmVhQWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlODg3
MTZjODZkMWMxYTEzYWRiZGI0ZWE5M2E0NzgxZWVkMzUzOWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FyZWFBbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgQXJlYUFsbG9j
YXRvcl9oCi0jZGVmaW5lIEFyZWFBbGxvY2F0b3JfaAotCi0jaW5jbHVkZSA8SW50UG9pbnQuaD4K
LSNpbmNsdWRlIDxJbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8SW50U2l6ZS5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1pbmxpbmUgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIpCi17Ci0gICAg
Ly8gVGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0IG5leHRQb3dlck9mVHdvIGZvciBhbiBpbnRl
Z2VyLgotICAgIC0tbnVtYmVyOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTsKLSAgICBudW1i
ZXIgfD0gbnVtYmVyID4+IDI7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA0OwotICAgIG51bWJl
ciB8PSBudW1iZXIgPj4gODsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE2OwotICAgIG51bWJl
cisrOwotICAgIHJldHVybiBudW1iZXI7Ci19Ci0KLWlubGluZSBJbnRTaXplIG5leHRQb3dlck9m
VHdvKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJuIEludFNpemUobmV4dFBvd2Vy
T2ZUd28oc2l6ZS53aWR0aCgpKSwgbmV4dFBvd2VyT2ZUd28oc2l6ZS5oZWlnaHQoKSkpOwotfQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQXJl
YUFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgQXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7Ci0gICAgdmlydHVhbCB+QXJlYUFsbG9jYXRvcigpOwotCi0gICAgV2ViQ29yZTo6
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBXZWJDb3JlOjpJ
bnRTaXplIG1pbmltdW1BbGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9taW5BbGxvYzsgfQot
ICAgIHZvaWQgc2V0TWluaW11bUFsbG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSkgeyBtX21pbkFsbG9jID0gc2l6ZTsgfQotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtYXJnaW4o
KSBjb25zdCB7IHJldHVybiBtX21hcmdpbjsgfQotICAgIHZvaWQgc2V0TWFyZ2luKGNvbnN0IFdl
YkNvcmU6OkludFNpemUgJm1hcmdpbikgeyBtX21hcmdpbiA9IG1hcmdpbjsgfQotCi0gICAgdmly
dHVhbCB2b2lkIGV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCBleHBh
bmRCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3QgYWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGlu
dCBvdmVyaGVhZCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBt
X3NpemU7Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX21pbkFsbG9jOwotICAgIFdlYkNvcmU6Oklu
dFNpemUgbV9tYXJnaW47Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kQWxsb2NhdGlvbihj
b25zdCBXZWJDb3JlOjpJbnRTaXplJikgY29uc3Q7Ci19OwotCi1jbGFzcyBHZW5lcmFsQXJlYUFs
bG9jYXRvciA6IHB1YmxpYyBBcmVhQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBHZW5lcmFsQXJl
YUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVhbCB+R2VuZXJh
bEFyZWFBbGxvY2F0b3IoKTsKLQotICAgIHZvaWQgZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKLSAgICB2b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIGlu
dCBvdmVyaGVhZCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gU3BsaXQgeyBTcGxpdE9u
WCwgU3BsaXRPblkgfTsKLQotICAgIHN0cnVjdCBOb2RlIHsKLSAgICAgICAgV2ViQ29yZTo6SW50
UmVjdCByZWN0OwotICAgICAgICBXZWJDb3JlOjpJbnRTaXplIGxhcmdlc3RGcmVlOwotICAgICAg
ICBOb2RlKiBwYXJlbnQ7Ci0gICAgICAgIE5vZGUqIGxlZnQ7Ci0gICAgICAgIE5vZGUqIHJpZ2h0
OwotICAgIH07Ci0KLSAgICBOb2RlKiBtX3Jvb3Q7Ci0gICAgaW50IG1fbm9kZUNvdW50OwotCi0g
ICAgc3RhdGljIHZvaWQgZnJlZU5vZGUoTm9kZSopOwotICAgIFdlYkNvcmU6OkludFBvaW50IGFs
bG9jYXRlRnJvbU5vZGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIE5vZGUqKTsKLSAgICBOb2Rl
KiBzcGxpdE5vZGUoTm9kZSosIFNwbGl0KTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVMYXJnZXN0
RnJlZShOb2RlKik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9BcmVhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NjA1
ZGRkZGMzOWIyNGFiODhlZjFiYTRlMmY3NDk1YWYwMTdjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVh
QWxsb2NhdG9yLmNwcApAQCAtMCwwICsxLDMzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJBcmVh
QWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitBcmVhQWxsb2NhdG9yOjpBcmVh
QWxsb2NhdG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCisgICAgOiBtX3NpemUoc2l6
ZSkKKyAgICAsIG1fbWluQWxsb2MoMSwgMSkKKyAgICAsIG1fbWFyZ2luKDAsIDApCit7Cit9CisK
K0FyZWFBbGxvY2F0b3I6On5BcmVhQWxsb2NhdG9yKCkKK3sKK30KKwordm9pZCBBcmVhQWxsb2Nh
dG9yOjpleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUg
PSBtX3NpemUuZXhwYW5kZWRUbyhzaXplKTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpleHBh
bmRCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZSArPSBzaXpl
OworfQorCit2b2lkIEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpCit7Cit9CisKK2ludCBBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKK1dlYkNvcmU6OkludFNpemUgQXJlYUFsbG9jYXRvcjo6cm91bmRBbGxv
Y2F0aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaW50IHdp
ZHRoID0gc2l6ZS53aWR0aCgpICsgbV9tYXJnaW4ud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0g
c2l6ZS5oZWlnaHQoKSArIG1fbWFyZ2luLmhlaWdodCgpOworICAgIGludCBleHRyYSA9IHdpZHRo
ICUgbV9taW5BbGxvYy53aWR0aCgpOworICAgIGlmIChleHRyYSkKKyAgICAgICAgd2lkdGggKz0g
bV9taW5BbGxvYy53aWR0aCgpIC0gZXh0cmE7CisgICAgZXh0cmEgPSBoZWlnaHQgJSBtX21pbkFs
bG9jLmhlaWdodCgpOworICAgIGlmIChleHRyYSkKKyAgICAgICAgaGVpZ2h0ICs9IG1fbWluQWxs
b2MuaGVpZ2h0KCkgLSBleHRyYTsKKworICAgIHJldHVybiBXZWJDb3JlOjpJbnRTaXplKHdpZHRo
LCBoZWlnaHQpOworfQorCitHZW5lcmFsQXJlYUFsbG9jYXRvcjo6R2VuZXJhbEFyZWFBbGxvY2F0
b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKKyAgICA6IEFyZWFBbGxvY2F0b3IoV2Vi
Q29yZTo6bmV4dFBvd2VyT2ZUd28oc2l6ZSkpCit7CisgICAgbV9yb290ID0gbmV3IE5vZGUoKTsK
KyAgICBtX3Jvb3QtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCkpOworICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7Cisg
ICAgbV9yb290LT5wYXJlbnQgPSAwOworICAgIG1fcm9vdC0+bGVmdCA9IDA7CisgICAgbV9yb290
LT5yaWdodCA9IDA7CisgICAgbV9ub2RlQ291bnQgPSAxOworICAgIHNldE1pbmltdW1BbGxvY2F0
aW9uKFdlYkNvcmU6OkludFNpemUoOCwgOCkpOworfQorCitHZW5lcmFsQXJlYUFsbG9jYXRvcjo6
fkdlbmVyYWxBcmVhQWxsb2NhdG9yKCkKK3sKKyAgICBmcmVlTm9kZShtX3Jvb3QpOworfQorCit2
b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9kZShOb2RlKiBub2RlKQoreworICAgIGlm
IChub2RlKSB7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOworICAgICAgICBmcmVlTm9k
ZShub2RlLT5yaWdodCk7CisgICAgfQorICAgIGRlbGV0ZSBub2RlOworfQorCit2b2lkIEdlbmVy
YWxBcmVhQWxsb2NhdG9yOjpleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBBcmVhQWxsb2NhdG9yOjpleHBhbmQoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28oc2l6ZSkp
OworCisgICAgaWYgKG1fcm9vdC0+cmVjdC5zaXplKCkgPT0gbV9zaXplKQorICAgICAgICByZXR1
cm47IC8vIE5vIGNoYW5nZS4KKworICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1fcm9vdC0+bGFy
Z2VzdEZyZWUud2lkdGgoKSA+IDApIHsKKyAgICAgICAgLy8gTm8gYWxsb2NhdGlvbnMgaGF2ZSBv
Y2N1cnJlZCwgc28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KKyAgICAgICAgbV9yb290LT5y
ZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEFkZCBleHRyYSBub2RlcyBhYm92ZSB0aGUgY3VycmVudCBy
b290IHRvIGV4cGFuZCB0aGUgdHJlZS4KKyAgICBOb2RlKiBvbGRSb290ID0gbV9yb290OworICAg
IFNwbGl0IHNwbGl0OworICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3NpemUuaGVpZ2h0KCkp
CisgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgZWxzZQorICAgICAgICBzcGxpdCA9IFNw
bGl0T25ZOworCisgICAgd2hpbGUgKG1fcm9vdC0+cmVjdC5zaXplKCkgIT0gbV9zaXplKSB7Cisg
ICAgICAgIGlmIChtX3Jvb3QtPnJlY3Qud2lkdGgoKSA9PSBtX3NpemUud2lkdGgoKSkKKyAgICAg
ICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgIGVsc2UgaWYgKG1fcm9vdC0+cmVjdC5o
ZWlnaHQoKSA9PSBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25Y
OworICAgICAgICBOb2RlKiBwYXJlbnQgPSBuZXcgTm9kZSgpOworICAgICAgICBOb2RlKiByaWdo
dCA9IG5ldyBOb2RlKCk7CisgICAgICAgIG1fbm9kZUNvdW50ICs9IDI7CisgICAgICAgIG1fcm9v
dC0+cGFyZW50ID0gcGFyZW50OworICAgICAgICBwYXJlbnQtPnBhcmVudCA9IDA7CisgICAgICAg
IHBhcmVudC0+bGVmdCA9IG1fcm9vdDsKKyAgICAgICAgcGFyZW50LT5yaWdodCA9IHJpZ2h0Owor
ICAgICAgICBwYXJlbnQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKKyAgICAg
ICAgcmlnaHQtPnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgcmlnaHQtPmxlZnQgPSAwOworICAg
ICAgICByaWdodC0+cmlnaHQgPSAwOworICAgICAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSBtX3Jv
b3QtPnJlY3Quc2l6ZSgpOworICAgICAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKKyAgICAg
ICAgICAgIHBhcmVudC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwg
bV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSAq
IDIsIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9IFdl
YkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBt
X3Jvb3QtPnJlY3QueSgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBt
X3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFy
ZW50LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJl
Y3QueSgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJl
Y3QuaGVpZ2h0KCkgKiAyKTsKKyAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50
UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpICsgbV9yb290LT5yZWN0Lndp
ZHRoKCksCisgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVj
dC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3BsaXQgPSAoc3BsaXQgPT0gU3BsaXRP
blggPyBTcGxpdE9uWSA6IFNwbGl0T25YKTsKKyAgICAgICAgbV9yb290ID0gcGFyZW50OworICAg
IH0KKyAgICB1cGRhdGVMYXJnZXN0RnJlZShvbGRSb290KTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIGZpdHNXaXRoaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZTEsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNpemUyKQoreworICAgIHJldHVybiBzaXplMS53aWR0aCgpIDw9IHNpemUy
LndpZHRoKCkgJiYgc2l6ZTEuaGVpZ2h0KCkgPD0gc2l6ZTIuaGVpZ2h0KCk7Cit9CisKK1dlYkNv
cmU6OkludFJlY3QgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUpCit7CisgICAgV2ViQ29yZTo6SW50U2l6ZSByb3VuZGVkID0gcm91bmRB
bGxvY2F0aW9uKHNpemUpOworICAgIHJvdW5kZWQgPSBXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhy
b3VuZGVkKTsKKyAgICBpZiAocm91bmRlZC53aWR0aCgpIDw9IDAgfHwgcm91bmRlZC53aWR0aCgp
ID4gbV9zaXplLndpZHRoKCkKKyAgICAgICAgfHwgcm91bmRlZC5oZWlnaHQoKSA8PSAwIHx8IHJv
dW5kZWQuaGVpZ2h0KCkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpJbnRSZWN0KCk7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJv
bU5vZGUocm91bmRlZCwgbV9yb290KTsKKyAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KHBvaW50LCBzaXplKTsKKyAgICByZXR1cm4gV2ViQ29y
ZTo6SW50UmVjdCgpOworfQorCitXZWJDb3JlOjpJbnRQb2ludCBHZW5lcmFsQXJlYUFsbG9jYXRv
cjo6YWxsb2NhdGVGcm9tTm9kZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBOb2RlKiBu
b2RlKQoreworICAgIC8vIEZpbmQgdGhlIGJlc3Qgbm9kZSB0byBpbnNlcnQgaW50bywgd2hpY2gg
c2hvdWxkIGJlCisgICAgLy8gYSBub2RlIHdpdGggdGhlIGxlYXN0IGFtb3VudCBvZiB1bnVzZWQg
c3BhY2UgdGhhdCBpcworICAgIC8vIGJpZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgcmVxdWVzdGVk
IHNpemUuCisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgLy8gR28gZG93biBhIGxldmVsIGFu
ZCBkZXRlcm1pbmUgaWYgdGhlIGxlZnQgb3IgcmlnaHQKKyAgICAgICAgLy8gc3ViLXRyZWUgY29u
dGFpbnMgdGhlIGJlc3QgY2hhbmNlIG9mIGFsbG9jYXRpb24uCisgICAgICAgIE5vZGUqIGxlZnQg
PSBub2RlLT5sZWZ0OworICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPnJpZ2h0OworICAgICAg
ICBpZiAobGVmdCAmJiBmaXRzV2l0aGluKHNpemUsIGxlZnQtPmxhcmdlc3RGcmVlKSkgeworICAg
ICAgICAgICAgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxhcmdlc3RGcmVl
KSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5sYXJnZXN0RnJlZS53aWR0aCgpIDwgcmln
aHQtPmxhcmdlc3RGcmVlLndpZHRoKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgbGVmdC0+bGFy
Z2VzdEZyZWUuaGVpZ2h0KCkgPCByaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIGxhcmdlc3RGcmVlIHZhbHVlcyBtYXkgYmUgYSBsaXR0bGUg
b3ZlcnNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBzbyB0cnkgdGhlIGxlZnQgc3ViLXRy
ZWUgYW5kIHRoZW4gdGhlIHJpZ2h0IHN1Yi10cmVlLgorICAgICAgICAgICAgICAgICAgICBXZWJD
b3JlOjpJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJvbU5vZGUoc2l6ZSwgbGVmdCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlRnJv
bU5vZGUoc2l6ZSwgcmlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBu
b2RlID0gcmlnaHQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBub2RlID0g
bGVmdDsKKyAgICAgICAgfSBlbHNlIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0
LT5sYXJnZXN0RnJlZSkpCisgICAgICAgICAgICBub2RlID0gcmlnaHQ7CisgICAgICAgIGVsc2Ug
aWYgKGxlZnQgfHwgcmlnaHQpIHsKKyAgICAgICAgICAgIC8vIE5laXRoZXIgc3ViLW5vZGUgaGFz
IGVub3VnaCBzcGFjZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgICAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkludFBvaW50KC0xLCAtMSk7CisgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihzaXpl
LCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgIC8vIERvIHdlIG5lZWQgdG8gc3Bs
aXQgdGhpcyBub2RlIGludG8gc21hbGxlciBwaWVjZXM/CisgICAgICAgICAgICBTcGxpdCBzcGxp
dDsKKyAgICAgICAgICAgIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNpemUoc2l6ZS53aWR0
aCgpICogMiwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBTcGxpdCBpbiBlaXRoZXIgZGlyZWN0aW9uOiBjaG9vc2UgdGhlIGludmVy
c2Ugb2YKKyAgICAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IG5vZGUncyBzcGxpdCBkaXJlY3Rp
b24gdG8gdHJ5IHRvIGJhbGFuY2UKKyAgICAgICAgICAgICAgICAvLyBvdXQgdGhlIHdhc3RlZCBz
cGFjZSBhcyBmdXJ0aGVyIHN1YmRpdmlzaW9ucyBoYXBwZW4uCisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnBhcmVudAorICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5wYXJlbnQtPmxlZnQt
PnJlY3QueCgpID09IG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3QueCgpKQorICAgICAgICAgICAg
ICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUt
PnBhcmVudCkKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5yZWN0LndpZHRoKCkgPj0gbm9kZS0+cmVjdC5oZWlnaHQo
KSkKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6ZShzaXplLndpZHRoKCkgKiAy
LCBzaXplLmhlaWdodCgpKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAg
Ly8gU3BsaXQgYWxvbmcgdGhlIFggZGlyZWN0aW9uLgorICAgICAgICAgICAgICAgIHNwbGl0ID0g
U3BsaXRPblg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50
U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUp
KSB7CisgICAgICAgICAgICAgICAgLy8gU3BsaXQgYWxvbmcgdGhlIFkgZGlyZWN0aW9uLgorICAg
ICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIENhbm5vdCBzcGxpdCBmdXJ0aGVyIC0gYWxsb2NhdGUgdGhpcyBub2Rl
LgorICAgICAgICAgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gV2ViQ29yZTo6SW50U2l6ZSgw
LCAwKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVMYXJnZXN0RnJlZShub2RlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZS0+cmVjdC5sb2NhdGlvbigpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBTcGxpdCB0aGUgbm9kZSwgdGhlbiBnbyBhcm91bmQgYWdhaW4gdXNpbmcg
dGhlIGxlZnQgc3ViLXRyZWUuCisgICAgICAgICAgICBub2RlID0gc3BsaXROb2RlKG5vZGUsIHNw
bGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhbm5vdCBwb3NzaWJseSBm
aXQgaW50byB0aGlzIG5vZGUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQoLTEsIC0xKTsKK30KKworR2VuZXJhbEFyZWFB
bGxvY2F0b3I6Ok5vZGUqIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUKKyAgICAoTm9k
ZSogbm9kZSwgU3BsaXQgc3BsaXQpCit7CisgICAgTm9kZSogbGVmdCA9IG5ldyBOb2RlKCk7Cisg
ICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOworICAgIG1fbm9kZUNvdW50ICs9IDI7CisgICAg
bGVmdC0+cGFyZW50ID0gbm9kZTsKKyAgICBsZWZ0LT5sZWZ0ID0gMDsKKyAgICBsZWZ0LT5yaWdo
dCA9IDA7CisgICAgcmlnaHQtPnBhcmVudCA9IG5vZGU7CisgICAgcmlnaHQtPmxlZnQgPSAwOwor
ICAgIHJpZ2h0LT5yaWdodCA9IDA7CisgICAgbm9kZS0+bGVmdCA9IGxlZnQ7CisgICAgbm9kZS0+
cmlnaHQgPSByaWdodDsKKworICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgeworICAgICAgICBs
ZWZ0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55
KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KGxlZnQtPnJlY3Qu
bWF4WCgpLCBub2RlLT5yZWN0LnkoKSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAv
IDIsIG5vZGUtPnJlY3QuaGVpZ2h0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnQtPnJl
Y3QgPSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKKyAg
ICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOwor
ICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIGxl
ZnQtPnJlY3QubWF4WSgpLAorICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5y
ZWN0LmhlaWdodCgpIC8gMik7CisgICAgfQorCisgICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0
LT5yZWN0LnNpemUoKTsKKyAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXpl
KCk7CisgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSByaWdodC0+bGFyZ2VzdEZyZWU7CisgICAgcmV0
dXJuIGxlZnQ7Cit9CisKK3ZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RG
cmVlKE5vZGUqIG5vZGUpCit7CisgICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50KSkgewor
ICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IFdlYkNvcmU6OkludFNpemUoCisgICAgICAgICAg
ICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS53aWR0aCgpLCBub2RlLT5yaWdodC0+
bGFyZ2VzdEZyZWUud2lkdGgoKSksCisgICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5s
YXJnZXN0RnJlZS5oZWlnaHQoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKQor
ICAgICAgICAgICAgKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnJl
bGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBMb2NhdGUgdGhl
IG5vZGUgdGhhdCBjb250YWlucyB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4KKyAgICBOb2RlKiBub2Rl
ID0gbV9yb290OworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gcmVjdC5sb2NhdGlvbigp
OworICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIGlmIChub2RlLT5sZWZ0ICYmIG5vZGUtPmxl
ZnQtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7
CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT5yZWN0LmNvbnRh
aW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yaWdodDsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOyAvLyBQb2ludCBpcyBjb21wbGV0ZWx5IG91
dHNpZGUgdGhlIHRyZWUuCisgICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVlIGFuZCB0aGVuIHdvcmsgdXB3YXJkcyB0aHJv
dWdoIHRoZSB0cmVlCisgICAgLy8gcmVjb21iaW5pbmcgYW5kIGRlbGV0aW5nIG5vZGVzIHVudGls
IHdlIHJlYWNoIGEgc2libGluZworICAgIC8vIHRoYXQgaXMgc3RpbGwgYWxsb2NhdGVkLgorICAg
IG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7CisgICAgd2hpbGUgKG5vZGUt
PnBhcmVudCkgeworICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0ID09IG5vZGUpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJpZ2h0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5w
YXJlbnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQtPmxhcmdlc3RG
cmVlICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC5zaXplKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKyAgICAgICAg
ZnJlZU5vZGUobm9kZS0+bGVmdCk7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsKKyAg
ICAgICAgbV9ub2RlQ291bnQgLT0gMjsKKyAgICAgICAgbm9kZS0+bGVmdCA9IDA7CisgICAgICAg
IG5vZGUtPnJpZ2h0ID0gMDsKKyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0
LnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHRoZSByZXN0IG9mIG91ciBhbmNlc3RvcnMg
aGF2ZSB0aGUgY29ycmVjdCAibGFyZ2VzdCBmcmVlIHNpemUiLgorICAgIHVwZGF0ZUxhcmdlc3RG
cmVlKG5vZGUpOworfQorCitpbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9ub2RlQ291bnQgKiBzaXplb2YoTm9kZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWU4ODcxNmM4NmQxYzFhMTNhZGJkYjRlYTkzYTQ3ODFlZWQzNTM5ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0FyZWFBbGxvY2F0b3IuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAorI2Rl
ZmluZSBBcmVhQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPEludFBvaW50Lmg+CisjaW5jbHVkZSA8
SW50UmVjdC5oPgorI2luY2x1ZGUgPEludFNpemUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
aW5saW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVyKQoreworICAgIC8vIFRoaXMgaXMg
YSBmYXN0IHRyaWNrIHRvIGdldCBuZXh0UG93ZXJPZlR3byBmb3IgYW4gaW50ZWdlci4KKyAgICAt
LW51bWJlcjsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE7CisgICAgbnVtYmVyIHw9IG51bWJl
ciA+PiAyOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gNDsKKyAgICBudW1iZXIgfD0gbnVtYmVy
ID4+IDg7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAxNjsKKyAgICBudW1iZXIrKzsKKyAgICBy
ZXR1cm4gbnVtYmVyOworfQorCitpbmxpbmUgSW50U2l6ZSBuZXh0UG93ZXJPZlR3byhjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBJbnRTaXplKG5leHRQb3dlck9mVHdvKHNpemUu
d2lkdGgoKSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0KCkpKTsKK30KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEFyZWFBbGxvY2F0b3Ig
eworcHVibGljOgorICAgIEFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwor
ICAgIHZpcnR1YWwgfkFyZWFBbGxvY2F0b3IoKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5p
bXVtQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluQWxsb2M7IH0KKyAgICB2b2lkIHNl
dE1pbmltdW1BbGxvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIHsgbV9taW5B
bGxvYyA9IHNpemU7IH0KKworICAgIFdlYkNvcmU6OkludFNpemUgbWFyZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXJnaW47IH0KKyAgICB2b2lkIHNldE1hcmdpbihjb25zdCBXZWJDb3JlOjpJbnRT
aXplICZtYXJnaW4pIHsgbV9tYXJnaW4gPSBtYXJnaW47IH0KKworICAgIHZpcnR1YWwgdm9pZCBl
eHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZvaWQgZXhwYW5kQnkoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGFsbG9j
YXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVh
c2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQo
KSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOworICAg
IFdlYkNvcmU6OkludFNpemUgbV9taW5BbGxvYzsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWFy
Z2luOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSByb3VuZEFsbG9jYXRpb24oY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpIGNvbnN0OworfTsKKworY2xhc3MgR2VuZXJhbEFyZWFBbGxvY2F0b3IgOiBw
dWJsaWMgQXJlYUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgR2VuZXJhbEFyZWFBbGxvY2F0b3Io
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZpcnR1YWwgfkdlbmVyYWxBcmVhQWxsb2Nh
dG9yKCk7CisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAg
V2ViQ29yZTo6SW50UmVjdCBhbGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAg
dm9pZCByZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICBpbnQgb3ZlcmhlYWQo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBlbnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25Z
IH07CisKKyAgICBzdHJ1Y3QgTm9kZSB7CisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdDsK
KyAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBsYXJnZXN0RnJlZTsKKyAgICAgICAgTm9kZSogcGFy
ZW50OworICAgICAgICBOb2RlKiBsZWZ0OworICAgICAgICBOb2RlKiByaWdodDsKKyAgICB9Owor
CisgICAgTm9kZSogbV9yb290OworICAgIGludCBtX25vZGVDb3VudDsKKworICAgIHN0YXRpYyB2
b2lkIGZyZWVOb2RlKE5vZGUqKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBhbGxvY2F0ZUZyb21O
b2RlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBOb2RlKik7CisgICAgTm9kZSogc3BsaXROb2Rl
KE5vZGUqLCBTcGxpdCk7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSop
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRl
QXRsYXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhNTQxOGYxZWFhYTM0ODdiNGU0
MjRiOWE5NTYyMDIwODMwOTc1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKQEAg
LTAsMCArMSw5OSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgorCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworVXBkYXRlQXRsYXM6OlVw
ZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNpb24sIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBt
X2ZsYWdzKGZsYWdzKQorICAgICwgbV9pbmFjdGl2aXR5SW5TZWNvbmRzKDApCisgICAgLCBtX2lz
VmFpbGQodHJ1ZSkKK3sKKyAgICBzdGF0aWMgaW50IG5leHRJRCA9IDA7CisgICAgbV9JRCA9ICsr
bmV4dElEOworICAgIEludFNpemUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5z
aW9uLCBkaW1lbnNpb24pKTsKKyAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVh
dGUoc2l6ZSwgZmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OlN1cHBvcnRzR3JhcGhpY3NTdXJmYWNl
KTsKKworICAgIGlmICghbV9zdXJmYWNlLT5jcmVhdGVIYW5kbGUobV9oYW5kbGUpKSB7CisgICAg
ICAgIG1faXNWYWlsZCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2xp
ZW50LT5jcmVhdGVVcGRhdGVBdGxhcyhtX0lELCBtX2hhbmRsZSk7Cit9CisKK1VwZGF0ZUF0bGFz
Ojp+VXBkYXRlQXRsYXMoKQoreworICAgIGlmIChtX2lzVmFpbGQpCisgICAgICAgIG1fY2xpZW50
LT5yZW1vdmVVcGRhdGVBdGxhcyhtX0lEKTsKK30KKwordm9pZCBVcGRhdGVBdGxhczo6YnVpbGRM
YXlvdXRJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2FyZWFBbGxvY2F0b3IpIHsKKyAgICAgICAg
bV9hcmVhQWxsb2NhdG9yID0gYWRvcHRQdHIobmV3IEdlbmVyYWxBcmVhQWxsb2NhdG9yKHNpemUo
KSkpOworICAgICAgICBtX2FyZWFBbGxvY2F0b3ItPnNldE1pbmltdW1BbGxvY2F0aW9uKEludFNp
emUoMzIsIDMyKSk7CisgICAgfQorfQorCit2b2lkIFVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVy
cygpCit7CisgICAgbV9hcmVhQWxsb2NhdG9yLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVy
KGludCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgPSAwOworICAgIGJ1aWxkTGF5b3V0
SWZOZWVkZWQoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBtX2FyZWFBbGxvY2F0b3ItPmFsbG9jYXRl
KHNpemUpOworCisgICAgLy8gTm8gYXZhaWxhYmxlIGJ1ZmZlciB3YXMgZm91bmQsIHJldHVybmlu
ZyBudWxsLgorICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PigpOworCisgICAgaWYgKCFtX2lzVmFpbGQpCisgICAgICAgIHJl
dHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKKworICAgIGF0bGFzSUQgPSBtX0lE
OworCisgICAgLy8gRklYTUU6IFVzZSB0cmktc3RhdGUgYnVmZmVycywgdG8gYWxsb3cgZmFzdGVy
IHVwZGF0ZXMuCisgICAgb2Zmc2V0ID0gcmVjdC5sb2NhdGlvbigpOworICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0KHJlY3QpOworCisgICAgaWYgKGZsYWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBv
cnRzQWxwaGEpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlQ29weSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgfQorCisgICAgcmV0dXJuIGdyYXBoaWNz
Q29udGV4dC5yZWxlYXNlKCk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L1VwZGF0ZUF0bGFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2NlZmU5Yzk3OTQyMTU4NjI3M2Y0ZTBjZDMwOWEy
MDIzNGM3MWFkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmgKQEAgLTAsMCArMSw4MiBA
QAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVXBkYXRl
QXRsYXNfaAorI2RlZmluZSBVcGRhdGVBdGxhc19oCisKKyNpbmNsdWRlICJBcmVhQWxsb2NhdG9y
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFBvaW50OworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFj
ZTo6SGFuZGxlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyhpbnQg
YXRsYXNJRCkgPSAwOworfTsKKworY2xhc3MgVXBkYXRlQXRsYXMgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKK3B1YmxpYzoKKyAgICBVcGRhdGVBdGxhcyhVcGRhdGVB
dGxhc0NsaWVudCosIGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOworICAg
IH5VcGRhdGVBdGxhcygpOworCisgICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9CisKKyAgICAvLyBSZXR1cm5zIGEgbnVs
bCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCisgICAgUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZl
cihpbnQmIGF0bGFzSUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpJbnRQb2lu
dCYgb2Zmc2V0KTsKKyAgICB2b2lkIGRpZFN3YXBCdWZmZXJzKCk7CisgICAgU2hhcmVhYmxlQml0
bWFwOjpGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KKworICAgIHZvaWQg
YWRkVGltZUluYWN0aXZlKGRvdWJsZSBzZWNvbmRzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFp
c0luVXNlKCkpOworICAgICAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgKz0gc2Vjb25kczsKKyAg
ICB9CisgICAgYm9vbCBpc0luYWN0aXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IGRv
dWJsZSBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2UgPSAzOworICAgICAgICByZXR1cm4gbV9pbmFj
dGl2aXR5SW5TZWNvbmRzID4gaW5hY3RpdmVTZWNvbmRzVG9sZXJhbmNlOworICAgIH0KKyAgICBi
b29sIGlzSW5Vc2UoKSBjb25zdCB7IHJldHVybiBtX2FyZWFBbGxvY2F0b3I7IH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKKworcHJpdmF0ZToKKyAgICBVcGRh
dGVBdGxhc0NsaWVudCogbV9jbGllbnQ7CisgICAgT3duUHRyPEdlbmVyYWxBcmVhQWxsb2NhdG9y
PiBtX2FyZWFBbGxvY2F0b3I7CisgICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdzOwor
ICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlIG1faGFuZGxlOworICAgIGRvdWJsZSBtX2luYWN0aXZpdHlJblNlY29uZHM7
CisgICAgaW50IG1fSUQ7CisgICAgYm9vbCBtX2lzVmFpbGQ7Cit9OworCit9CisjZW5kaWYKKyNl
bmRpZiAvLyBVcGRhdGVBdGxhc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE1
NDE4ZjFlYWFhMzQ4N2I0ZTQyNGI5YTk1NjIwMjA4MzA5NzU0ZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVXBkYXRlQXRsYXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoK
LSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0
bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3Mg
ZmxhZ3MpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ZsYWdzKGZsYWdzKQotICAg
ICwgbV9pbmFjdGl2aXR5SW5TZWNvbmRzKDApCi0gICAgLCBtX2lzVmFpbGQodHJ1ZSkKLXsKLSAg
ICBzdGF0aWMgaW50IG5leHRJRCA9IDA7Ci0gICAgbV9JRCA9ICsrbmV4dElEOwotICAgIEludFNp
emUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNpb24pKTsK
LSAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgZmxhZ3MsIFNo
YXJlYWJsZVN1cmZhY2U6OlN1cHBvcnRzR3JhcGhpY3NTdXJmYWNlKTsKLQotICAgIGlmICghbV9z
dXJmYWNlLT5jcmVhdGVIYW5kbGUobV9oYW5kbGUpKSB7Ci0gICAgICAgIG1faXNWYWlsZCA9IGZh
bHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2xpZW50LT5jcmVhdGVVcGRhdGVB
dGxhcyhtX0lELCBtX2hhbmRsZSk7Ci19Ci0KLVVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMoKQot
ewotICAgIGlmIChtX2lzVmFpbGQpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVVcGRhdGVBdGxh
cyhtX0lEKTsKLX0KLQotdm9pZCBVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKCFtX2FyZWFBbGxvY2F0b3IpIHsKLSAgICAgICAgbV9hcmVhQWxsb2NhdG9yID0g
YWRvcHRQdHIobmV3IEdlbmVyYWxBcmVhQWxsb2NhdG9yKHNpemUoKSkpOwotICAgICAgICBtX2Fy
ZWFBbGxvY2F0b3ItPnNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoMzIsIDMyKSk7Ci0gICAg
fQotfQotCi12b2lkIFVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycygpCi17Ci0gICAgbV9hcmVh
QWxsb2NhdG9yLmNsZWFyKCk7Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBVcGRh
dGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGludCYgYXRsYXNJRCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX2lu
YWN0aXZpdHlJblNlY29uZHMgPSAwOwotICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKLSAgICBJ
bnRSZWN0IHJlY3QgPSBtX2FyZWFBbGxvY2F0b3ItPmFsbG9jYXRlKHNpemUpOwotCi0gICAgLy8g
Tm8gYXZhaWxhYmxlIGJ1ZmZlciB3YXMgZm91bmQsIHJldHVybmluZyBudWxsLgotICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0
PigpOwotCi0gICAgaWYgKCFtX2lzVmFpbGQpCi0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4oKTsKLQotICAgIGF0bGFzSUQgPSBtX0lEOwotCi0gICAgLy8gRklYTUU6
IFVzZSB0cmktc3RhdGUgYnVmZmVycywgdG8gYWxsb3cgZmFzdGVyIHVwZGF0ZXMuCi0gICAgb2Zm
c2V0ID0gcmVjdC5sb2NhdGlvbigpOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dCA9IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOwotCi0g
ICAgaWYgKGZsYWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpIHsKLSAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7
Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBzaXplKSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291
cmNlT3Zlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7
Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1VwZGF0ZUF0bGFzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VXBkYXRlQXRsYXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NlZmU5Yzk3OTQy
MTU4NjI3M2Y0ZTBjZDMwOWEyMDIzNGM3MWFkMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBk
YXRlQXRsYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0
IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
Ci0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFVwZGF0ZUF0bGFzX2gKLSNkZWZpbmUg
VXBkYXRlQXRsYXNfaAotCi0jaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgotI2luY2x1ZGUgIklu
dFNpemUuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCi0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci1jbGFzcyBJbnRQb2ludDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFVw
ZGF0ZUF0bGFzQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRl
QXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpID0gMDsKLX07
Ci0KLWNsYXNzIFVwZGF0ZUF0bGFzIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVB
dGxhcyk7Ci1wdWJsaWM6Ci0gICAgVXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqLCBpbnQg
ZGltZW5zaW9uLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzKTsKLSAgICB+VXBkYXRlQXRsYXMoKTsK
LQotICAgIGlubGluZSBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N1
cmZhY2UtPnNpemUoKTsgfQotCi0gICAgLy8gUmV0dXJucyBhIG51bGwgcG9pbnRlciBvZiB0aGVy
ZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyLgotICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaW50JiBhdGxhc0lELCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCk7Ci0gICAg
dm9pZCBkaWRTd2FwQnVmZmVycygpOwotICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Mo
KSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9Ci0KLSAgICB2b2lkIGFkZFRpbWVJbmFjdGl2ZShk
b3VibGUgc2Vjb25kcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNJblVzZSgpKTsKLSAgICAg
ICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzICs9IHNlY29uZHM7Ci0gICAgfQotICAgIGJvb2wgaXNJ
bmFjdGl2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBjb25zdCBkb3VibGUgaW5hY3RpdmVTZWNv
bmRzVG9sZXJhbmNlID0gMzsKLSAgICAgICAgcmV0dXJuIG1faW5hY3Rpdml0eUluU2Vjb25kcyA+
IGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZTsKLSAgICB9Ci0gICAgYm9vbCBpc0luVXNlKCkgY29u
c3QgeyByZXR1cm4gbV9hcmVhQWxsb2NhdG9yOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBidWls
ZExheW91dElmTmVlZGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAgVXBkYXRlQXRsYXNDbGllbnQqIG1f
Y2xpZW50OwotICAgIE93blB0cjxHZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9hcmVhQWxsb2NhdG9y
OwotICAgIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgbV9mbGFnczsKLSAgICBSZWZQdHI8U2hhcmVh
YmxlU3VyZmFjZT4gbV9zdXJmYWNlOwotICAgIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSBtX2hh
bmRsZTsKLSAgICBkb3VibGUgbV9pbmFjdGl2aXR5SW5TZWNvbmRzOwotICAgIGludCBtX0lEOwot
ICAgIGJvb2wgbV9pc1ZhaWxkOwotfTsKLQotfQotI2VuZGlmCi0jZW5kaWYgLy8gVXBkYXRlQXRs
YXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177420</attachid>
            <date>2012-12-03 22:55:01 -0800</date>
            <delta_ts>2012-12-04 01:10:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103864-20121203225308.patch</filename>
            <type>text/plain</type>
            <size>51322</size>
            <attacher name="Jae Hyun Park">jaepark</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmFiMzY4ZmRkMDg4N2Nj
YjkwOWRjMmJhMjc5MWE5NzEzYTY3YjVlNC4uOGJlZjFjOTk0M2FlNGRhMmNkNWMwODlhYzkwNjM3
NTRhMjgwZWJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTEyLTAzICBKYWUg
SHl1biBQYXJrICA8amFlLnBhcmtAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0
ZWQgR3JhcGhpY3M6IE1vdmUgQXJlYUFsbG9jYXRvciBhbmQgVXBkYXRlQXRsYXMgdG8gQ29vcmRp
bmF0ZWRHcmFwaGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQXJlYUFsbG9jYXRvciBhbmQgVXBkYXRlQXRsYXMgaXMgb25seSB1c2VkIGZvciBDb29y
ZGluYXRlZCBHcmFwaGljcy4KKyAgICAgICAgU28sIHRoZXNlIG11c3QgYmUgbW92ZWQgdG8gQ29v
cmRpbmF0ZWRHcmFwaGljcyB0byBjbGFyaWZ5IHRoZSBjb2RlLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0LCBiZWNhdXNlIG5vIGNoYW5nZSBvZiBiZWhhdmlvci4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5jcHAuCisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjpBcmVhQWxsb2Nh
dG9yKToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6fkFyZWFBbGxvY2F0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjpleHBhbmQpOgorICAgICAgICAoV2ViS2l0
OjpBcmVhQWxsb2NhdG9yOjpleHBhbmRCeSk6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0
b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCk6
CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnJvdW5kQWxsb2NhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFsQXJlYUFsbG9jYXRvcik6
CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjp+R2VuZXJhbEFyZWFBbGxv
Y2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUp
OgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKToKKyAgICAg
ICAgKFdlYktpdDo6Zml0c1dpdGhpbik6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxs
b2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9y
OjphbGxvY2F0ZUZyb21Ob2RlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0
b3I6OnNwbGl0Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjp1
cGRhdGVMYXJnZXN0RnJlZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9y
OjpyZWxlYXNlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92ZXJo
ZWFkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9B
cmVhQWxsb2NhdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQXJlYUFsbG9jYXRvci5oLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28p
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQXJlYUFs
bG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNpemUpOgorICAgICAg
ICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjptaW5pbXVtQWxsb2NhdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNldE1pbmltdW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6QXJlYUFsbG9jYXRvcjo6bWFyZ2luKToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9j
YXRvcjo6c2V0TWFyZ2luKToKKyAgICAgICAgKEdlbmVyYWxBcmVhQWxsb2NhdG9yKToKKyAgICAg
ICAgKE5vZGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1VwZGF0ZUF0bGFzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0OjpVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpVcGRh
dGVBdGxhczo6flVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmJ1
aWxkTGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6ZGlkU3dh
cEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09u
QXZhaWxhYmxlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChVcGRhdGVBdGxhc0NsaWVudCk6CisgICAgICAgIChVcGRh
dGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpzaXplKToKKyAgICAgICAg
KFdlYktpdDo6VXBkYXRlQXRsYXM6OmZsYWdzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRs
YXM6OmFkZFRpbWVJbmFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjppc0lu
YWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmlzSW5Vc2UpOgorCiAyMDEy
LTEyLTAzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IFBERlBsdWdpbjogPGVtYmVkPiBhbmQgPG9iamVjdD4gUERGcyBhZmZlY3QgdGhlaXIgcGFyZW50
IGZyYW1lJ3MgcGFnZSBzY2FsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCBlZjZlYzg2YjE1OGU2
NWUxYWRmNDQ0NjNjMDM0MzVkZjgyZjgwMWM1Li5mZDI0OTU5NWY1YzUzYzFkMWE3M2RkNzhmNDA5
NGY1MzI4ODNkNzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNDgxLDExICs0ODEsOSBAQCBT
RVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hl
ci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiAKLSAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXku
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwCi0g
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViQ29udGV4dE1lbnUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApA
QCAtNDk1LDEwICs0OTMsMTIgQEAgU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
VW5kb1N0ZXAuY3BwCiAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9BcmVhQWxsb2NhdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3Bw
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
VXBkYXRlQXRsYXMuY3BwCiApCiAKIFNFVChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaQppbmRleCBmNDM0MDE2MzY0MjViNjU1ZTZkNmZlZjYyM2JlNDMxNjE4NDkzOWVhLi4wMjc0
ODgwNDEyOGI0OWRhNzNhODBhODI2ZGRmNGQ3YjNlMWFkZThjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM2
MywxOCArMzYzLDE4IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViU2VhcmNoUG9wdXBNZW51LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViVmlicmF0aW9uQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQv
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQXJl
YUFsbG9jYXRvci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9BcmVhQWxsb2NhdG9yLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
VXBkYXRlQXRsYXMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRy
b2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggXAotICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViQ29udGV4dE1lbnUuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmggXAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaCBcCkBAIC03NDQsMjEgKzc0NCwy
MSBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRy
YWdDbGllbnRRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
cXQvV2ViUG9wdXBNZW51UXQuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9j
YXRvci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHAgXAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRW5j
b2RlckFkYXB0ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCisgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3Bw
IFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxh
cy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVyLmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
VXBkYXRlQXRsYXMuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRM
aXN0UHJveHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjAyZWZlYjVmMWFlZmE3ZTdhZjIyNTE3NDFlZjY3YjE0MTFi
NTczYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJBcmVhQWxsb2NhdG9y
LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1BcmVhQWxsb2NhdG9yOjpBcmVhQWxsb2NhdG9y
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAs
IG1fbWluQWxsb2MoMSwgMSkKLSAgICAsIG1fbWFyZ2luKDAsIDApCi17Ci19Ci0KLUFyZWFBbGxv
Y2F0b3I6On5BcmVhQWxsb2NhdG9yKCkKLXsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9yOjpleHBh
bmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBtX3NpemUu
ZXhwYW5kZWRUbyhzaXplKTsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9yOjpleHBhbmRCeShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6ZSArPSBzaXplOwotfQotCi12
b2lkIEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpCi17Ci19
Ci0KLWludCBBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLVdlYkNvcmU6OkludFNpemUgQXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0aW9uKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Ci17Ci0gICAgaW50IHdpZHRoID0gc2l6
ZS53aWR0aCgpICsgbV9tYXJnaW4ud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWln
aHQoKSArIG1fbWFyZ2luLmhlaWdodCgpOwotICAgIGludCBleHRyYSA9IHdpZHRoICUgbV9taW5B
bGxvYy53aWR0aCgpOwotICAgIGlmIChleHRyYSkKLSAgICAgICAgd2lkdGggKz0gbV9taW5BbGxv
Yy53aWR0aCgpIC0gZXh0cmE7Ci0gICAgZXh0cmEgPSBoZWlnaHQgJSBtX21pbkFsbG9jLmhlaWdo
dCgpOwotICAgIGlmIChleHRyYSkKLSAgICAgICAgaGVpZ2h0ICs9IG1fbWluQWxsb2MuaGVpZ2h0
KCkgLSBleHRyYTsKLQotICAgIHJldHVybiBXZWJDb3JlOjpJbnRTaXplKHdpZHRoLCBoZWlnaHQp
OwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6R2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLSAgICA6IEFyZWFBbGxvY2F0b3IoV2ViQ29yZTo6bmV4
dFBvd2VyT2ZUd28oc2l6ZSkpCi17Ci0gICAgbV9yb290ID0gbmV3IE5vZGUoKTsKLSAgICBtX3Jv
b3QtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCkpOwotICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7Ci0gICAgbV9yb290
LT5wYXJlbnQgPSAwOwotICAgIG1fcm9vdC0+bGVmdCA9IDA7Ci0gICAgbV9yb290LT5yaWdodCA9
IDA7Ci0gICAgbV9ub2RlQ291bnQgPSAxOwotICAgIHNldE1pbmltdW1BbGxvY2F0aW9uKFdlYkNv
cmU6OkludFNpemUoOCwgOCkpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6fkdlbmVyYWxB
cmVhQWxsb2NhdG9yKCkKLXsKLSAgICBmcmVlTm9kZShtX3Jvb3QpOwotfQotCi12b2lkIEdlbmVy
YWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9kZShOb2RlKiBub2RlKQotewotICAgIGlmIChub2RlKSB7
Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOwotICAgICAgICBmcmVlTm9kZShub2RlLT5y
aWdodCk7Ci0gICAgfQotICAgIGRlbGV0ZSBub2RlOwotfQotCi12b2lkIEdlbmVyYWxBcmVhQWxs
b2NhdG9yOjpleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBBcmVh
QWxsb2NhdG9yOjpleHBhbmQoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28oc2l6ZSkpOwotCi0gICAg
aWYgKG1fcm9vdC0+cmVjdC5zaXplKCkgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47IC8vIE5v
IGNoYW5nZS4KLQotICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1fcm9vdC0+bGFyZ2VzdEZyZWUu
d2lkdGgoKSA+IDApIHsKLSAgICAgICAgLy8gTm8gYWxsb2NhdGlvbnMgaGF2ZSBvY2N1cnJlZCwg
c28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KLSAgICAgICAgbV9yb290LT5yZWN0ID0gV2Vi
Q29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAg
ICAgICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEFkZCBleHRyYSBub2RlcyBhYm92ZSB0aGUgY3VycmVudCByb290IHRvIGV4
cGFuZCB0aGUgdHJlZS4KLSAgICBOb2RlKiBvbGRSb290ID0gbV9yb290OwotICAgIFNwbGl0IHNw
bGl0OwotICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3NpemUuaGVpZ2h0KCkpCi0gICAgICAg
IHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgZWxzZQotICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwot
Ci0gICAgd2hpbGUgKG1fcm9vdC0+cmVjdC5zaXplKCkgIT0gbV9zaXplKSB7Ci0gICAgICAgIGlm
IChtX3Jvb3QtPnJlY3Qud2lkdGgoKSA9PSBtX3NpemUud2lkdGgoKSkKLSAgICAgICAgICAgIHNw
bGl0ID0gU3BsaXRPblk7Ci0gICAgICAgIGVsc2UgaWYgKG1fcm9vdC0+cmVjdC5oZWlnaHQoKSA9
PSBtX3NpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAg
ICBOb2RlKiBwYXJlbnQgPSBuZXcgTm9kZSgpOwotICAgICAgICBOb2RlKiByaWdodCA9IG5ldyBO
b2RlKCk7Ci0gICAgICAgIG1fbm9kZUNvdW50ICs9IDI7Ci0gICAgICAgIG1fcm9vdC0+cGFyZW50
ID0gcGFyZW50OwotICAgICAgICBwYXJlbnQtPnBhcmVudCA9IDA7Ci0gICAgICAgIHBhcmVudC0+
bGVmdCA9IG1fcm9vdDsKLSAgICAgICAgcGFyZW50LT5yaWdodCA9IHJpZ2h0OwotICAgICAgICBw
YXJlbnQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKLSAgICAgICAgcmlnaHQt
PnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgcmlnaHQtPmxlZnQgPSAwOwotICAgICAgICByaWdo
dC0+cmlnaHQgPSAwOwotICAgICAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Qu
c2l6ZSgpOwotICAgICAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKLSAgICAgICAgICAgIHBh
cmVudC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5y
ZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9y
b290LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBtX3Jv
b3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcmVudC0+cmVjdCA9
IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0Lndp
ZHRoKCksIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSAqIDIpOwotICAgICAgICAgICAgcmlnaHQtPnJl
Y3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCkg
KyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsK
LSAgICAgICAgfQotICAgICAgICBzcGxpdCA9IChzcGxpdCA9PSBTcGxpdE9uWCA/IFNwbGl0T25Z
IDogU3BsaXRPblgpOwotICAgICAgICBtX3Jvb3QgPSBwYXJlbnQ7Ci0gICAgfQotICAgIHVwZGF0
ZUxhcmdlc3RGcmVlKG9sZFJvb3QpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZml0c1dpdGhp
bihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplMSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2l6ZTIpCi17Ci0gICAgcmV0dXJuIHNpemUxLndpZHRoKCkgPD0gc2l6ZTIud2lkdGgoKSAmJiBz
aXplMS5oZWlnaHQoKSA8PSBzaXplMi5oZWlnaHQoKTsKLX0KLQotV2ViQ29yZTo6SW50UmVjdCBH
ZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSkKLXsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kZWQgPSByb3VuZEFsbG9jYXRpb24oc2l6
ZSk7Ci0gICAgcm91bmRlZCA9IFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHJvdW5kZWQpOwotICAg
IGlmIChyb3VuZGVkLndpZHRoKCkgPD0gMCB8fCByb3VuZGVkLndpZHRoKCkgPiBtX3NpemUud2lk
dGgoKQotICAgICAgICB8fCByb3VuZGVkLmhlaWdodCgpIDw9IDAgfHwgcm91bmRlZC5oZWlnaHQo
KSA+IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QoKTsK
LQotICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShyb3VuZGVk
LCBtX3Jvb3QpOwotICAgIGlmIChwb2ludC54KCkgPj0gMCkKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkludFJlY3QocG9pbnQsIHNpemUpOwotICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KCk7
Ci19Ci0KLVdlYkNvcmU6OkludFBvaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZUZy
b21Ob2RlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIE5vZGUqIG5vZGUpCi17Ci0gICAg
Ly8gRmluZCB0aGUgYmVzdCBub2RlIHRvIGluc2VydCBpbnRvLCB3aGljaCBzaG91bGQgYmUKLSAg
ICAvLyBhIG5vZGUgd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHVudXNlZCBzcGFjZSB0aGF0IGlz
Ci0gICAgLy8gYmlnIGVub3VnaCB0byBjb250YWluIHRoZSByZXF1ZXN0ZWQgc2l6ZS4KLSAgICB3
aGlsZSAobm9kZSkgewotICAgICAgICAvLyBHbyBkb3duIGEgbGV2ZWwgYW5kIGRldGVybWluZSBp
ZiB0aGUgbGVmdCBvciByaWdodAotICAgICAgICAvLyBzdWItdHJlZSBjb250YWlucyB0aGUgYmVz
dCBjaGFuY2Ugb2YgYWxsb2NhdGlvbi4KLSAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmxlZnQ7
Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+cmlnaHQ7Ci0gICAgICAgIGlmIChsZWZ0ICYm
IGZpdHNXaXRoaW4oc2l6ZSwgbGVmdC0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICBpZiAo
cmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCkgPCByaWdodC0+bGFyZ2VzdEZy
ZWUud2lkdGgoKQotICAgICAgICAgICAgICAgICAgICB8fCBsZWZ0LT5sYXJnZXN0RnJlZS5oZWln
aHQoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgbGFyZ2VzdEZyZWUgdmFsdWVzIG1heSBiZSBhIGxpdHRsZSBvdmVyc2l6ZWQsCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHNvIHRyeSB0aGUgbGVmdCBzdWItdHJlZSBhbmQgdGhlbiB0
aGUgcmlnaHQgc3ViLXRyZWUuCi0gICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkludFBvaW50
IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShzaXplLCBsZWZ0KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHBvaW50LngoKSA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBv
aW50OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVGcm9tTm9kZShzaXplLCBy
aWdodCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGUgPSByaWdodDsK
LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG5vZGUgPSBsZWZ0OwotICAgICAg
ICB9IGVsc2UgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxhcmdlc3RGcmVl
KSkKLSAgICAgICAgICAgIG5vZGUgPSByaWdodDsKLSAgICAgICAgZWxzZSBpZiAobGVmdCB8fCBy
aWdodCkgewotICAgICAgICAgICAgLy8gTmVpdGhlciBzdWItbm9kZSBoYXMgZW5vdWdoIHNwYWNl
IHRvIGFsbG9jYXRlIGZyb20uCi0gICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQo
LTEsIC0xKTsKLSAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKHNpemUsIG5vZGUtPmxhcmdl
c3RGcmVlKSkgewotICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBzcGxpdCB0aGlzIG5vZGUg
aW50byBzbWFsbGVyIHBpZWNlcz8KLSAgICAgICAgICAgIFNwbGl0IHNwbGl0OwotICAgICAgICAg
ICAgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXpl
LmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgICAgIC8v
IFNwbGl0IGluIGVpdGhlciBkaXJlY3Rpb246IGNob29zZSB0aGUgaW52ZXJzZSBvZgotICAgICAg
ICAgICAgICAgIC8vIHRoZSBwYXJlbnQgbm9kZSdzIHNwbGl0IGRpcmVjdGlvbiB0byB0cnkgdG8g
YmFsYW5jZQotICAgICAgICAgICAgICAgIC8vIG91dCB0aGUgd2FzdGVkIHNwYWNlIGFzIGZ1cnRo
ZXIgc3ViZGl2aXNpb25zIGhhcHBlbi4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50
Ci0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC54KCkgPT0g
bm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC54KCkpCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0
ID0gU3BsaXRPblg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cGFyZW50KQotICAg
ICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGUtPnJlY3Qud2lkdGgoKSA+PSBub2RlLT5yZWN0LmhlaWdodCgpKQotICAgICAgICAg
ICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
Zml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0
KCkpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBTcGxpdCBhbG9u
ZyB0aGUgWCBkaXJlY3Rpb24uCi0gICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBTcGxpdCBhbG9uZyB0aGUgWSBkaXJlY3Rpb24uCi0gICAgICAgICAgICAgICAg
c3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gQ2Fubm90IHNwbGl0IGZ1cnRoZXIgLSBhbGxvY2F0ZSB0aGlzIG5vZGUuCi0gICAgICAgICAg
ICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJbnRTaXplKDAsIDApOwotICAgICAg
ICAgICAgICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG5vZGUpOwotICAgICAgICAgICAgICAgIHJldHVy
biBub2RlLT5yZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFNwbGl0IHRoZSBub2RlLCB0aGVuIGdvIGFyb3VuZCBhZ2FpbiB1c2luZyB0aGUgbGVmdCBzdWIt
dHJlZS4KLSAgICAgICAgICAgIG5vZGUgPSBzcGxpdE5vZGUobm9kZSwgc3BsaXQpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2Fubm90IHBvc3NpYmx5IGZpdCBpbnRvIHRoaXMg
bm9kZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBX
ZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6Tm9k
ZSogR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnNwbGl0Tm9kZQotICAgIChOb2RlKiBub2RlLCBTcGxp
dCBzcGxpdCkKLXsKLSAgICBOb2RlKiBsZWZ0ID0gbmV3IE5vZGUoKTsKLSAgICBOb2RlKiByaWdo
dCA9IG5ldyBOb2RlKCk7Ci0gICAgbV9ub2RlQ291bnQgKz0gMjsKLSAgICBsZWZ0LT5wYXJlbnQg
PSBub2RlOwotICAgIGxlZnQtPmxlZnQgPSAwOwotICAgIGxlZnQtPnJpZ2h0ID0gMDsKLSAgICBy
aWdodC0+cGFyZW50ID0gbm9kZTsKLSAgICByaWdodC0+bGVmdCA9IDA7Ci0gICAgcmlnaHQtPnJp
Z2h0ID0gMDsKLSAgICBub2RlLT5sZWZ0ID0gbGVmdDsKLSAgICBub2RlLT5yaWdodCA9IHJpZ2h0
OwotCi0gICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7Ci0gICAgICAgIGxlZnQtPnJlY3QgPSBX
ZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9k
ZS0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVj
dChsZWZ0LT5yZWN0Lm1heFgoKSwgbm9kZS0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0Lmhl
aWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBsZWZ0LT5yZWN0ID0gV2ViQ29yZTo6SW50
UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQo
KSAvIDIpOwotICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVj
dC54KCksIGxlZnQtPnJlY3QubWF4WSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7Ci0g
ICAgfQotCi0gICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5yZWN0LnNpemUoKTsKLSAgICBy
aWdodC0+bGFyZ2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7Ci0gICAgbm9kZS0+bGFyZ2Vz
dEZyZWUgPSByaWdodC0+bGFyZ2VzdEZyZWU7Ci0gICAgcmV0dXJuIGxlZnQ7Ci19Ci0KLXZvaWQg
R2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqIG5vZGUpCi17Ci0g
ICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50KSkgewotICAgICAgICBub2RlLT5sYXJnZXN0
RnJlZSA9IFdlYkNvcmU6OkludFNpemUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCksIG5vZGUtPnJpZ2h0LT5s
YXJnZXN0RnJlZS53aWR0aCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCksIG5vZGUtPnJpZ2h0LT5sYXJn
ZXN0RnJlZS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIH0K
LX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6cmVsZWFzZShjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQotewotICAgIC8vIExvY2F0ZSB0aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRo
ZSBhbGxvY2F0ZWQgcmVnaW9uLgotICAgIE5vZGUqIG5vZGUgPSBtX3Jvb3Q7Ci0gICAgV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgd2hpbGUgKG5vZGUpIHsK
LSAgICAgICAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+cmVjdC5jb250YWlucyhwb2lu
dCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+bGVmdDsKLSAgICAgICAgZWxzZSBpZiAobm9k
ZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnJlY3QuY29udGFpbnMocG9pbnQpKQotICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPnJpZ2h0OwotICAgICAgICBlbHNlIGlmIChub2RlLT5yZWN0LmNvbnRh
aW5zKHBvaW50KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICByZXR1cm47IC8vIFBvaW50IGlzIGNvbXBsZXRlbHkgb3V0c2lkZSB0aGUgdHJlZS4KLSAgICB9
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIHRoZSBub2Rl
IGFzIGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRocm91Z2ggdGhlIHRyZWUKLSAgICAvLyBy
ZWNvbWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50aWwgd2UgcmVhY2ggYSBzaWJsaW5nCi0g
ICAgLy8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCi0gICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBu
b2RlLT5yZWN0LnNpemUoKTsKLSAgICB3aGlsZSAobm9kZS0+cGFyZW50KSB7Ci0gICAgICAgIGlm
IChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUtPnBh
cmVudC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3Quc2l6
ZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdC0+bGFyZ2VzdEZyZWUgIT0gbm9kZS0+cGFyZW50LT5s
ZWZ0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBub2RlID0gbm9kZS0+cGFyZW50OwotICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsK
LSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwotICAgICAgICBtX25vZGVDb3VudCAtPSAy
OwotICAgICAgICBub2RlLT5sZWZ0ID0gMDsKLSAgICAgICAgbm9kZS0+cmlnaHQgPSAwOwotICAg
ICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOwotICAgIH0KLQotICAg
IC8vIE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2VzdG9ycyBoYXZlIHRoZSBjb3JyZWN0ICJsYXJn
ZXN0IGZyZWUgc2l6ZSIuCi0gICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7Ci19Ci0KLWludCBH
ZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAotewotICAgIHJldHVybiBtX25v
ZGVDb3VudCAqIHNpemVvZihOb2RlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhZTg4NzE2Yzg2ZDFjMWExM2FkYmRiNGVhOTNhNDc4MWVlZDM1
MzllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoK
LSAqLwotCi0jaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAotI2RlZmluZSBBcmVhQWxsb2NhdG9yX2gK
LQotI2luY2x1ZGUgPEludFBvaW50Lmg+Ci0jaW5jbHVkZSA8SW50UmVjdC5oPgotI2luY2x1ZGUg
PEludFNpemUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotaW5saW5lIGludCBuZXh0UG93ZXJP
ZlR3byhpbnQgbnVtYmVyKQotewotICAgIC8vIFRoaXMgaXMgYSBmYXN0IHRyaWNrIHRvIGdldCBu
ZXh0UG93ZXJPZlR3byBmb3IgYW4gaW50ZWdlci4KLSAgICAtLW51bWJlcjsKLSAgICBudW1iZXIg
fD0gbnVtYmVyID4+IDE7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAyOwotICAgIG51bWJlciB8
PSBudW1iZXIgPj4gNDsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDg7Ci0gICAgbnVtYmVyIHw9
IG51bWJlciA+PiAxNjsKLSAgICBudW1iZXIrKzsKLSAgICByZXR1cm4gbnVtYmVyOwotfQotCi1p
bmxpbmUgSW50U2l6ZSBuZXh0UG93ZXJPZlR3byhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAg
IHJldHVybiBJbnRTaXplKG5leHRQb3dlck9mVHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dlck9m
VHdvKHNpemUuaGVpZ2h0KCkpKTsKLX0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIEFyZWFBbGxvY2F0b3IgewotcHVibGljOgotICAgIEFyZWFB
bGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZpcnR1YWwgfkFyZWFBbGxv
Y2F0b3IoKTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWluQWxsb2M7IH0KLSAgICB2b2lkIHNldE1pbmltdW1BbGxvY2F0aW9uKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIHsgbV9taW5BbGxvYyA9IHNpemU7IH0KLQotICAg
IFdlYkNvcmU6OkludFNpemUgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KLSAg
ICB2b2lkIHNldE1hcmdpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplICZtYXJnaW4pIHsgbV9tYXJn
aW4gPSBtYXJnaW47IH0KLQotICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOwotICAgIHZvaWQgZXhwYW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwot
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwotCi0gICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJvdGVjdGVk
OgotICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9t
aW5BbGxvYzsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWFyZ2luOwotCi0gICAgV2ViQ29yZTo6
SW50U2l6ZSByb3VuZEFsbG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0Owot
fTsKLQotY2xhc3MgR2VuZXJhbEFyZWFBbGxvY2F0b3IgOiBwdWJsaWMgQXJlYUFsbG9jYXRvciB7
Ci1wdWJsaWM6Ci0gICAgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOwotICAgIHZpcnR1YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7Ci0KLSAgICB2b2lkIGV4
cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBhbGxv
Y2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCByZWxlYXNlKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKLSAgICBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBlbnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07Ci0KLSAgICBzdHJ1Y3QgTm9k
ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdDsKLSAgICAgICAgV2ViQ29yZTo6SW50
U2l6ZSBsYXJnZXN0RnJlZTsKLSAgICAgICAgTm9kZSogcGFyZW50OwotICAgICAgICBOb2RlKiBs
ZWZ0OwotICAgICAgICBOb2RlKiByaWdodDsKLSAgICB9OwotCi0gICAgTm9kZSogbV9yb290Owot
ICAgIGludCBtX25vZGVDb3VudDsKLQotICAgIHN0YXRpYyB2b2lkIGZyZWVOb2RlKE5vZGUqKTsK
LSAgICBXZWJDb3JlOjpJbnRQb2ludCBhbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBOb2RlKik7Ci0gICAgTm9kZSogc3BsaXROb2RlKE5vZGUqLCBTcGxpdCk7Ci0gICAg
c3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSopOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2Nh
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYmVmY2RhYzg1MjAxMmNmZTkzYzg3YTVhOTMyMWE4MWQ3NTM1
ODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAKQEAgLTAsMCArMSwzMzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIu
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQXJl
YUFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQXJlYUFsbG9jYXRvcjo6QXJl
YUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQorICAgIDogbV9zaXplKHNp
emUpCisgICAgLCBtX21pbkFsbG9jKDEsIDEpCisgICAgLCBtX21hcmdpbigwLCAwKQoreworfQor
CitBcmVhQWxsb2NhdG9yOjp+QXJlYUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQgQXJlYUFsbG9j
YXRvcjo6ZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit7CisgICAgbV9zaXpl
ID0gbV9zaXplLmV4cGFuZGVkVG8oc2l6ZSk7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhw
YW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgKz0gc2l6
ZTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKQoreworfQorCitpbnQgQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCitXZWJDb3JlOjpJbnRTaXplIEFyZWFBbGxvY2F0b3I6OnJvdW5kQWxs
b2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGludCB3
aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9
IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKKyAgICBpbnQgZXh0cmEgPSB3aWR0
aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIHdpZHRoICs9
IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9taW5B
bGxvYy5oZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIGhlaWdodCArPSBtX21pbkFs
bG9jLmhlaWdodCgpIC0gZXh0cmE7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKK30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVhQWxsb2Nh
dG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCisgICAgOiBBcmVhQWxsb2NhdG9yKFdl
YkNvcmU6Om5leHRQb3dlck9mVHdvKHNpemUpKQoreworICAgIG1fcm9vdCA9IG5ldyBOb2RlKCk7
CisgICAgbV9yb290LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBtX3Jvb3QtPmxhcmdlc3RGcmVlID0gbV9zaXplOwor
ICAgIG1fcm9vdC0+cGFyZW50ID0gMDsKKyAgICBtX3Jvb3QtPmxlZnQgPSAwOworICAgIG1fcm9v
dC0+cmlnaHQgPSAwOworICAgIG1fbm9kZUNvdW50ID0gMTsKKyAgICBzZXRNaW5pbXVtQWxsb2Nh
dGlvbihXZWJDb3JlOjpJbnRTaXplKDgsIDgpKTsKK30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6
On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCit7CisgICAgZnJlZU5vZGUobV9yb290KTsKK30KKwor
dm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBp
ZiAobm9kZSkgeworICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKKyAgICAgICAgZnJlZU5v
ZGUobm9kZS0+cmlnaHQpOworICAgIH0KKyAgICBkZWxldGUgbm9kZTsKK30KKwordm9pZCBHZW5l
cmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit7
CisgICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHNpemUp
KTsKKworICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkKKyAgICAgICAgcmV0
dXJuOyAvLyBObyBjaGFuZ2UuCisKKyAgICBpZiAoIW1fcm9vdC0+bGVmdCAmJiBtX3Jvb3QtPmxh
cmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7CisgICAgICAgIC8vIE5vIGFsbG9jYXRpb25zIGhhdmUg
b2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUuCisgICAgICAgIG1fcm9vdC0+
cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJlbnQg
cm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCisgICAgTm9kZSogb2xkUm9vdCA9IG1fcm9vdDsKKyAg
ICBTcGxpdCBzcGxpdDsKKyAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdodCgp
KQorICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgIGVsc2UKKyAgICAgICAgc3BsaXQgPSBT
cGxpdE9uWTsKKworICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6ZSkgewor
ICAgICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndpZHRoKCkpCisgICAg
ICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICBlbHNlIGlmIChtX3Jvb3QtPnJlY3Qu
aGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9u
WDsKKyAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUoKTsKKyAgICAgICAgTm9kZSogcmln
aHQgPSBuZXcgTm9kZSgpOworICAgICAgICBtX25vZGVDb3VudCArPSAyOworICAgICAgICBtX3Jv
b3QtPnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgcGFyZW50LT5wYXJlbnQgPSAwOworICAgICAg
ICBwYXJlbnQtPmxlZnQgPSBtX3Jvb3Q7CisgICAgICAgIHBhcmVudC0+cmlnaHQgPSByaWdodDsK
KyAgICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7CisgICAg
ICAgIHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHJpZ2h0LT5sZWZ0ID0gMDsKKyAg
ICAgICAgcmlnaHQtPnJpZ2h0ID0gMDsKKyAgICAgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gbV9y
b290LT5yZWN0LnNpemUoKTsKKyAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7CisgICAg
ICAgICAgICBwYXJlbnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCks
IG1fcm9vdC0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCkg
KiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBX
ZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwg
bV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwg
bV9yb290LT5yZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBh
cmVudC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5y
ZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5y
ZWN0LmhlaWdodCgpICogMik7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6Oklu
dFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+cmVjdC53
aWR0aCgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJl
Y3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIHNwbGl0ID0gKHNwbGl0ID09IFNwbGl0
T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7CisgICAgICAgIG1fcm9vdCA9IHBhcmVudDsKKyAg
ICB9CisgICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBmaXRzV2l0aGluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUxLCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzaXplMikKK3sKKyAgICByZXR1cm4gc2l6ZTEud2lkdGgoKSA8PSBzaXpl
Mi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNpemUyLmhlaWdodCgpOworfQorCitXZWJD
b3JlOjpJbnRSZWN0IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzaXplKQoreworICAgIFdlYkNvcmU6OkludFNpemUgcm91bmRlZCA9IHJvdW5k
QWxsb2NhdGlvbihzaXplKTsKKyAgICByb3VuZGVkID0gV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28o
cm91bmRlZCk7CisgICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8IHJvdW5kZWQud2lkdGgo
KSA+IG1fc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPD0gMCB8fCBy
b3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6SW50UmVjdCgpOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZy
b21Ob2RlKHJvdW5kZWQsIG1fcm9vdCk7CisgICAgaWYgKHBvaW50LngoKSA+PSAwKQorICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdChwb2ludCwgc2l6ZSk7CisgICAgcmV0dXJuIFdlYkNv
cmU6OkludFJlY3QoKTsKK30KKworV2ViQ29yZTo6SW50UG9pbnQgR2VuZXJhbEFyZWFBbGxvY2F0
b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgTm9kZSog
bm9kZSkKK3sKKyAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8gaW5zZXJ0IGludG8sIHdoaWNo
IHNob3VsZCBiZQorICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgdW51c2Vk
IHNwYWNlIHRoYXQgaXMKKyAgICAvLyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHJlcXVlc3Rl
ZCBzaXplLgorICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIC8vIEdvIGRvd24gYSBsZXZlbCBh
bmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0CisgICAgICAgIC8vIHN1Yi10cmVlIGNv
bnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgorICAgICAgICBOb2RlKiBsZWZ0
ID0gbm9kZS0+bGVmdDsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5yaWdodDsKKyAgICAg
ICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5sYXJnZXN0RnJlZSkpIHsKKyAg
ICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5sYXJnZXN0RnJl
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSA8IHJp
Z2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCisgICAgICAgICAgICAgICAgICAgIHx8IGxlZnQtPmxh
cmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1ZXMgbWF5IGJlIGEgbGl0dGxl
IG92ZXJzaXplZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gdHJ5IHRoZSBsZWZ0IHN1Yi10
cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KKyAgICAgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6SW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxlZnQpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUZy
b21Ob2RlKHNpemUsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bm9kZSA9IHJpZ2h0OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbm9kZSA9
IGxlZnQ7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdo
dC0+bGFyZ2VzdEZyZWUpKQorICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OworICAgICAgICBlbHNl
IGlmIChsZWZ0IHx8IHJpZ2h0KSB7CisgICAgICAgICAgICAvLyBOZWl0aGVyIHN1Yi1ub2RlIGhh
cyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAgICAgICAgIHJldHVybiBXZWJD
b3JlOjpJbnRQb2ludCgtMSwgLTEpOworICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6
ZSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNw
bGl0IHRoaXMgbm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPworICAgICAgICAgICAgU3BsaXQgc3Bs
aXQ7CisgICAgICAgICAgICBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lk
dGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAg
ICAgICAgICAgICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlvbjogY2hvb3NlIHRoZSBpbnZl
cnNlIG9mCisgICAgICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBub2RlJ3Mgc3BsaXQgZGlyZWN0
aW9uIHRvIHRyeSB0byBiYWxhbmNlCisgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB3YXN0ZWQg
c3BhY2UgYXMgZnVydGhlciBzdWJkaXZpc2lvbnMgaGFwcGVuLgorICAgICAgICAgICAgICAgIGlm
IChub2RlLT5wYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+cGFyZW50LT5sZWZ0
LT5yZWN0LngoKSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LngoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5wYXJlbnQpCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0aCgpID49IG5vZGUtPnJlY3QuaGVpZ2h0
KCkpCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNpemUoc2l6ZS53aWR0aCgpICog
Miwgc2l6ZS5oZWlnaHQoKSksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAg
IC8vIFNwbGl0IGFsb25nIHRoZSBYIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9
IFNwbGl0T25YOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6Oklu
dFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVl
KSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBZIGRpcmVjdGlvbi4KKyAg
ICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhlciAtIGFsbG9jYXRlIHRoaXMgbm9k
ZS4KKyAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IFdlYkNvcmU6OkludFNpemUo
MCwgMCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28gYXJvdW5kIGFnYWluIHVzaW5n
IHRoZSBsZWZ0IHN1Yi10cmVlLgorICAgICAgICAgICAgbm9kZSA9IHNwbGl0Tm9kZShub2RlLCBz
cGxpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDYW5ub3QgcG9zc2libHkg
Zml0IGludG8gdGhpcyBub2RlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KC0xLCAtMSk7Cit9CisKK0dlbmVyYWxBcmVh
QWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlCisgICAgKE5v
ZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQoreworICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9kZSgpOwor
ICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKKyAgICBtX25vZGVDb3VudCArPSAyOworICAg
IGxlZnQtPnBhcmVudCA9IG5vZGU7CisgICAgbGVmdC0+bGVmdCA9IDA7CisgICAgbGVmdC0+cmln
aHQgPSAwOworICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAgIHJpZ2h0LT5sZWZ0ID0gMDsK
KyAgICByaWdodC0+cmlnaHQgPSAwOworICAgIG5vZGUtPmxlZnQgPSBsZWZ0OworICAgIG5vZGUt
PnJpZ2h0ID0gcmlnaHQ7CisKKyAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKKyAgICAgICAg
bGVmdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIG5vZGUtPnJlY3Qu
eSgpLAorICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9kZS0+cmVjdC5oZWln
aHQoKSk7CisgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChsZWZ0LT5yZWN0
Lm1heFgoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkg
LyAyLCBub2RlLT5yZWN0LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0LT5y
ZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCisg
ICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAyKTsK
KyAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBs
ZWZ0LT5yZWN0Lm1heFkoKSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+
cmVjdC5oZWlnaHQoKSAvIDIpOworICAgIH0KKworICAgIGxlZnQtPmxhcmdlc3RGcmVlID0gbGVm
dC0+cmVjdC5zaXplKCk7CisgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gcmlnaHQtPnJlY3Quc2l6
ZSgpOworICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gcmlnaHQtPmxhcmdlc3RGcmVlOworICAgIHJl
dHVybiBsZWZ0OworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjp1cGRhdGVMYXJnZXN0
RnJlZShOb2RlKiBub2RlKQoreworICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudCkpIHsK
KyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJbnRTaXplKAorICAgICAgICAg
ICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSwgbm9kZS0+cmlnaHQt
Pmxhcmdlc3RGcmVlLndpZHRoKCkpLAorICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+
bGFyZ2VzdEZyZWUuaGVpZ2h0KCksIG5vZGUtPnJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkK
KyAgICAgICAgICAgICk7CisgICAgfQorfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpy
ZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgLy8gTG9jYXRlIHRo
ZSBub2RlIHRoYXQgY29udGFpbnMgdGhlIGFsbG9jYXRlZCByZWdpb24uCisgICAgTm9kZSogbm9k
ZSA9IG1fcm9vdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IHJlY3QubG9jYXRpb24o
KTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+bGVmdCAmJiBub2RlLT5s
ZWZ0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5sZWZ0
OworICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdodCAmJiBub2RlLT5yaWdodC0+cmVjdC5jb250
YWlucyhwb2ludCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7CisgICAgICAgIGVs
c2UgaWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsgLy8gUG9pbnQgaXMgY29tcGxldGVseSBv
dXRzaWRlIHRoZSB0cmVlLgorICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIE1hcmsgdGhlIG5vZGUgYXMgZnJlZSBhbmQgdGhlbiB3b3JrIHVwd2FyZHMgdGhy
b3VnaCB0aGUgdHJlZQorICAgIC8vIHJlY29tYmluaW5nIGFuZCBkZWxldGluZyBub2RlcyB1bnRp
bCB3ZSByZWFjaCBhIHNpYmxpbmcKKyAgICAvLyB0aGF0IGlzIHN0aWxsIGFsbG9jYXRlZC4KKyAg
ICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOworICAgIHdoaWxlIChub2Rl
LT5wYXJlbnQpIHsKKyAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdCA9PSBub2RlKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5yaWdodC0+bGFyZ2VzdEZyZWUgIT0gbm9kZS0+
cGFyZW50LT5yaWdodC0+cmVjdC5zaXplKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0LT5sYXJnZXN0
RnJlZSAhPSBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3Quc2l6ZSgpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnQ7CisgICAgICAg
IGZyZWVOb2RlKG5vZGUtPmxlZnQpOworICAgICAgICBmcmVlTm9kZShub2RlLT5yaWdodCk7Cisg
ICAgICAgIG1fbm9kZUNvdW50IC09IDI7CisgICAgICAgIG5vZGUtPmxlZnQgPSAwOworICAgICAg
ICBub2RlLT5yaWdodCA9IDA7CisgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVj
dC5zaXplKCk7CisgICAgfQorCisgICAgLy8gTWFrZSB0aGUgcmVzdCBvZiBvdXIgYW5jZXN0b3Jz
IGhhdmUgdGhlIGNvcnJlY3QgImxhcmdlc3QgZnJlZSBzaXplIi4KKyAgICB1cGRhdGVMYXJnZXN0
RnJlZShub2RlKTsKK30KKworaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZUNvdW50ICogc2l6ZW9mKE5vZGUpOworfQorCit9IC8v
IG5hbWVzcGFjZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQXJlYUFsbG9jYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3ZjJlZGFjOTYy
NTVmMjIyYjVhZjc4NThiMzUxMjEyODU0M2VlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2Nh
dG9yLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqCisgKi8KKworI2lmbmRlZiBBcmVhQWxsb2NhdG9yX2gKKyNkZWZpbmUgQXJlYUFsbG9jYXRv
cl9oCisKKyNpbmNsdWRlIDxJbnRQb2ludC5oPgorI2luY2x1ZGUgPEludFJlY3QuaD4KKyNpbmNs
dWRlIDxJbnRTaXplLmg+CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2lubGluZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bWJlcikKK3sK
KyAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZUd28gZm9yIGFu
IGludGVnZXIuCisgICAgLS1udW1iZXI7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAxOworICAg
IG51bWJlciB8PSBudW1iZXIgPj4gMjsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDQ7CisgICAg
bnVtYmVyIHw9IG51bWJlciA+PiA4OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTY7CisgICAg
bnVtYmVyKys7CisgICAgcmV0dXJuIG51bWJlcjsKK30KKworaW5saW5lIEludFNpemUgbmV4dFBv
d2VyT2ZUd28oY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShuZXh0
UG93ZXJPZlR3byhzaXplLndpZHRoKCkpLCBuZXh0UG93ZXJPZlR3byhzaXplLmhlaWdodCgpKSk7
Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBBcmVhQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBBcmVhQWxsb2NhdG9yKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5BcmVhQWxsb2NhdG9yKCk7CisKKyAgICBXZWJD
b3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIFdlYkNv
cmU6OkludFNpemUgbWluaW11bUFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21pbkFsbG9j
OyB9CisgICAgdm9pZCBzZXRNaW5pbXVtQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplKSB7IG1fbWluQWxsb2MgPSBzaXplOyB9CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1h
cmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9CisgICAgdm9pZCBzZXRNYXJnaW4oY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSAmbWFyZ2luKSB7IG1fbWFyZ2luID0gbWFyZ2luOyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lk
IGV4cGFuZEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCBhbGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2l6ZTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWluQWxsb2M7CisgICAgV2ViQ29y
ZTo6SW50U2l6ZSBtX21hcmdpbjsKKworICAgIFdlYkNvcmU6OkludFNpemUgcm91bmRBbGxvY2F0
aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsKK307CisKK2NsYXNzIEdlbmVyYWxB
cmVhQWxsb2NhdG9yIDogcHVibGljIEFyZWFBbGxvY2F0b3IgeworcHVibGljOgorICAgIEdlbmVy
YWxBcmVhQWxsb2NhdG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5H
ZW5lcmFsQXJlYUFsbG9jYXRvcigpOworCisgICAgdm9pZCBleHBhbmQoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOworICAgIFdlYkNvcmU6OkludFJlY3QgYWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOworICAgIHZvaWQgcmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Cisg
ICAgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZW51bSBTcGxpdCB7IFNw
bGl0T25YLCBTcGxpdE9uWSB9OworCisgICAgc3RydWN0IE5vZGUgeworICAgICAgICBXZWJDb3Jl
OjpJbnRSZWN0IHJlY3Q7CisgICAgICAgIFdlYkNvcmU6OkludFNpemUgbGFyZ2VzdEZyZWU7Cisg
ICAgICAgIE5vZGUqIHBhcmVudDsKKyAgICAgICAgTm9kZSogbGVmdDsKKyAgICAgICAgTm9kZSog
cmlnaHQ7CisgICAgfTsKKworICAgIE5vZGUqIG1fcm9vdDsKKyAgICBpbnQgbV9ub2RlQ291bnQ7
CisKKyAgICBzdGF0aWMgdm9pZCBmcmVlTm9kZShOb2RlKik7CisgICAgV2ViQ29yZTo6SW50UG9p
bnQgYWxsb2NhdGVGcm9tTm9kZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgTm9kZSopOworICAg
IE5vZGUqIHNwbGl0Tm9kZShOb2RlKiwgU3BsaXQpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUxh
cmdlc3RGcmVlKE5vZGUqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQXJlYUFsbG9jYXRvcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWE1
NDE4ZjFlYWFhMzQ4N2I0ZTQyNGI5YTk1NjIwMjA4MzA5NzU0ZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1Vw
ZGF0ZUF0bGFzLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVwZGF0ZUF0bGFz
LmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50
IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncykKKyAgICA6IG1fY2xpZW50
KGNsaWVudCkKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgLCBtX2luYWN0aXZpdHlJblNlY29u
ZHMoMCkKKyAgICAsIG1faXNWYWlsZCh0cnVlKQoreworICAgIHN0YXRpYyBpbnQgbmV4dElEID0g
MDsKKyAgICBtX0lEID0gKytuZXh0SUQ7CisgICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZU
d28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOworICAgIG1fc3VyZmFjZSA9IFNoYXJl
YWJsZVN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9y
dHNHcmFwaGljc1N1cmZhY2UpOworCisgICAgaWYgKCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRsZSht
X2hhbmRsZSkpIHsKKyAgICAgICAgbV9pc1ZhaWxkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9jbGllbnQtPmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQsIG1faGFuZGxlKTsK
K30KKworVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCit7CisgICAgaWYgKG1faXNWYWlsZCkK
KyAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOworfQorCit2b2lkIFVw
ZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fYXJlYUFsbG9j
YXRvcikgeworICAgICAgICBtX2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihuZXcgR2VuZXJhbEFy
ZWFBbGxvY2F0b3Ioc2l6ZSgpKSk7CisgICAgICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWluaW11
bUFsbG9jYXRpb24oSW50U2l6ZSgzMiwgMzIpKTsKKyAgICB9Cit9CisKK3ZvaWQgVXBkYXRlQXRs
YXM6OmRpZFN3YXBCdWZmZXJzKCkKK3sKKyAgICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIoKTsKK30K
KworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5n
T25BdmFpbGFibGVCdWZmZXIoaW50JiBhdGxhc0lELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
aXplLCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyA9IDA7
CisgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworICAgIEludFJlY3QgcmVjdCA9IG1fYXJlYUFs
bG9jYXRvci0+YWxsb2NhdGUoc2l6ZSk7CisKKyAgICAvLyBObyBhdmFpbGFibGUgYnVmZmVyIHdh
cyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7CisKKyAgICBpZiAoIW1faXNW
YWlsZCkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOworCisg
ICAgYXRsYXNJRCA9IG1fSUQ7CisKKyAgICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJz
LCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRlcy4KKyAgICBvZmZzZXQgPSByZWN0LmxvY2F0aW9uKCk7
CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9zdXJmYWNl
LT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7CisKKyAgICBpZiAoZmxhZ3MoKSAmIFNoYXJl
YWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSkgeworICAgICAgICBncmFwaGljc0NvbnRleHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5maWxsUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHNpemUpLCBDb2xvcjo6dHJh
bnNwYXJlbnQsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKK30KKworfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Y2VmZTljOTc5NDIx
NTg2MjczZjRlMGNkMzA5YTIwMjM0YzcxYWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMu
aApAQCAtMCwwICsxLDgyIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBVcGRhdGVBdGxhc19oCisjZGVmaW5lIFVwZGF0ZUF0bGFzX2gKKworI2luY2x1
ZGUgIkFyZWFBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2hh
cmVhYmxlU3VyZmFjZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UG9pbnQ7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVBdGxhc0NsaWVudCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25z
dCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKSA9IDA7Cit9OworCitjbGFzcyBVcGRhdGVBdGxhcyB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMpOworcHVibGljOgorICAgIFVw
ZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiwgaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0
bWFwOjpGbGFncyk7CisgICAgflVwZGF0ZUF0bGFzKCk7CisKKyAgICBpbmxpbmUgV2ViQ29yZTo6
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KKworICAg
IC8vIFJldHVybnMgYSBudWxsIHBvaW50ZXIgb2YgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZl
ci4KKyAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGlu
Z09uQXZhaWxhYmxlQnVmZmVyKGludCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpOworICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsK
KyAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFn
czsgfQorCisgICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCisgICAgewor
ICAgICAgICBBU1NFUlQoIWlzSW5Vc2UoKSk7CisgICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25k
cyArPSBzZWNvbmRzOworICAgIH0KKyAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgY29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7CisgICAg
ICAgIHJldHVybiBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFu
Y2U7CisgICAgfQorICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFsbG9j
YXRvcjsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworCitw
cml2YXRlOgorICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBPd25QdHI8R2Vu
ZXJhbEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKKyAgICBTaGFyZWFibGVCaXRtYXA6
OkZsYWdzIG1fZmxhZ3M7CisgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IG1fc3VyZmFjZTsK
KyAgICBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgbV9oYW5kbGU7CisgICAgZG91YmxlIG1faW5h
Y3Rpdml0eUluU2Vjb25kczsKKyAgICBpbnQgbV9JRDsKKyAgICBib29sIG1faXNWYWlsZDsKK307
CisKK30KKyNlbmRpZgorI2VuZGlmIC8vIFVwZGF0ZUF0bGFzX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5YTU0MThmMWVhYWEzNDg3YjRlNDI0YjlhOTU2MjAyMDgzMDk3NTRlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw5OSArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCi0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1VcGRhdGVBdGxhczo6VXBk
YXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgU2hhcmVh
YmxlQml0bWFwOjpGbGFncyBmbGFncykKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1f
ZmxhZ3MoZmxhZ3MpCi0gICAgLCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkKLSAgICAsIG1faXNW
YWlsZCh0cnVlKQotewotICAgIHN0YXRpYyBpbnQgbmV4dElEID0gMDsKLSAgICBtX0lEID0gKytu
ZXh0SUQ7Ci0gICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1lbnNp
b24sIGRpbWVuc2lvbikpOwotICAgIG1fc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0
ZShzaXplLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9ydHNHcmFwaGljc1N1cmZhY2Up
OwotCi0gICAgaWYgKCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRsZShtX2hhbmRsZSkpIHsKLSAgICAg
ICAgbV9pc1ZhaWxkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jbGll
bnQtPmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQsIG1faGFuZGxlKTsKLX0KLQotVXBkYXRlQXRsYXM6
On5VcGRhdGVBdGxhcygpCi17Ci0gICAgaWYgKG1faXNWYWlsZCkKLSAgICAgICAgbV9jbGllbnQt
PnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOwotfQotCi12b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExh
eW91dElmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fYXJlYUFsbG9jYXRvcikgewotICAgICAgICBt
X2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihuZXcgR2VuZXJhbEFyZWFBbGxvY2F0b3Ioc2l6ZSgp
KSk7Ci0gICAgICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWluaW11bUFsbG9jYXRpb24oSW50U2l6
ZSgzMiwgMzIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJz
KCkKLXsKLSAgICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIoKTsKLX0KLQotUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
aW50JiBhdGxhc0lELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zm
c2V0KQotewotICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyA9IDA7Ci0gICAgYnVpbGRMYXlvdXRJ
Zk5lZWRlZCgpOwotICAgIEludFJlY3QgcmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2NhdGUo
c2l6ZSk7Ci0KLSAgICAvLyBObyBhdmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5n
IG51bGwuCi0gICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQ+KCk7Ci0KLSAgICBpZiAoIW1faXNWYWlsZCkKLSAgICAgICAgcmV0
dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwotCi0gICAgYXRsYXNJRCA9IG1fSUQ7
Ci0KLSAgICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIg
dXBkYXRlcy4KLSAgICBvZmZzZXQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGljc0Nv
bnRleHQocmVjdCk7Ci0KLSAgICBpZiAoZmxhZ3MoKSAmIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9y
dHNBbHBoYSkgewotICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVDb3B5KTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHNpemUpLCBDb2xvcjo6dHJhbnNwYXJlbnQsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3JhcGhpY3ND
b250ZXh0LnJlbGVhc2UoKTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3Y2VmZTljOTc5NDIxNTg2MjczZjRlMGNkMzA5YTIwMjM0YzcxYWQxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBA
QAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVXBkYXRl
QXRsYXNfaAotI2RlZmluZSBVcGRhdGVBdGxhc19oCi0KLSNpbmNsdWRlICJBcmVhQWxsb2NhdG9y
LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIK
LQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEludFBvaW50OwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFj
ZTo6SGFuZGxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyhpbnQg
YXRsYXNJRCkgPSAwOwotfTsKLQotY2xhc3MgVXBkYXRlQXRsYXMgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKLXB1YmxpYzoKLSAgICBVcGRhdGVBdGxhcyhVcGRhdGVB
dGxhc0NsaWVudCosIGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOwotICAg
IH5VcGRhdGVBdGxhcygpOwotCi0gICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgbnVs
bCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCi0gICAgUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZl
cihpbnQmIGF0bGFzSUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpJbnRQb2lu
dCYgb2Zmc2V0KTsKLSAgICB2b2lkIGRpZFN3YXBCdWZmZXJzKCk7Ci0gICAgU2hhcmVhYmxlQml0
bWFwOjpGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KLQotICAgIHZvaWQg
YWRkVGltZUluYWN0aXZlKGRvdWJsZSBzZWNvbmRzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFp
c0luVXNlKCkpOwotICAgICAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgKz0gc2Vjb25kczsKLSAg
ICB9Ci0gICAgYm9vbCBpc0luYWN0aXZlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0IGRv
dWJsZSBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2UgPSAzOwotICAgICAgICByZXR1cm4gbV9pbmFj
dGl2aXR5SW5TZWNvbmRzID4gaW5hY3RpdmVTZWNvbmRzVG9sZXJhbmNlOwotICAgIH0KLSAgICBi
b29sIGlzSW5Vc2UoKSBjb25zdCB7IHJldHVybiBtX2FyZWFBbGxvY2F0b3I7IH0KLQotcHJpdmF0
ZToKLSAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKLQotcHJpdmF0ZToKLSAgICBVcGRh
dGVBdGxhc0NsaWVudCogbV9jbGllbnQ7Ci0gICAgT3duUHRyPEdlbmVyYWxBcmVhQWxsb2NhdG9y
PiBtX2FyZWFBbGxvY2F0b3I7Ci0gICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdzOwot
ICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlIG1faGFuZGxlOwotICAgIGRvdWJsZSBtX2luYWN0aXZpdHlJblNlY29uZHM7
Ci0gICAgaW50IG1fSUQ7Ci0gICAgYm9vbCBtX2lzVmFpbGQ7Ci19OwotCi19Ci0jZW5kaWYKLSNl
bmRpZiAvLyBVcGRhdGVBdGxhc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177440</attachid>
            <date>2012-12-04 01:10:15 -0800</date>
            <delta_ts>2012-12-05 13:58:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103864-20121204010822.patch</filename>
            <type>text/plain</type>
            <size>51325</size>
            <attacher name="Jae Hyun Park">jaepark</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmFiMzY4ZmRkMDg4N2Nj
YjkwOWRjMmJhMjc5MWE5NzEzYTY3YjVlNC4uMzIwOGIwOGUxNWM5ODNlNzYzODRhNjE0OTVhNWZl
Yjk5ZWE2MDU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTEyLTAzICBKYWUg
SHl1biBQYXJrICA8amFlLnBhcmtAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0
ZWQgR3JhcGhpY3M6IE1vdmUgQXJlYUFsbG9jYXRvciBhbmQgVXBkYXRlQXRsYXMgdG8gQ29vcmRp
bmF0ZWRHcmFwaGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQXJlYUFsbG9jYXRvciBhbmQgVXBkYXRlQXRsYXMgYXJlIG9ubHkgdXNlZCBmb3IgQ29v
cmRpbmF0ZWQgR3JhcGhpY3MuCisgICAgICAgIFNvLCB0aGVzZSBzaG91bGQgYmUgbW92ZWQgdG8g
Q29vcmRpbmF0ZWRHcmFwaGljcyB0byBjbGFyaWZ5IHRoZSBjb2RlLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0LCBiZWNhdXNlIG5vIGNoYW5nZSBvZiBiZWhhdmlvci4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5jcHAuCisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjpBcmVhQWxs
b2NhdG9yKToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6fkFyZWFBbGxvY2F0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjpleHBhbmQpOgorICAgICAgICAoV2Vi
S2l0OjpBcmVhQWxsb2NhdG9yOjpleHBhbmRCeSk6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxv
Y2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjpvdmVyaGVh
ZCk6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnJvdW5kQWxsb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFsQXJlYUFsbG9jYXRv
cik6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjp+R2VuZXJhbEFyZWFB
bGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5v
ZGUpOgorICAgICAgICAoV2ViS2l0OjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKToKKyAg
ICAgICAgKFdlYktpdDo6Zml0c1dpdGhpbik6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVh
QWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2Nh
dG9yOjphbGxvY2F0ZUZyb21Ob2RlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxv
Y2F0b3I6OnNwbGl0Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2NhdG9y
Ojp1cGRhdGVMYXJnZXN0RnJlZSk6CisgICAgICAgIChXZWJLaXQ6OkdlbmVyYWxBcmVhQWxsb2Nh
dG9yOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYktpdDo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92
ZXJoZWFkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9BcmVhQWxsb2NhdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5oLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFBvd2VyT2ZU
d28pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQXJl
YUFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNpemUpOgorICAg
ICAgICAoV2ViS2l0OjpBcmVhQWxsb2NhdG9yOjptaW5pbXVtQWxsb2NhdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OkFyZWFBbGxvY2F0b3I6OnNldE1pbmltdW1BbGxvY2F0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6QXJlYUFsbG9jYXRvcjo6bWFyZ2luKToKKyAgICAgICAgKFdlYktpdDo6QXJlYUFs
bG9jYXRvcjo6c2V0TWFyZ2luKToKKyAgICAgICAgKEdlbmVyYWxBcmVhQWxsb2NhdG9yKToKKyAg
ICAgICAgKE5vZGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1VwZGF0ZUF0bGFzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAuCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpV
cGRhdGVBdGxhczo6flVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6
OmJ1aWxkTGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6ZGlk
U3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVBdGxhczo6YmVnaW5QYWludGlu
Z09uQXZhaWxhYmxlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmguCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChVcGRhdGVBdGxhc0NsaWVudCk6CisgICAgICAgIChV
cGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpzaXplKToKKyAgICAg
ICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmZsYWdzKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRl
QXRsYXM6OmFkZFRpbWVJbmFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUF0bGFzOjpp
c0luYWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQXRsYXM6OmlzSW5Vc2UpOgorCiAy
MDEyLTEyLTAzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFBERlBsdWdpbjogPGVtYmVkPiBhbmQgPG9iamVjdD4gUERGcyBhZmZlY3QgdGhlaXIgcGFy
ZW50IGZyYW1lJ3MgcGFnZSBzY2FsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCAwMjdhNzQzMDc5
ZTgzMmVjZDkyYjAxZjg3ZGI1MDE0MzBkYTdjOTk4Li40MDY5YzhiMzUxNDFkMmRmNjNkMDRkYjgz
NDMwYTlmZjRmNjYxNTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtNDgxLDExICs0ODEsOSBA
QCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0
Y2hlci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiAKLSAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5jcHAKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJs
YXkuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3Bw
Ci0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQ29udGV4dE1lbnUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cApAQCAtNDk1LDEwICs0OTMsMTIgQEAgU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViVW5kb1N0ZXAuY3BwCiAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9BcmVhQWxsb2NhdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvVXBkYXRlQXRsYXMuY3BwCiApCiAKIFNFVChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQppbmRleCAyZGQzNmUzOTg0MGM2ZjUxMTRlMDI1Nzk4ZTVhNTVjYTNlMjM2NjAzLi5l
NjQwODU5OTI3NDNhOTFmMDI0MjQ2ZDQ0ODg5MTc0MzU2OWYyNGQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAg
LTM2MywxOCArMzYzLDE4IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViU2VhcmNoUG9wdXBNZW51LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViVmlicmF0aW9uQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
cXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
QXJlYUFsbG9jYXRvci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9BcmVhQWxsb2NhdG9yLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUu
aCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvVXBkYXRlQXRsYXMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENv
bnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggXAotICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQ29udGV4dE1lbnUuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaCBcCkBAIC03NDQsMjEgKzc0
NCwyMSBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dl
YkRyYWdDbGllbnRRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvcXQvV2ViUG9wdXBNZW51UXQuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFs
bG9jYXRvci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RW5jb2RlckFkYXB0ZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRj
aGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCisg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVB
dGxhcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVy
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvVXBkYXRlQXRsYXMuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAyZWZlYjVmMWFlZmE3ZTdhZjIyNTE3NDFlZjY3YjE0
MTFiNTczYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJBcmVhQWxsb2Nh
dG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1BcmVhQWxsb2NhdG9yOjpBcmVhQWxsb2Nh
dG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAg
ICAsIG1fbWluQWxsb2MoMSwgMSkKLSAgICAsIG1fbWFyZ2luKDAsIDApCi17Ci19Ci0KLUFyZWFB
bGxvY2F0b3I6On5BcmVhQWxsb2NhdG9yKCkKLXsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9yOjpl
eHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBtX3Np
emUuZXhwYW5kZWRUbyhzaXplKTsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9yOjpleHBhbmRCeShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6ZSArPSBzaXplOwotfQot
Ci12b2lkIEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpCi17
Ci19Ci0KLWludCBBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLVdlYkNvcmU6OkludFNpemUgQXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0aW9u
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Ci17Ci0gICAgaW50IHdpZHRoID0g
c2l6ZS53aWR0aCgpICsgbV9tYXJnaW4ud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5o
ZWlnaHQoKSArIG1fbWFyZ2luLmhlaWdodCgpOwotICAgIGludCBleHRyYSA9IHdpZHRoICUgbV9t
aW5BbGxvYy53aWR0aCgpOwotICAgIGlmIChleHRyYSkKLSAgICAgICAgd2lkdGggKz0gbV9taW5B
bGxvYy53aWR0aCgpIC0gZXh0cmE7Ci0gICAgZXh0cmEgPSBoZWlnaHQgJSBtX21pbkFsbG9jLmhl
aWdodCgpOwotICAgIGlmIChleHRyYSkKLSAgICAgICAgaGVpZ2h0ICs9IG1fbWluQWxsb2MuaGVp
Z2h0KCkgLSBleHRyYTsKLQotICAgIHJldHVybiBXZWJDb3JlOjpJbnRTaXplKHdpZHRoLCBoZWln
aHQpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6R2VuZXJhbEFyZWFBbGxvY2F0b3IoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLSAgICA6IEFyZWFBbGxvY2F0b3IoV2ViQ29yZTo6
bmV4dFBvd2VyT2ZUd28oc2l6ZSkpCi17Ci0gICAgbV9yb290ID0gbmV3IE5vZGUoKTsKLSAgICBt
X3Jvb3QtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOwotICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7Ci0gICAgbV9y
b290LT5wYXJlbnQgPSAwOwotICAgIG1fcm9vdC0+bGVmdCA9IDA7Ci0gICAgbV9yb290LT5yaWdo
dCA9IDA7Ci0gICAgbV9ub2RlQ291bnQgPSAxOwotICAgIHNldE1pbmltdW1BbGxvY2F0aW9uKFdl
YkNvcmU6OkludFNpemUoOCwgOCkpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6fkdlbmVy
YWxBcmVhQWxsb2NhdG9yKCkKLXsKLSAgICBmcmVlTm9kZShtX3Jvb3QpOwotfQotCi12b2lkIEdl
bmVyYWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9kZShOb2RlKiBub2RlKQotewotICAgIGlmIChub2Rl
KSB7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOwotICAgICAgICBmcmVlTm9kZShub2Rl
LT5yaWdodCk7Ci0gICAgfQotICAgIGRlbGV0ZSBub2RlOwotfQotCi12b2lkIEdlbmVyYWxBcmVh
QWxsb2NhdG9yOjpleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBB
cmVhQWxsb2NhdG9yOjpleHBhbmQoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28oc2l6ZSkpOwotCi0g
ICAgaWYgKG1fcm9vdC0+cmVjdC5zaXplKCkgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47IC8v
IE5vIGNoYW5nZS4KLQotICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1fcm9vdC0+bGFyZ2VzdEZy
ZWUud2lkdGgoKSA+IDApIHsKLSAgICAgICAgLy8gTm8gYWxsb2NhdGlvbnMgaGF2ZSBvY2N1cnJl
ZCwgc28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KLSAgICAgICAgbV9yb290LT5yZWN0ID0g
V2ViQ29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
LSAgICAgICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIEFkZCBleHRyYSBub2RlcyBhYm92ZSB0aGUgY3VycmVudCByb290IHRv
IGV4cGFuZCB0aGUgdHJlZS4KLSAgICBOb2RlKiBvbGRSb290ID0gbV9yb290OwotICAgIFNwbGl0
IHNwbGl0OwotICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3NpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgZWxzZQotICAgICAgICBzcGxpdCA9IFNwbGl0T25Z
OwotCi0gICAgd2hpbGUgKG1fcm9vdC0+cmVjdC5zaXplKCkgIT0gbV9zaXplKSB7Ci0gICAgICAg
IGlmIChtX3Jvb3QtPnJlY3Qud2lkdGgoKSA9PSBtX3NpemUud2lkdGgoKSkKLSAgICAgICAgICAg
IHNwbGl0ID0gU3BsaXRPblk7Ci0gICAgICAgIGVsc2UgaWYgKG1fcm9vdC0+cmVjdC5oZWlnaHQo
KSA9PSBtX3NpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAg
ICAgICBOb2RlKiBwYXJlbnQgPSBuZXcgTm9kZSgpOwotICAgICAgICBOb2RlKiByaWdodCA9IG5l
dyBOb2RlKCk7Ci0gICAgICAgIG1fbm9kZUNvdW50ICs9IDI7Ci0gICAgICAgIG1fcm9vdC0+cGFy
ZW50ID0gcGFyZW50OwotICAgICAgICBwYXJlbnQtPnBhcmVudCA9IDA7Ci0gICAgICAgIHBhcmVu
dC0+bGVmdCA9IG1fcm9vdDsKLSAgICAgICAgcGFyZW50LT5yaWdodCA9IHJpZ2h0OwotICAgICAg
ICBwYXJlbnQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKLSAgICAgICAgcmln
aHQtPnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgcmlnaHQtPmxlZnQgPSAwOwotICAgICAgICBy
aWdodC0+cmlnaHQgPSAwOwotICAgICAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3QtPnJl
Y3Quc2l6ZSgpOwotICAgICAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKLSAgICAgICAgICAg
IHBhcmVudC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290
LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9yb290LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBt
X3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5y
ZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcmVudC0+cmVj
dCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0
LndpZHRoKCksIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSAqIDIpOwotICAgICAgICAgICAgcmlnaHQt
PnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55
KCkgKyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgp
KTsKLSAgICAgICAgfQotICAgICAgICBzcGxpdCA9IChzcGxpdCA9PSBTcGxpdE9uWCA/IFNwbGl0
T25ZIDogU3BsaXRPblgpOwotICAgICAgICBtX3Jvb3QgPSBwYXJlbnQ7Ci0gICAgfQotICAgIHVw
ZGF0ZUxhcmdlc3RGcmVlKG9sZFJvb3QpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZml0c1dp
dGhpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplMSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2l6ZTIpCi17Ci0gICAgcmV0dXJuIHNpemUxLndpZHRoKCkgPD0gc2l6ZTIud2lkdGgoKSAm
JiBzaXplMS5oZWlnaHQoKSA8PSBzaXplMi5oZWlnaHQoKTsKLX0KLQotV2ViQ29yZTo6SW50UmVj
dCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2l6ZSkKLXsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kZWQgPSByb3VuZEFsbG9jYXRpb24o
c2l6ZSk7Ci0gICAgcm91bmRlZCA9IFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHJvdW5kZWQpOwot
ICAgIGlmIChyb3VuZGVkLndpZHRoKCkgPD0gMCB8fCByb3VuZGVkLndpZHRoKCkgPiBtX3NpemUu
d2lkdGgoKQotICAgICAgICB8fCByb3VuZGVkLmhlaWdodCgpIDw9IDAgfHwgcm91bmRlZC5oZWln
aHQoKSA+IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3Qo
KTsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShyb3Vu
ZGVkLCBtX3Jvb3QpOwotICAgIGlmIChwb2ludC54KCkgPj0gMCkKLSAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkludFJlY3QocG9pbnQsIHNpemUpOwotICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0
KCk7Ci19Ci0KLVdlYkNvcmU6OkludFBvaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0
ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIE5vZGUqIG5vZGUpCi17Ci0g
ICAgLy8gRmluZCB0aGUgYmVzdCBub2RlIHRvIGluc2VydCBpbnRvLCB3aGljaCBzaG91bGQgYmUK
LSAgICAvLyBhIG5vZGUgd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHVudXNlZCBzcGFjZSB0aGF0
IGlzCi0gICAgLy8gYmlnIGVub3VnaCB0byBjb250YWluIHRoZSByZXF1ZXN0ZWQgc2l6ZS4KLSAg
ICB3aGlsZSAobm9kZSkgewotICAgICAgICAvLyBHbyBkb3duIGEgbGV2ZWwgYW5kIGRldGVybWlu
ZSBpZiB0aGUgbGVmdCBvciByaWdodAotICAgICAgICAvLyBzdWItdHJlZSBjb250YWlucyB0aGUg
YmVzdCBjaGFuY2Ugb2YgYWxsb2NhdGlvbi4KLSAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmxl
ZnQ7Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+cmlnaHQ7Ci0gICAgICAgIGlmIChsZWZ0
ICYmIGZpdHNXaXRoaW4oc2l6ZSwgbGVmdC0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICBp
ZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCkgPCByaWdodC0+bGFyZ2Vz
dEZyZWUud2lkdGgoKQotICAgICAgICAgICAgICAgICAgICB8fCBsZWZ0LT5sYXJnZXN0RnJlZS5o
ZWlnaHQoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgbGFyZ2VzdEZyZWUgdmFsdWVzIG1heSBiZSBhIGxpdHRsZSBvdmVyc2l6ZWQs
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNvIHRyeSB0aGUgbGVmdCBzdWItdHJlZSBhbmQgdGhl
biB0aGUgcmlnaHQgc3ViLXRyZWUuCi0gICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkludFBv
aW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShzaXplLCBsZWZ0KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHBvaW50LngoKSA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHBvaW50OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVGcm9tTm9kZShzaXpl
LCByaWdodCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGUgPSByaWdo
dDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG5vZGUgPSBsZWZ0OwotICAg
ICAgICB9IGVsc2UgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxhcmdlc3RG
cmVlKSkKLSAgICAgICAgICAgIG5vZGUgPSByaWdodDsKLSAgICAgICAgZWxzZSBpZiAobGVmdCB8
fCByaWdodCkgewotICAgICAgICAgICAgLy8gTmVpdGhlciBzdWItbm9kZSBoYXMgZW5vdWdoIHNw
YWNlIHRvIGFsbG9jYXRlIGZyb20uCi0gICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UG9p
bnQoLTEsIC0xKTsKLSAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKHNpemUsIG5vZGUtPmxh
cmdlc3RGcmVlKSkgewotICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBzcGxpdCB0aGlzIG5v
ZGUgaW50byBzbWFsbGVyIHBpZWNlcz8KLSAgICAgICAgICAgIFNwbGl0IHNwbGl0OwotICAgICAg
ICAgICAgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBz
aXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgICAg
IC8vIFNwbGl0IGluIGVpdGhlciBkaXJlY3Rpb246IGNob29zZSB0aGUgaW52ZXJzZSBvZgotICAg
ICAgICAgICAgICAgIC8vIHRoZSBwYXJlbnQgbm9kZSdzIHNwbGl0IGRpcmVjdGlvbiB0byB0cnkg
dG8gYmFsYW5jZQotICAgICAgICAgICAgICAgIC8vIG91dCB0aGUgd2FzdGVkIHNwYWNlIGFzIGZ1
cnRoZXIgc3ViZGl2aXNpb25zIGhhcHBlbi4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGFy
ZW50Ci0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC54KCkg
PT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC54KCkpCi0gICAgICAgICAgICAgICAgICAgIHNw
bGl0ID0gU3BsaXRPblg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cGFyZW50KQot
ICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPnJlY3Qud2lkdGgoKSA+PSBub2RlLT5yZWN0LmhlaWdodCgpKQotICAgICAg
ICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVp
Z2h0KCkpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBTcGxpdCBh
bG9uZyB0aGUgWCBkaXJlY3Rpb24uCi0gICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBTcGxpdCBhbG9uZyB0aGUgWSBkaXJlY3Rpb24uCi0gICAgICAgICAgICAg
ICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gQ2Fubm90IHNwbGl0IGZ1cnRoZXIgLSBhbGxvY2F0ZSB0aGlzIG5vZGUuCi0gICAgICAg
ICAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJbnRTaXplKDAsIDApOwotICAg
ICAgICAgICAgICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG5vZGUpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlLT5yZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFNwbGl0IHRoZSBub2RlLCB0aGVuIGdvIGFyb3VuZCBhZ2FpbiB1c2luZyB0aGUgbGVmdCBz
dWItdHJlZS4KLSAgICAgICAgICAgIG5vZGUgPSBzcGxpdE5vZGUobm9kZSwgc3BsaXQpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2Fubm90IHBvc3NpYmx5IGZpdCBpbnRvIHRo
aXMgbm9kZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6
Tm9kZSogR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnNwbGl0Tm9kZQotICAgIChOb2RlKiBub2RlLCBT
cGxpdCBzcGxpdCkKLXsKLSAgICBOb2RlKiBsZWZ0ID0gbmV3IE5vZGUoKTsKLSAgICBOb2RlKiBy
aWdodCA9IG5ldyBOb2RlKCk7Ci0gICAgbV9ub2RlQ291bnQgKz0gMjsKLSAgICBsZWZ0LT5wYXJl
bnQgPSBub2RlOwotICAgIGxlZnQtPmxlZnQgPSAwOwotICAgIGxlZnQtPnJpZ2h0ID0gMDsKLSAg
ICByaWdodC0+cGFyZW50ID0gbm9kZTsKLSAgICByaWdodC0+bGVmdCA9IDA7Ci0gICAgcmlnaHQt
PnJpZ2h0ID0gMDsKLSAgICBub2RlLT5sZWZ0ID0gbGVmdDsKLSAgICBub2RlLT5yaWdodCA9IHJp
Z2h0OwotCi0gICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7Ci0gICAgICAgIGxlZnQtPnJlY3Qg
PSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwg
bm9kZS0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50
UmVjdChsZWZ0LT5yZWN0Lm1heFgoKSwgbm9kZS0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0
LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBsZWZ0LT5yZWN0ID0gV2ViQ29yZTo6
SW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWln
aHQoKSAvIDIpOwotICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+
cmVjdC54KCksIGxlZnQtPnJlY3QubWF4WSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7
Ci0gICAgfQotCi0gICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5yZWN0LnNpemUoKTsKLSAg
ICByaWdodC0+bGFyZ2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7Ci0gICAgbm9kZS0+bGFy
Z2VzdEZyZWUgPSByaWdodC0+bGFyZ2VzdEZyZWU7Ci0gICAgcmV0dXJuIGxlZnQ7Ci19Ci0KLXZv
aWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqIG5vZGUpCi17
Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50KSkgewotICAgICAgICBub2RlLT5sYXJn
ZXN0RnJlZSA9IFdlYkNvcmU6OkludFNpemUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCksIG5vZGUtPnJpZ2h0
LT5sYXJnZXN0RnJlZS53aWR0aCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCksIG5vZGUtPnJpZ2h0LT5s
YXJnZXN0RnJlZS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IH0KLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6cmVsZWFzZShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQotewotICAgIC8vIExvY2F0ZSB0aGUgbm9kZSB0aGF0IGNvbnRhaW5z
IHRoZSBhbGxvY2F0ZWQgcmVnaW9uLgotICAgIE5vZGUqIG5vZGUgPSBtX3Jvb3Q7Ci0gICAgV2Vi
Q29yZTo6SW50UG9pbnQgcG9pbnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgd2hpbGUgKG5vZGUp
IHsKLSAgICAgICAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+cmVjdC5jb250YWlucyhw
b2ludCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+bGVmdDsKLSAgICAgICAgZWxzZSBpZiAo
bm9kZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnJlY3QuY29udGFpbnMocG9pbnQpKQotICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OwotICAgICAgICBlbHNlIGlmIChub2RlLT5yZWN0LmNv
bnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXR1cm47IC8vIFBvaW50IGlzIGNvbXBsZXRlbHkgb3V0c2lkZSB0aGUgdHJlZS4KLSAg
ICB9Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIHRoZSBu
b2RlIGFzIGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRocm91Z2ggdGhlIHRyZWUKLSAgICAv
LyByZWNvbWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50aWwgd2UgcmVhY2ggYSBzaWJsaW5n
Ci0gICAgLy8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCi0gICAgbm9kZS0+bGFyZ2VzdEZyZWUg
PSBub2RlLT5yZWN0LnNpemUoKTsKLSAgICB3aGlsZSAobm9kZS0+cGFyZW50KSB7Ci0gICAgICAg
IGlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUt
PnBhcmVudC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3Qu
c2l6ZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdC0+bGFyZ2VzdEZyZWUgIT0gbm9kZS0+cGFyZW50
LT5sZWZ0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OwotICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0
KTsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwotICAgICAgICBtX25vZGVDb3VudCAt
PSAyOwotICAgICAgICBub2RlLT5sZWZ0ID0gMDsKLSAgICAgICAgbm9kZS0+cmlnaHQgPSAwOwot
ICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOwotICAgIH0KLQot
ICAgIC8vIE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2VzdG9ycyBoYXZlIHRoZSBjb3JyZWN0ICJs
YXJnZXN0IGZyZWUgc2l6ZSIuCi0gICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7Ci19Ci0KLWlu
dCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAotewotICAgIHJldHVybiBt
X25vZGVDb3VudCAqIHNpemVvZihOb2RlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQXJlYUFsbG9jYXRvci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTg4NzE2Yzg2ZDFjMWExM2FkYmRiNGVhOTNhNDc4MWVl
ZDM1MzllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BcmVhQWxsb2NhdG9yLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICoKLSAqLwotCi0jaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAotI2RlZmluZSBBcmVhQWxsb2NhdG9y
X2gKLQotI2luY2x1ZGUgPEludFBvaW50Lmg+Ci0jaW5jbHVkZSA8SW50UmVjdC5oPgotI2luY2x1
ZGUgPEludFNpemUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotaW5saW5lIGludCBuZXh0UG93
ZXJPZlR3byhpbnQgbnVtYmVyKQotewotICAgIC8vIFRoaXMgaXMgYSBmYXN0IHRyaWNrIHRvIGdl
dCBuZXh0UG93ZXJPZlR3byBmb3IgYW4gaW50ZWdlci4KLSAgICAtLW51bWJlcjsKLSAgICBudW1i
ZXIgfD0gbnVtYmVyID4+IDE7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAyOwotICAgIG51bWJl
ciB8PSBudW1iZXIgPj4gNDsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDg7Ci0gICAgbnVtYmVy
IHw9IG51bWJlciA+PiAxNjsKLSAgICBudW1iZXIrKzsKLSAgICByZXR1cm4gbnVtYmVyOwotfQot
Ci1pbmxpbmUgSW50U2l6ZSBuZXh0UG93ZXJPZlR3byhjb25zdCBJbnRTaXplJiBzaXplKQotewot
ICAgIHJldHVybiBJbnRTaXplKG5leHRQb3dlck9mVHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dl
ck9mVHdvKHNpemUuaGVpZ2h0KCkpKTsKLX0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEFyZWFBbGxvY2F0b3IgewotcHVibGljOgotICAgIEFy
ZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZpcnR1YWwgfkFyZWFB
bGxvY2F0b3IoKTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWluQWxsb2M7IH0KLSAgICB2b2lkIHNldE1pbmltdW1BbGxvY2F0aW9u
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIHsgbV9taW5BbGxvYyA9IHNpemU7IH0KLQot
ICAgIFdlYkNvcmU6OkludFNpemUgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0K
LSAgICB2b2lkIHNldE1hcmdpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplICZtYXJnaW4pIHsgbV9t
YXJnaW4gPSBtYXJnaW47IH0KLQotICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOwotICAgIHZvaWQgZXhwYW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotCi0gICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJvdGVj
dGVkOgotICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwotICAgIFdlYkNvcmU6OkludFNpemUg
bV9taW5BbGxvYzsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWFyZ2luOwotCi0gICAgV2ViQ29y
ZTo6SW50U2l6ZSByb3VuZEFsbG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0
OwotfTsKLQotY2xhc3MgR2VuZXJhbEFyZWFBbGxvY2F0b3IgOiBwdWJsaWMgQXJlYUFsbG9jYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpOwotICAgIHZpcnR1YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7Ci0KLSAgICB2b2lk
IGV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBh
bGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCByZWxlYXNlKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBlbnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07Ci0KLSAgICBzdHJ1Y3Qg
Tm9kZSB7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdDsKLSAgICAgICAgV2ViQ29yZTo6
SW50U2l6ZSBsYXJnZXN0RnJlZTsKLSAgICAgICAgTm9kZSogcGFyZW50OwotICAgICAgICBOb2Rl
KiBsZWZ0OwotICAgICAgICBOb2RlKiByaWdodDsKLSAgICB9OwotCi0gICAgTm9kZSogbV9yb290
OwotICAgIGludCBtX25vZGVDb3VudDsKLQotICAgIHN0YXRpYyB2b2lkIGZyZWVOb2RlKE5vZGUq
KTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBhbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBOb2RlKik7Ci0gICAgTm9kZSogc3BsaXROb2RlKE5vZGUqLCBTcGxpdCk7Ci0g
ICAgc3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSopOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxs
b2NhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmVmY2RhYzg1MjAxMmNmZTkzYzg3YTVhOTMyMWE4MWQ3
NTM1ODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAKQEAgLTAsMCArMSwzMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAi
QXJlYUFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQXJlYUFsbG9jYXRvcjo6
QXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQorICAgIDogbV9zaXpl
KHNpemUpCisgICAgLCBtX21pbkFsbG9jKDEsIDEpCisgICAgLCBtX21hcmdpbigwLCAwKQorewor
fQorCitBcmVhQWxsb2NhdG9yOjp+QXJlYUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQgQXJlYUFs
bG9jYXRvcjo6ZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit7CisgICAgbV9z
aXplID0gbV9zaXplLmV4cGFuZGVkVG8oc2l6ZSk7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6
ZXhwYW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgKz0g
c2l6ZTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKQoreworfQorCitpbnQgQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAorewor
ICAgIHJldHVybiAwOworfQorCitXZWJDb3JlOjpJbnRTaXplIEFyZWFBbGxvY2F0b3I6OnJvdW5k
QWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlu
dCB3aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7CisgICAgaW50IGhlaWdo
dCA9IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKKyAgICBpbnQgZXh0cmEgPSB3
aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIHdpZHRo
ICs9IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9t
aW5BbGxvYy5oZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIGhlaWdodCArPSBtX21p
bkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKK30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVhQWxs
b2NhdG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCisgICAgOiBBcmVhQWxsb2NhdG9y
KFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHNpemUpKQoreworICAgIG1fcm9vdCA9IG5ldyBOb2Rl
KCk7CisgICAgbV9yb290LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBtX3Jvb3QtPmxhcmdlc3RGcmVlID0gbV9zaXpl
OworICAgIG1fcm9vdC0+cGFyZW50ID0gMDsKKyAgICBtX3Jvb3QtPmxlZnQgPSAwOworICAgIG1f
cm9vdC0+cmlnaHQgPSAwOworICAgIG1fbm9kZUNvdW50ID0gMTsKKyAgICBzZXRNaW5pbXVtQWxs
b2NhdGlvbihXZWJDb3JlOjpJbnRTaXplKDgsIDgpKTsKK30KKworR2VuZXJhbEFyZWFBbGxvY2F0
b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCit7CisgICAgZnJlZU5vZGUobV9yb290KTsKK30K
Kwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUoTm9kZSogbm9kZSkKK3sKKyAg
ICBpZiAobm9kZSkgeworICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKKyAgICAgICAgZnJl
ZU5vZGUobm9kZS0+cmlnaHQpOworICAgIH0KKyAgICBkZWxldGUgbm9kZTsKK30KKwordm9pZCBH
ZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUp
Cit7CisgICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHNp
emUpKTsKKworICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkKKyAgICAgICAg
cmV0dXJuOyAvLyBObyBjaGFuZ2UuCisKKyAgICBpZiAoIW1fcm9vdC0+bGVmdCAmJiBtX3Jvb3Qt
Pmxhcmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7CisgICAgICAgIC8vIE5vIGFsbG9jYXRpb25zIGhh
dmUgb2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUuCisgICAgICAgIG1fcm9v
dC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJl
bnQgcm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCisgICAgTm9kZSogb2xkUm9vdCA9IG1fcm9vdDsK
KyAgICBTcGxpdCBzcGxpdDsKKyAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdo
dCgpKQorICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgIGVsc2UKKyAgICAgICAgc3BsaXQg
PSBTcGxpdE9uWTsKKworICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6ZSkg
eworICAgICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndpZHRoKCkpCisg
ICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICBlbHNlIGlmIChtX3Jvb3QtPnJl
Y3QuaGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICAgICAgc3BsaXQgPSBTcGxp
dE9uWDsKKyAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUoKTsKKyAgICAgICAgTm9kZSog
cmlnaHQgPSBuZXcgTm9kZSgpOworICAgICAgICBtX25vZGVDb3VudCArPSAyOworICAgICAgICBt
X3Jvb3QtPnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgcGFyZW50LT5wYXJlbnQgPSAwOworICAg
ICAgICBwYXJlbnQtPmxlZnQgPSBtX3Jvb3Q7CisgICAgICAgIHBhcmVudC0+cmlnaHQgPSByaWdo
dDsKKyAgICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7Cisg
ICAgICAgIHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHJpZ2h0LT5sZWZ0ID0gMDsK
KyAgICAgICAgcmlnaHQtPnJpZ2h0ID0gMDsKKyAgICAgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0g
bV9yb290LT5yZWN0LnNpemUoKTsKKyAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7Cisg
ICAgICAgICAgICBwYXJlbnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54
KCksIG1fcm9vdC0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRo
KCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgcmlnaHQtPnJlY3Qg
PSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBtX3Jvb3QtPnJlY3Qud2lkdGgo
KSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgo
KSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHBhcmVudC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290
LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290
LT5yZWN0LmhlaWdodCgpICogMik7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6
OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+cmVj
dC53aWR0aCgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3Qt
PnJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIHNwbGl0ID0gKHNwbGl0ID09IFNw
bGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7CisgICAgICAgIG1fcm9vdCA9IHBhcmVudDsK
KyAgICB9CisgICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUxLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplMikKK3sKKyAgICByZXR1cm4gc2l6ZTEud2lkdGgoKSA8PSBz
aXplMi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNpemUyLmhlaWdodCgpOworfQorCitX
ZWJDb3JlOjpJbnRSZWN0IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIFdlYkNvcmU6OkludFNpemUgcm91bmRlZCA9IHJv
dW5kQWxsb2NhdGlvbihzaXplKTsKKyAgICByb3VuZGVkID0gV2ViQ29yZTo6bmV4dFBvd2VyT2ZU
d28ocm91bmRlZCk7CisgICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8IHJvdW5kZWQud2lk
dGgoKSA+IG1fc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPD0gMCB8
fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6SW50UmVjdCgpOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0
ZUZyb21Ob2RlKHJvdW5kZWQsIG1fcm9vdCk7CisgICAgaWYgKHBvaW50LngoKSA+PSAwKQorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdChwb2ludCwgc2l6ZSk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OkludFJlY3QoKTsKK30KKworV2ViQ29yZTo6SW50UG9pbnQgR2VuZXJhbEFyZWFBbGxv
Y2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgTm9k
ZSogbm9kZSkKK3sKKyAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8gaW5zZXJ0IGludG8sIHdo
aWNoIHNob3VsZCBiZQorICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgdW51
c2VkIHNwYWNlIHRoYXQgaXMKKyAgICAvLyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHJlcXVl
c3RlZCBzaXplLgorICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIC8vIEdvIGRvd24gYSBsZXZl
bCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0CisgICAgICAgIC8vIHN1Yi10cmVl
IGNvbnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgorICAgICAgICBOb2RlKiBs
ZWZ0ID0gbm9kZS0+bGVmdDsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5yaWdodDsKKyAg
ICAgICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5sYXJnZXN0RnJlZSkpIHsK
KyAgICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5sYXJnZXN0
RnJlZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSA8
IHJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCisgICAgICAgICAgICAgICAgICAgIHx8IGxlZnQt
Pmxhcmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1ZXMgbWF5IGJlIGEgbGl0
dGxlIG92ZXJzaXplZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gdHJ5IHRoZSBsZWZ0IHN1
Yi10cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KKyAgICAgICAgICAgICAgICAgICAg
V2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxlZnQpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0
ZUZyb21Ob2RlKHNpemUsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbm9kZSA9IHJpZ2h0OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbm9k
ZSA9IGxlZnQ7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCBy
aWdodC0+bGFyZ2VzdEZyZWUpKQorICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OworICAgICAgICBl
bHNlIGlmIChsZWZ0IHx8IHJpZ2h0KSB7CisgICAgICAgICAgICAvLyBOZWl0aGVyIHN1Yi1ub2Rl
IGhhcyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOworICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4o
c2l6ZSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRv
IHNwbGl0IHRoaXMgbm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPworICAgICAgICAgICAgU3BsaXQg
c3BsaXQ7CisgICAgICAgICAgICBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUu
d2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlvbjogY2hvb3NlIHRoZSBp
bnZlcnNlIG9mCisgICAgICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBub2RlJ3Mgc3BsaXQgZGly
ZWN0aW9uIHRvIHRyeSB0byBiYWxhbmNlCisgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB3YXN0
ZWQgc3BhY2UgYXMgZnVydGhlciBzdWJkaXZpc2lvbnMgaGFwcGVuLgorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5wYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+cGFyZW50LT5s
ZWZ0LT5yZWN0LngoKSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LngoKSkKKyAgICAgICAg
ICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChu
b2RlLT5wYXJlbnQpCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0aCgpID49IG5vZGUtPnJlY3QuaGVp
Z2h0KCkpCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNpemUoc2l6ZS53aWR0aCgp
ICogMiwgc2l6ZS5oZWlnaHQoKSksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAg
ICAgIC8vIFNwbGl0IGFsb25nIHRoZSBYIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxp
dCA9IFNwbGl0T25YOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6
OkludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RG
cmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBZIGRpcmVjdGlvbi4K
KyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhlciAtIGFsbG9jYXRlIHRoaXMg
bm9kZS4KKyAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IFdlYkNvcmU6OkludFNp
emUoMCwgMCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28gYXJvdW5kIGFnYWluIHVz
aW5nIHRoZSBsZWZ0IHN1Yi10cmVlLgorICAgICAgICAgICAgbm9kZSA9IHNwbGl0Tm9kZShub2Rl
LCBzcGxpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDYW5ub3QgcG9zc2li
bHkgZml0IGludG8gdGhpcyBub2RlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KC0xLCAtMSk7Cit9CisKK0dlbmVyYWxB
cmVhQWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlCisgICAg
KE5vZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQoreworICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9kZSgp
OworICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKKyAgICBtX25vZGVDb3VudCArPSAyOwor
ICAgIGxlZnQtPnBhcmVudCA9IG5vZGU7CisgICAgbGVmdC0+bGVmdCA9IDA7CisgICAgbGVmdC0+
cmlnaHQgPSAwOworICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAgIHJpZ2h0LT5sZWZ0ID0g
MDsKKyAgICByaWdodC0+cmlnaHQgPSAwOworICAgIG5vZGUtPmxlZnQgPSBsZWZ0OworICAgIG5v
ZGUtPnJpZ2h0ID0gcmlnaHQ7CisKKyAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKKyAgICAg
ICAgbGVmdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIG5vZGUtPnJl
Y3QueSgpLAorICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9kZS0+cmVjdC5o
ZWlnaHQoKSk7CisgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChsZWZ0LT5y
ZWN0Lm1heFgoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRo
KCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0
LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCks
CisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAy
KTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgp
LCBsZWZ0LT5yZWN0Lm1heFkoKSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9k
ZS0+cmVjdC5oZWlnaHQoKSAvIDIpOworICAgIH0KKworICAgIGxlZnQtPmxhcmdlc3RGcmVlID0g
bGVmdC0+cmVjdC5zaXplKCk7CisgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gcmlnaHQtPnJlY3Qu
c2l6ZSgpOworICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gcmlnaHQtPmxhcmdlc3RGcmVlOworICAg
IHJldHVybiBsZWZ0OworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjp1cGRhdGVMYXJn
ZXN0RnJlZShOb2RlKiBub2RlKQoreworICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudCkp
IHsKKyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJbnRTaXplKAorICAgICAg
ICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSwgbm9kZS0+cmln
aHQtPmxhcmdlc3RGcmVlLndpZHRoKCkpLAorICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVm
dC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCksIG5vZGUtPnJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQo
KSkKKyAgICAgICAgICAgICk7CisgICAgfQorfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9y
OjpyZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgLy8gTG9jYXRl
IHRoZSBub2RlIHRoYXQgY29udGFpbnMgdGhlIGFsbG9jYXRlZCByZWdpb24uCisgICAgTm9kZSog
bm9kZSA9IG1fcm9vdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IHJlY3QubG9jYXRp
b24oKTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+bGVmdCAmJiBub2Rl
LT5sZWZ0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5s
ZWZ0OworICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdodCAmJiBub2RlLT5yaWdodC0+cmVjdC5j
b250YWlucyhwb2ludCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7CisgICAgICAg
IGVsc2UgaWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsgLy8gUG9pbnQgaXMgY29tcGxldGVs
eSBvdXRzaWRlIHRoZSB0cmVlLgorICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIE1hcmsgdGhlIG5vZGUgYXMgZnJlZSBhbmQgdGhlbiB3b3JrIHVwd2FyZHMg
dGhyb3VnaCB0aGUgdHJlZQorICAgIC8vIHJlY29tYmluaW5nIGFuZCBkZWxldGluZyBub2RlcyB1
bnRpbCB3ZSByZWFjaCBhIHNpYmxpbmcKKyAgICAvLyB0aGF0IGlzIHN0aWxsIGFsbG9jYXRlZC4K
KyAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOworICAgIHdoaWxlIChu
b2RlLT5wYXJlbnQpIHsKKyAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdCA9PSBub2RlKSB7
CisgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5yaWdodC0+bGFyZ2VzdEZyZWUgIT0gbm9k
ZS0+cGFyZW50LT5yaWdodC0+cmVjdC5zaXplKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0LT5sYXJn
ZXN0RnJlZSAhPSBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3Quc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnQ7CisgICAg
ICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOworICAgICAgICBmcmVlTm9kZShub2RlLT5yaWdodCk7
CisgICAgICAgIG1fbm9kZUNvdW50IC09IDI7CisgICAgICAgIG5vZGUtPmxlZnQgPSAwOworICAg
ICAgICBub2RlLT5yaWdodCA9IDA7CisgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+
cmVjdC5zaXplKCk7CisgICAgfQorCisgICAgLy8gTWFrZSB0aGUgcmVzdCBvZiBvdXIgYW5jZXN0
b3JzIGhhdmUgdGhlIGNvcnJlY3QgImxhcmdlc3QgZnJlZSBzaXplIi4KKyAgICB1cGRhdGVMYXJn
ZXN0RnJlZShub2RlKTsKK30KKworaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZUNvdW50ICogc2l6ZW9mKE5vZGUpOworfQorCit9
IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQXJlYUFsbG9jYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3ZjJlZGFj
OTYyNTVmMjIyYjVhZjc4NThiMzUxMjEyODU0M2VlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxs
b2NhdG9yLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqCisgKi8KKworI2lmbmRlZiBBcmVhQWxsb2NhdG9yX2gKKyNkZWZpbmUgQXJlYUFsbG9j
YXRvcl9oCisKKyNpbmNsdWRlIDxJbnRQb2ludC5oPgorI2luY2x1ZGUgPEludFJlY3QuaD4KKyNp
bmNsdWRlIDxJbnRTaXplLmg+CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2lubGluZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bWJlcikK
K3sKKyAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZUd28gZm9y
IGFuIGludGVnZXIuCisgICAgLS1udW1iZXI7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAxOwor
ICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDQ7Cisg
ICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTY7Cisg
ICAgbnVtYmVyKys7CisgICAgcmV0dXJuIG51bWJlcjsKK30KKworaW5saW5lIEludFNpemUgbmV4
dFBvd2VyT2ZUd28oY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShu
ZXh0UG93ZXJPZlR3byhzaXplLndpZHRoKCkpLCBuZXh0UG93ZXJPZlR3byhzaXplLmhlaWdodCgp
KSk7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBBcmVhQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBBcmVhQWxsb2NhdG9yKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5BcmVhQWxsb2NhdG9yKCk7CisKKyAgICBX
ZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIFdl
YkNvcmU6OkludFNpemUgbWluaW11bUFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21pbkFs
bG9jOyB9CisgICAgdm9pZCBzZXRNaW5pbXVtQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplKSB7IG1fbWluQWxsb2MgPSBzaXplOyB9CisKKyAgICBXZWJDb3JlOjpJbnRTaXpl
IG1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9CisgICAgdm9pZCBzZXRNYXJnaW4o
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSAmbWFyZ2luKSB7IG1fbWFyZ2luID0gbWFyZ2luOyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2
b2lkIGV4cGFuZEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UmVjdCBhbGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZp
cnR1YWwgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIG1fc2l6ZTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWluQWxsb2M7CisgICAgV2Vi
Q29yZTo6SW50U2l6ZSBtX21hcmdpbjsKKworICAgIFdlYkNvcmU6OkludFNpemUgcm91bmRBbGxv
Y2F0aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsKK307CisKK2NsYXNzIEdlbmVy
YWxBcmVhQWxsb2NhdG9yIDogcHVibGljIEFyZWFBbGxvY2F0b3IgeworcHVibGljOgorICAgIEdl
bmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2aXJ0dWFs
IH5HZW5lcmFsQXJlYUFsbG9jYXRvcigpOworCisgICAgdm9pZCBleHBhbmQoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOworICAgIFdlYkNvcmU6OkludFJlY3QgYWxsb2NhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOworICAgIHZvaWQgcmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CisgICAgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZW51bSBTcGxpdCB7
IFNwbGl0T25YLCBTcGxpdE9uWSB9OworCisgICAgc3RydWN0IE5vZGUgeworICAgICAgICBXZWJD
b3JlOjpJbnRSZWN0IHJlY3Q7CisgICAgICAgIFdlYkNvcmU6OkludFNpemUgbGFyZ2VzdEZyZWU7
CisgICAgICAgIE5vZGUqIHBhcmVudDsKKyAgICAgICAgTm9kZSogbGVmdDsKKyAgICAgICAgTm9k
ZSogcmlnaHQ7CisgICAgfTsKKworICAgIE5vZGUqIG1fcm9vdDsKKyAgICBpbnQgbV9ub2RlQ291
bnQ7CisKKyAgICBzdGF0aWMgdm9pZCBmcmVlTm9kZShOb2RlKik7CisgICAgV2ViQ29yZTo6SW50
UG9pbnQgYWxsb2NhdGVGcm9tTm9kZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgTm9kZSopOwor
ICAgIE5vZGUqIHNwbGl0Tm9kZShOb2RlKiwgU3BsaXQpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZUxhcmdlc3RGcmVlKE5vZGUqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQXJlYUFsbG9jYXRv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWE1NDE4ZjFlYWFhMzQ4N2I0ZTQyNGI5YTk1NjIwMjA4MzA5NzU0ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L1VwZGF0ZUF0bGFzLmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVwZGF0ZUF0
bGFzLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwg
aW50IGRpbWVuc2lvbiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncykKKyAgICA6IG1fY2xp
ZW50KGNsaWVudCkKKyAgICAsIG1fZmxhZ3MoZmxhZ3MpCisgICAgLCBtX2luYWN0aXZpdHlJblNl
Y29uZHMoMCkKKyAgICAsIG1faXNWYWlsZCh0cnVlKQoreworICAgIHN0YXRpYyBpbnQgbmV4dElE
ID0gMDsKKyAgICBtX0lEID0gKytuZXh0SUQ7CisgICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2Vy
T2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOworICAgIG1fc3VyZmFjZSA9IFNo
YXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3Vw
cG9ydHNHcmFwaGljc1N1cmZhY2UpOworCisgICAgaWYgKCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRs
ZShtX2hhbmRsZSkpIHsKKyAgICAgICAgbV9pc1ZhaWxkID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgbV9jbGllbnQtPmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQsIG1faGFuZGxl
KTsKK30KKworVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCit7CisgICAgaWYgKG1faXNWYWls
ZCkKKyAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOworfQorCit2b2lk
IFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fYXJlYUFs
bG9jYXRvcikgeworICAgICAgICBtX2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihuZXcgR2VuZXJh
bEFyZWFBbGxvY2F0b3Ioc2l6ZSgpKSk7CisgICAgICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWlu
aW11bUFsbG9jYXRpb24oSW50U2l6ZSgzMiwgMzIpKTsKKyAgICB9Cit9CisKK3ZvaWQgVXBkYXRl
QXRsYXM6OmRpZFN3YXBCdWZmZXJzKCkKK3sKKyAgICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIoKTsK
K30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50
aW5nT25BdmFpbGFibGVCdWZmZXIoaW50JiBhdGxhc0lELCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyA9
IDA7CisgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworICAgIEludFJlY3QgcmVjdCA9IG1fYXJl
YUFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZSk7CisKKyAgICAvLyBObyBhdmFpbGFibGUgYnVmZmVy
IHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7CisKKyAgICBpZiAoIW1f
aXNWYWlsZCkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwor
CisgICAgYXRsYXNJRCA9IG1fSUQ7CisKKyAgICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZm
ZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRlcy4KKyAgICBvZmZzZXQgPSByZWN0LmxvY2F0aW9u
KCk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9zdXJm
YWNlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7CisKKyAgICBpZiAoZmxhZ3MoKSAmIFNo
YXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSkgeworICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5maWxsUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHNpemUpLCBDb2xvcjo6
dHJhbnNwYXJlbnQsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKK30KKworfQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Y2VmZTljOTc5
NDIxNTg2MjczZjRlMGNkMzA5YTIwMjM0YzcxYWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRs
YXMuaApAQCAtMCwwICsxLDgyIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBVcGRhdGVBdGxhc19oCisjZGVmaW5lIFVwZGF0ZUF0bGFzX2gKKworI2lu
Y2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAi
U2hhcmVhYmxlU3VyZmFjZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50UG9pbnQ7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVBdGxhc0NsaWVudCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBj
b25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
bW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKSA9IDA7Cit9OworCitjbGFzcyBVcGRhdGVBdGxh
cyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMpOworcHVibGljOgorICAg
IFVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiwgaW50IGRpbWVuc2lvbiwgU2hhcmVhYmxl
Qml0bWFwOjpGbGFncyk7CisgICAgflVwZGF0ZUF0bGFzKCk7CisKKyAgICBpbmxpbmUgV2ViQ29y
ZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KKwor
ICAgIC8vIFJldHVybnMgYSBudWxsIHBvaW50ZXIgb2YgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1
ZmZlci4KKyAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWlu
dGluZ09uQXZhaWxhYmxlQnVmZmVyKGludCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpOworICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMo
KTsKKyAgICBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9m
bGFnczsgfQorCisgICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCisgICAg
eworICAgICAgICBBU1NFUlQoIWlzSW5Vc2UoKSk7CisgICAgICAgIG1faW5hY3Rpdml0eUluU2Vj
b25kcyArPSBzZWNvbmRzOworICAgIH0KKyAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgY29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7Cisg
ICAgICAgIHJldHVybiBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xl
cmFuY2U7CisgICAgfQorICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFs
bG9jYXRvcjsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwor
Citwcml2YXRlOgorICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBPd25QdHI8
R2VuZXJhbEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKKyAgICBTaGFyZWFibGVCaXRt
YXA6OkZsYWdzIG1fZmxhZ3M7CisgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IG1fc3VyZmFj
ZTsKKyAgICBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgbV9oYW5kbGU7CisgICAgZG91YmxlIG1f
aW5hY3Rpdml0eUluU2Vjb25kczsKKyAgICBpbnQgbV9JRDsKKyAgICBib29sIG1faXNWYWlsZDsK
K307CisKK30KKyNlbmRpZgorI2VuZGlmIC8vIFVwZGF0ZUF0bGFzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5YTU0MThmMWVhYWEzNDg3YjRlNDI0YjlhOTU2MjAyMDgzMDk3NTRl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw5OSArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCi0KLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1VcGRhdGVBdGxhczo6
VXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgU2hh
cmVhYmxlQml0bWFwOjpGbGFncyBmbGFncykKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAs
IG1fZmxhZ3MoZmxhZ3MpCi0gICAgLCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkKLSAgICAsIG1f
aXNWYWlsZCh0cnVlKQotewotICAgIHN0YXRpYyBpbnQgbmV4dElEID0gMDsKLSAgICBtX0lEID0g
KytuZXh0SUQ7Ci0gICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1l
bnNpb24sIGRpbWVuc2lvbikpOwotICAgIG1fc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNy
ZWF0ZShzaXplLCBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6U3VwcG9ydHNHcmFwaGljc1N1cmZh
Y2UpOwotCi0gICAgaWYgKCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRsZShtX2hhbmRsZSkpIHsKLSAg
ICAgICAgbV9pc1ZhaWxkID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9j
bGllbnQtPmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQsIG1faGFuZGxlKTsKLX0KLQotVXBkYXRlQXRs
YXM6On5VcGRhdGVBdGxhcygpCi17Ci0gICAgaWYgKG1faXNWYWlsZCkKLSAgICAgICAgbV9jbGll
bnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOwotfQotCi12b2lkIFVwZGF0ZUF0bGFzOjpidWls
ZExheW91dElmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fYXJlYUFsbG9jYXRvcikgewotICAgICAg
ICBtX2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihuZXcgR2VuZXJhbEFyZWFBbGxvY2F0b3Ioc2l6
ZSgpKSk7Ci0gICAgICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWluaW11bUFsbG9jYXRpb24oSW50
U2l6ZSgzMiwgMzIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZm
ZXJzKCkKLXsKLSAgICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIoKTsKLX0KLQotUGFzc093blB0cjxH
cmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZm
ZXIoaW50JiBhdGxhc0lELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBJbnRQb2ludCYg
b2Zmc2V0KQotewotICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyA9IDA7Ci0gICAgYnVpbGRMYXlv
dXRJZk5lZWRlZCgpOwotICAgIEludFJlY3QgcmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2Nh
dGUoc2l6ZSk7Ci0KLSAgICAvLyBObyBhdmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJu
aW5nIG51bGwuCi0gICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7Ci0KLSAgICBpZiAoIW1faXNWYWlsZCkKLSAgICAgICAg
cmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwotCi0gICAgYXRsYXNJRCA9IG1f
SUQ7Ci0KLSAgICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0
ZXIgdXBkYXRlcy4KLSAgICBvZmZzZXQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQocmVjdCk7Ci0KLSAgICBpZiAoZmxhZ3MoKSAmIFNoYXJlYWJsZUJpdG1hcDo6U3Vw
cG9ydHNBbHBoYSkgewotICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHNpemUpLCBDb2xvcjo6dHJhbnNwYXJlbnQsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3JhcGhp
Y3NDb250ZXh0LnJlbGVhc2UoKTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3Y2VmZTljOTc5NDIxNTg2MjczZjRlMGNkMzA5YTIwMjM0YzcxYWQxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAs
MCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVXBk
YXRlQXRsYXNfaAotI2RlZmluZSBVcGRhdGVBdGxhc19oCi0KLSNpbmNsdWRlICJBcmVhQWxsb2Nh
dG9yLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2Uu
aCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEludFBvaW50OwotfQotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyhp
bnQgYXRsYXNJRCkgPSAwOwotfTsKLQotY2xhc3MgVXBkYXRlQXRsYXMgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKLXB1YmxpYzoKLSAgICBVcGRhdGVBdGxhcyhVcGRh
dGVBdGxhc0NsaWVudCosIGludCBkaW1lbnNpb24sIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MpOwot
ICAgIH5VcGRhdGVBdGxhcygpOwotCi0gICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIGEg
bnVsbCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCi0gICAgUGFzc093
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1
ZmZlcihpbnQmIGF0bGFzSUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpJbnRQ
b2ludCYgb2Zmc2V0KTsKLSAgICB2b2lkIGRpZFN3YXBCdWZmZXJzKCk7Ci0gICAgU2hhcmVhYmxl
Qml0bWFwOjpGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KLQotICAgIHZv
aWQgYWRkVGltZUluYWN0aXZlKGRvdWJsZSBzZWNvbmRzKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KCFpc0luVXNlKCkpOwotICAgICAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgKz0gc2Vjb25kczsK
LSAgICB9Ci0gICAgYm9vbCBpc0luYWN0aXZlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0
IGRvdWJsZSBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2UgPSAzOwotICAgICAgICByZXR1cm4gbV9p
bmFjdGl2aXR5SW5TZWNvbmRzID4gaW5hY3RpdmVTZWNvbmRzVG9sZXJhbmNlOwotICAgIH0KLSAg
ICBib29sIGlzSW5Vc2UoKSBjb25zdCB7IHJldHVybiBtX2FyZWFBbGxvY2F0b3I7IH0KLQotcHJp
dmF0ZToKLSAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKLQotcHJpdmF0ZToKLSAgICBV
cGRhdGVBdGxhc0NsaWVudCogbV9jbGllbnQ7Ci0gICAgT3duUHRyPEdlbmVyYWxBcmVhQWxsb2Nh
dG9yPiBtX2FyZWFBbGxvY2F0b3I7Ci0gICAgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBtX2ZsYWdz
OwotICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgU2hhcmVhYmxl
U3VyZmFjZTo6SGFuZGxlIG1faGFuZGxlOwotICAgIGRvdWJsZSBtX2luYWN0aXZpdHlJblNlY29u
ZHM7Ci0gICAgaW50IG1fSUQ7Ci0gICAgYm9vbCBtX2lzVmFpbGQ7Ci19OwotCi19Ci0jZW5kaWYK
LSNlbmRpZiAvLyBVcGRhdGVBdGxhc19oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>