<?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>95997</bug_id>
          
          <creation_ts>2012-09-06 10:51:36 -0700</creation_ts>
          <short_desc>[chromium] Add touchscreen specific fling curve parametrization</short_desc>
          <delta_ts>2012-09-07 14:56:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robert Kroeger">rjkroege</reporter>
          <assigned_to name="Robert Kroeger">rjkroege</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>713454</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-09-06 10:51:36 -0700</bug_when>
    <thetext>Add an additional fling curve parametrization specific to touchscreen fling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713507</commentid>
    <comment_count>1</comment_count>
      <attachid>162545</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-09-06 11:26:05 -0700</bug_when>
    <thetext>Created attachment 162545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713645</commentid>
    <comment_count>2</comment_count>
      <attachid>162545</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-09-06 13:43:45 -0700</bug_when>
    <thetext>Comment on attachment 162545
Patch

jamesr@: please take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713651</commentid>
    <comment_count>3</comment_count>
      <attachid>162545</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-06 13:50:42 -0700</bug_when>
    <thetext>Comment on attachment 162545
Patch

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

&gt; Source/WebCore/platform/chromium/support/PlatformGestureCurveFactory.cpp:54
&gt; +        return WebCore::TouchpadFlingPlatformGestureCurve::createForTouchScreen(point, cumulativeScroll);

Touchpad...ForTouchScreen?  What does that mean?  It doesn&apos;t seem sensical to create a Touchpad fling curve for a touch screen.

I think what you really want is another fling curve type, if you want to be consistent with the existing curve type hierarchy.  Or refactor the curve stuff to make more sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713656</commentid>
    <comment_count>4</comment_count>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-09-06 13:54:16 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 162545 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162545&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/chromium/support/PlatformGestureCurveFactory.cpp:54
&gt; &gt; +        return WebCore::TouchpadFlingPlatformGestureCurve::createForTouchScreen(point, cumulativeScroll);
&gt; 
&gt; Touchpad...ForTouchScreen?  What does that mean?  It doesn&apos;t seem sensical to create a Touchpad fling curve for a touch screen.
&gt; 
&gt; I think what you really want is another fling curve type, if you want to be consistent with the existing curve type hierarchy.  Or refactor the curve stuff to make more sense.

What if we renamed TouchpadFlingPlatformGestureCurve to TouchFlingPlatformGestureCurve and had functions

TouchFlingPlatformGestureCurve::createForTouchPad()
TouchFlingPlatformGestureCurve::createForTouchScreen()

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713663</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-06 14:00:18 -0700</bug_when>
    <thetext>That sounds better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713672</commentid>
    <comment_count>6</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-09-06 14:07:29 -0700</bug_when>
    <thetext>sounds good to me. I&apos;ll update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714766</commentid>
    <comment_count>7</comment_count>
      <attachid>162824</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-09-07 11:13:01 -0700</bug_when>
    <thetext>Created attachment 162824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714769</commentid>
    <comment_count>8</comment_count>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-09-07 11:14:39 -0700</bug_when>
    <thetext>please take another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714847</commentid>
    <comment_count>9</comment_count>
      <attachid>162824</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-07 12:23:33 -0700</bug_when>
    <thetext>Comment on attachment 162824
Patch

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

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.cpp:69
&gt; +// the in-flight patch for https://bugs.webkit.org/show_bug.cgi?id=81663 .

I know you&apos;re just moving this code but this FIXME and comment are sad.  https://bugs.webkit.org/show_bug.cgi?id=81663 was abandoned a while ago, do we still need these extra parameters?

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:56
&gt; +    float m_coeffs[5];

No abbreviations in webkit

&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:61
&gt; +    static const int m_maxSearchIterations;

Statics shouldn&apos;t have the m_ prefix. This probably doesn&apos;t should be a member at all - just make it a static const local in the function it&apos;s being used in, or a file-static if it&apos;s used in multiple places</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714969</commentid>
    <comment_count>10</comment_count>
      <attachid>162824</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-09-07 14:16:40 -0700</bug_when>
    <thetext>Comment on attachment 162824
Patch

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

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.cpp:69
&gt;&gt; +// the in-flight patch for https://bugs.webkit.org/show_bug.cgi?id=81663 .
&gt; 
&gt; I know you&apos;re just moving this code but this FIXME and comment are sad.  https://bugs.webkit.org/show_bug.cgi?id=81663 was abandoned a while ago, do we still need these extra parameters?

True. Cleaned up in the landed patch.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:56
&gt;&gt; +    float m_coeffs[5];
&gt; 
&gt; No abbreviations in webkit

Fixed in landed patch. And I removed the excess coefficients.

&gt;&gt; Source/WebCore/platform/TouchFlingPlatformGestureCurve.h:61
&gt;&gt; +    static const int m_maxSearchIterations;
&gt; 
&gt; Statics shouldn&apos;t have the m_ prefix. This probably doesn&apos;t should be a member at all - just make it a static const local in the function it&apos;s being used in, or a file-static if it&apos;s used in multiple places

Done in landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714974</commentid>
    <comment_count>11</comment_count>
      <attachid>162867</attachid>
    <who name="Robert Kroeger">rjkroege</who>
    <bug_when>2012-09-07 14:18:05 -0700</bug_when>
    <thetext>Created attachment 162867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715018</commentid>
    <comment_count>12</comment_count>
      <attachid>162867</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-07 14:56:53 -0700</bug_when>
    <thetext>Comment on attachment 162867
Patch

Clearing flags on attachment: 162867

Committed r127924: &lt;http://trac.webkit.org/changeset/127924&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715019</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-07 14:56:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162545</attachid>
            <date>2012-09-06 11:26:05 -0700</date>
            <delta_ts>2012-09-07 11:12:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95997-20120906142546.patch</filename>
            <type>text/plain</type>
            <size>4701</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc3NjFkMGY5MGUzZDRj
MWJjMmY4NDc0MTZmZDVlODdjYmI5OWI4Zi4uMzc5ZTA4Yzg4MGE0YjJhZDQzNDU2ZWM2NTI2OGVl
YTYyOGRkMGIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA5LTA2ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEFkZCB0b3VjaHNjcmVlbiBzcGVjaWZpYyBmbGluZyBjdXJ2ZSBwYXJhbWV0cml6YXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBuZXcg
c2V0IG9mIGZsaW5nIGN1cnZlIHBhcmFtZXRlcnMgd2l0aCBhIGdvb2QgZmVlbCBmb3IgdG91Y2hz
Y3JlZW4KKyAgICAgICAgaW5pdGlhdGVkIGZsaW5ncy4KKworICAgICAgICBObyBuZXcgdGVzdHMg
LSBNb3N0bHkgVUkgY2hhbmdlIHZhbGlkYXRlZCBlbXBpcmljYWxseS4KKworICAgICAgICAqIHBs
YXRmb3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZUZvclRvdWNo
U2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmUpOiBQcmVzZXJ2ZXMgZW1waXJpY2FsbHkgZGV0ZXJt
aW5lZCBwYXJhbWV0ZXJzLgorICAgICAgICAqIHBsYXRmb3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZS5oOgorICAgICAgICAoVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1BsYXRmb3JtR2VzdHVy
ZUN1cnZlRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtR2VzdHVyZUN1cnZl
RmFjdG9yeTo6Y3JlYXRlQ3VydmUpOiBDYWxsIHRoZSBhbHRlcm5hdGUgdG91Y2gKKyAgICAgICAg
c2NyZWVuIHNwZWNpZmljIHZlcnNpb24uCisKIDIwMTItMDktMDMgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBQYXJ0IDEgb2YgcmVtb3ZpbmcgUGxhdGZvcm1TdHJpbmcu
aCwgbW92ZSByZW1haW5pbmcgZnVuY3Rpb25zIHRvIG5ldyBob21lcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVD
dXJ2ZS5jcHAKaW5kZXggYjJiZmJlYTVlMTMyZWYzOWNlOTRiZGM4ZGFmMjUxYWVmMGEyOWIyMS4u
NGVjNzU5OGIxYWNjNDk5OTVkZThiNjQ3Y2QwNWM1NjJhY2MwN2U3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUuY3BwCkBAIC01OSw2ICs1OSwxMiBAQCBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVy
ZUN1cnZlPiBUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShjb25zdAog
ICAgIHJldHVybiBjcmVhdGUodmVsb2NpdHksIC01LjcwNzYyZSswMywgMS43MmUrMDIsIDMuN2Ur
MDAsIDAsIDAsIDEuMywgY3VtdWxhdGl2ZVNjcm9sbCk7CiB9CiAKK1Bhc3NPd25QdHI8UGxhdGZv
cm1HZXN0dXJlQ3VydmU+IFRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRl
Rm9yVG91Y2hTY3JlZW4oY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHksIEludFBvaW50IGN1bXVs
YXRpdmVTY3JvbGwpCit7CisgICAgLy8gVGhlIHRvdWNoc2NyZWVuLXNwZWNpZmljIHBhcmFtZXRl
cnMgbGlzdGVkIGJlbG93IGFyZSBhIG1hdGNoZWQgc2V0LCBhbmQgc2hvdWxkIG5vdCBiZSBjaGFu
Z2VkIGluZGVwZW5kZW50bHkgb2Ygb25lIGFub3RoZXIuCisgICAgcmV0dXJuIGNyZWF0ZSh2ZWxv
Y2l0eSwgLTMuNWUrMDMsIDkwLCAzLjBlKzAwLCAwLCAwLCAxLjU4NjQsIGN1bXVsYXRpdmVTY3Jv
bGwpOworfQorCiAvLyBGSVhNRTogbmVlZCB0byByZW1vdmUgcDMsIHA0IGhlcmUgYW5kIGJlbG93
IGFzIHRoZXkgYXJlIG5vdCB1c2VkIGluIHRoZSBleHBvbmVudGlhbCBjdXJ2ZSwgYnV0IGxlYXZl
IGluIGZvciBub3cgdG8gZmFjaWxpdGF0ZQogLy8gdGhlIGluLWZsaWdodCBwYXRjaCBmb3IgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNjYzIC4KIFBhc3NPd25QdHI8
UGxhdGZvcm1HZXN0dXJlQ3VydmU+IFRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6
Y3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBmbG9hdCBwMCwgZmxvYXQgcDEsIGZs
b2F0IHAyLCBmbG9hdCBwMywgZmxvYXQgcDQsIGZsb2F0IGN1cnZlRHVyYXRpb24sIEludFBvaW50
IGN1bXVsYXRpdmVTY3JvbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
b3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCmluZGV4IGUxYzg1NTc1ZDU3
M2NlZmRhNDQ2ODFmZTM0NTgwNDAwMTQ4MWNiZTIuLjM5NThhMmI4YjY5NjhlMGJmMjMyNTY3MTQ1
OWY4Zjc0YmEzZWZjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNo
cGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCkBAIC00MSw2ICs0MSw3IEBA
IGNsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0OwogY2xhc3MgVG91Y2hwYWRGbGluZ1Bs
YXRmb3JtR2VzdHVyZUN1cnZlIDogcHVibGljIFBsYXRmb3JtR2VzdHVyZUN1cnZlIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3JlYXRlKGNv
bnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBJbnRQb2ludCBjdW11bGF0aXZlU2Nyb2xsID0gSW50
UG9pbnQoKSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGNy
ZWF0ZUZvclRvdWNoU2NyZWVuKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBJbnRQb2ludCBj
dW11bGF0aXZlU2Nyb2xsID0gSW50UG9pbnQoKSk7CiAgICAgc3RhdGljIFBhc3NPd25QdHI8UGxh
dGZvcm1HZXN0dXJlQ3VydmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgZmxv
YXQgcDAsIGZsb2F0IHAxLCBmbG9hdCBwMiwgZmxvYXQgcDMsIGZsb2F0IHA0LCBmbG9hdCBjdXJ2
ZUR1cmF0aW9uLCBJbnRQb2ludCBjdW11bGF0aXZlU2Nyb2xsID0gSW50UG9pbnQoKSk7CiAgICAg
dmlydHVhbCB+VG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvUGxhdGZvcm1HZXN0
dXJlQ3VydmVGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvUGxhdGZvcm1HZXN0dXJlQ3VydmVGYWN0b3J5LmNwcAppbmRleCBlY2Q5NzI0ZDlkZGNk
OGZkOGVkZWFkNmJhOGI1NmU4ZjQwYWU0ODBmLi5mMGI5ZDAyYzdmNTY0YjRmNjA3MzBkMTI4MTIw
ZjQ0OTMwNTAwNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1BsYXRmb3JtR2VzdHVyZUN1cnZlRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZUZhY3Rv
cnkuY3BwCkBAIC01MCw5ICs1MCw4IEBAIFBhc3NPd25QdHI8V2ViQ29yZTo6UGxhdGZvcm1HZXN0
dXJlQ3VydmU+IFBsYXRmb3JtR2VzdHVyZUN1cnZlRmFjdG9yeTo6Y3JlYXRlQ3VyCiAgICAgaWYg
KGZsaW5nQW5pbWF0b3IpCiAgICAgICAgIHJldHVybiBXZWJGbGluZ0FuaW1hdG9yVG9HZXN0dXJl
Q3VydmVBZGFwdGVyOjpjcmVhdGUocG9pbnQsIFdlYkNvcmU6OkludFJlY3QoKSwgZmxpbmdBbmlt
YXRvci5yZWxlYXNlKCkpOwogCi0gICAgLy8gRklYTUU6IEFkZCBhIHRvdWNoLXNjcmVlbiBzb3Vy
Y2VkIHNwZWNpZmljIGN1cnZlLgogICAgIGlmIChkZXZpY2VTb3VyY2UgPT0gV2ViR2VzdHVyZUV2
ZW50OjpUb3VjaHNjcmVlbikKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRvdWNocGFkRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKHBvaW50LCBjdW11bGF0aXZlU2Nyb2xsKTsKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OlRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6
Y3JlYXRlRm9yVG91Y2hTY3JlZW4ocG9pbnQsIGN1bXVsYXRpdmVTY3JvbGwpOwogCiAgICAgcmV0
dXJuIFdlYkNvcmU6OlRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKHBv
aW50LCBjdW11bGF0aXZlU2Nyb2xsKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162824</attachid>
            <date>2012-09-07 11:13:01 -0700</date>
            <delta_ts>2012-09-07 14:18:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95997-20120907141240.patch</filename>
            <type>text/plain</type>
            <size>31625</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3ODY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhiMzQ2NmQwMjYwMzlm
NmE3NmExNDcxMWEyZDc3YjdlZjFkZWNhZi4uZjI1ZTZiOGMwMGQxNTE5OTc1YmQ1ZWVmMWI4ODZh
ZmUwMDcyZTJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA5LTA2ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEFkZCB0b3VjaHNjcmVlbiBzcGVjaWZpYyBmbGluZyBjdXJ2ZSBwYXJhbWV0cml6YXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBuZXcg
c2V0IG9mIGZsaW5nIGN1cnZlIHBhcmFtZXRlcnMgd2l0aCBhIGdvb2QgZmVlbCBmb3IgdG91Y2hz
Y3JlZW4KKyAgICAgICAgaW5pdGlhdGVkIGZsaW5ncy4gUmVuYW1lZCBUb3VjaHBhZEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUgdG8KKyAgICAgICAgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlIHRvIGJldHRlciByZWZsZWN0IHRoYXQgdGhlIGNsYXNzCisgICAgICAgIGNhbiBzZXJ2ZSBm
b3IgYm90aCB0b3VjaHNjcmVlbiBhbmQgdG91Y2hwYWQgZmxpbmdzIHdoZW4gYXBwcm9wcmlhdGVs
eQorICAgICAgICBwYXJhbWV0cml6ZWQuIFVwZGF0ZWQgYnVpbGQgZmlsZXMgYXMgbmVjZXNzYXJ5
IGZvciB0aGUgcmVuYW1lLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIGV4aXN0aW5nIHRlc3Rz
IGFwcGx5LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JOb25lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Tm9uZTo6ZmlyZVVwQW5BbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1RvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6
OmNyZWF0ZUZvclRvdWNoUGFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlRm9yVG91Y2hTY3JlZW4pOgorICAgICAgICBBZGRlZCB3aXRo
IHRvdWNoc2NyZWVuIHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjp2ZWxvY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6On5Ub3Vj
aEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpkZWJ1Z05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VG91
Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0v
VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1BsYXRmb3JtR2VzdHVyZUN1cnZl
RmFjdG9yeS5jcHA6IGludm9rZXMKKyAgICAgICAgY3JlYXRlRm9yVG91Y2hQYWQgb3IgY3JlYXRl
Rm9yVG91Y2hTY3JlZW4gYXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3Jt
R2VzdHVyZUN1cnZlRmFjdG9yeTo6Y3JlYXRlQ3VydmUpOgorCiAyMDEyLTA5LTA3ICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTI3NzgwIGFuZCByMTI3ODU5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCAzZmY0MTFkMGQwODllZmRhZjgxYzAwOTU2ODRmYmE2MGM1ZmZiZjFkLi42OGNiYTA1
N2EwODUzYjAxNjQ4OWNiZmQyZmNhMjFkMDNmZjkwN2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA5LTA3ICBSb2JlcnQgS3JvZWdlciAgPHJqa3Jv
ZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCB0b3VjaHNjcmVlbiBz
cGVjaWZpYyBmbGluZyBjdXJ2ZSBwYXJhbWV0cml6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBuZXcgc2V0IG9mIGZsaW5nIGN1cnZl
IHBhcmFtZXRlcnMgd2l0aCBhIGdvb2QgZmVlbCBmb3IgdG91Y2hzY3JlZW4KKyAgICAgICAgaW5p
dGlhdGVkIGZsaW5ncy4gUmVuYW1lZCBUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUg
dG8KKyAgICAgICAgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIHRvIGJldHRlciByZWZs
ZWN0IHRoYXQgdGhlIGNsYXNzCisgICAgICAgIGNhbiBzZXJ2ZSBmb3IgYm90aCB0b3VjaHNjcmVl
biBhbmQgdG91Y2hwYWQgZmxpbmdzIHdoZW4gYXBwcm9wcmlhdGVseQorICAgICAgICBwYXJhbWV0
cml6ZWQuIFVwZGF0ZWQgYnVpbGQgZmlsZXMgYXMgbmVjZXNzYXJ5IGZvciB0aGUgcmVuYW1lLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIGV4aXN0aW5nIHRlc3RzIGFwcGx5LgorCisKKyAgICAg
ICAgKiB0ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwOiBUbyB1c2UgdGhlIHJlbmFt
ZWQgY3VydmUgY29uc3RydWN0b3IuCisKIDIwMTItMDktMDcgIEFsbGFuIFNhbmRmZWxkIEplbnNl
biAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKICAgICAgICAgWDExIEdsb2JhbCBTZWxlY3Rp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGE5ZTk0ODk5NjkyOWU3Yjc3MDQxOTIwYjY0OTMw
ZGI0NGNiNDNjYy4uN2JlNjA3MjI0MmRiMDAxOTA1YWE2YTdjMDI0NjMxODQ2ZjE5YmQ0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTI0OTAsNyArMjQ5MCw3IEBAIElGIChFTkFCTEVfU01PT1RI
X1NDUk9MTElORykKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxh
dGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcAogICAgICAgICBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCi0gICAgICAgIHBsYXRmb3JtL1RvdWNocGFkRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmNwcAogICAgICkKIEVORElGICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IGVmYTAwYjdlMWI0MzhjNmM3ZjY1NThhMjhmNDhjNzcxMmFmNGE5MmEu
LmM3ODYwOWZhMzBhN2VjODQ0MGMwODk0YTQxYjk4YTQ3MjFjZmU1NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtNDgwMiw4ICs0ODAyLDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVCaWRpLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZVR5cGVzLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Ro
cmVhZEdsb2JhbERhdGEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlM2I5ZjM2NjIzNWZhN2Mx
Y2Q1ZjYzNjA1ZjM1ZDU5NWFjODFjZmZjLi4wMWQwMmM0NzAxZGUyNDM4MDcxYWNiMTk3OGIyMjQ2
MGI1NzhjN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NTE5LDggKzQ1MTksOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1RocmVhZFRpbWVycy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9UaW1lci5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vVVVJRC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1VVSUQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAppbmRleCA2ZDFmM2RmNjMwZjljMzE5Y2I3MzQ5MGY1M2U0YTM3NTAy
MzU2OGY3Li45NjlkOGFhMDk1OWU1ODY2MGNhNGU5MTI2ZTY4NDI3ODRkNDdjMTYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKQEAgLTQ2LDcg
KzQ2LDcgQEAKIAogI2lmIEVOQUJMRShHRVNUVVJFX0FOSU1BVElPTikKICNpbmNsdWRlICJBY3Rp
dmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uaCIKLSNpbmNsdWRlICJUb3VjaHBhZEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmUuaCIKICNlbmRpZgogCiAKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yTm9uZTo6ZmlyZVVwQW5BbmltYXRpb24oRmxvYXRQb2ludCBmcCkKICNpZiBFTkFCTEUoR0VT
VFVSRV9BTklNQVRJT04pCiAgICAgaWYgKG1fZ2VzdHVyZUFuaW1hdGlvbikKICAgICAgICAgbV9n
ZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7Ci0gICAgbV9nZXN0dXJlQW5pbWF0aW9uID0gQWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2Vz
dHVyZUN1cnZlOjpjcmVhdGUoZnApLCB0aGlzKTsKKyAgICBtX2dlc3R1cmVBbmltYXRpb24gPSBB
Y3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShUb3VjaEZsaW5nUGxhdGZvcm1H
ZXN0dXJlQ3VydmU6OmNyZWF0ZUZvclRvdWNoUGFkKGZwKSwgdGhpcyk7CiAjZW5kaWYKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCiAgICAgc3RhcnROZXh0VGltZXIoMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1H
ZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjFmM2FhOWE5YTc5NzFkYmUzNDk1MTRh
YzE0NTJiYjA1Yjk3ZDczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApAQCAtMCwwICsxLDE2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldC5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLyBUaGlzIGN1cnZlIGltcGxlbWVudGF0aW9uIGlzIGJh
c2VkIG9uIHRoZSBub3Rpb24gb2YgYSBzaW5nbGUsIGFic29sdXRlIGN1cnZlLCB3aGljaCBzdGFy
dHMgYXQKKy8vIGEgbGFyZ2UgdmVsb2NpdHkgYW5kIHNtb290aGx5IGRlY3JlYXNlcyB0byB6ZXJv
LiBGb3IgYSBnaXZlbiBpbnB1dCB2ZWxvY2l0eSwgd2UgZmluZCB3aGVyZSBvbgorLy8gdGhlIGN1
cnZlIHRoaXMgdmVsb2NpdHkgb2NjdXJzLCBhbmQgc3RhcnQgdGhlIGFuaW1hdGlvbiBhdCB0aGlz
IHBvaW50LS0tZGVub3RlZCBieSAobV90aW1lT2Zmc2V0LAorLy8gbV9wb3NpdGlvbk9mZnNldCku
CisvLworLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBhdXRvbWF0aWNhbGx5IGRldGVybWluaW5n
IGFuIGFuaW1hdGlvbiBkdXJhdGlvbiB0aGF0IHNjYWxlcyB3aXRoIGlucHV0CisvLyB2ZWxvY2l0
eSwgYXMgZmFzdGVyIGluaXRpYWwgdmVsb2NpdGllcyBzdGFydCBlYXJsaWVyIG9uIHRoZSBjdXJ2
ZSBhbmQgdGh1cyB0YWtlIGxvbmdlciB0byByZWFjaCB0aGUgZW5kLgorLy8gTm8gY29tcGxpY2F0
ZWQgdGltZSBzY2FsaW5nIGlzIHJlcXVpcmVkLgorLy8KKy8vIFNpbmNlIHRoZSBzdGFydGluZyB2
ZWxvY2l0eSBpcyBpbXBsaWNpdGx5IGRldGVybWluZWQgYnkgb3VyIHN0YXJ0aW5nIHBvaW50LCB3
ZSBvbmx5IHN0b3JlIHRoZQorLy8gcmVsYXRpdmUgbWFnbml0dWRlIGFuZCBkaXJlY3Rpb24gb2Yg
Ym90aCBpbml0aWFsIHgtIGFuZCB5LXZlbG9jaXRpZXMsIGFuZCB1c2UgdGhpcyB0byBzY2FsZSB0
aGUKKy8vIGNvbXB1dGVkIGRpc3BsYWNlbWVudCBhdCBhbnkgcG9pbnQgaW4gdGltZS4gVGhpcyBn
dWFyYW50ZWVzIHRoYXQgZmxpbmcgdHJhamVjdG9yaWVzIGFyZSBzdHJhaWdodAorLy8gbGluZXMg
d2hlbiB2aWV3ZWQgaW4geC15IHNwYWNlLiBJbml0aWFsIHZlbG9jaXRpZXMgdGhhdCBsaWUgb3V0
c2lkZSB0aGUgbWF4IHZlbG9jaXR5IGFyZSBjb25zdHJhaW5lZAorLy8gdG8gc3RhcnQgYXQgemVy
byAoYW5kIHRodXMgYXJlIGltcGxpY2l0bHkgc2NhbGVkKS4KKy8vCisvLyBUaGUgY3VydmUgaXMg
bW9kZWxsZWQgYXMgYSA0dGggb3JkZXIgcG9seW5vbWlhbCwgc3RhcnRpbmcgYXQgdCA9IDAsIGFu
ZCBlbmRpbmcgYXQgdCA9IG1fY3VydmVEdXJhdGlvbi4KKy8vIEF0dGVtcHRzIHRvIGdlbmVyYXRl
IHBvc2l0aW9uL3ZlbG9jaXR5IGVzdGltYXRlcyBvdXRzaWRlIHRoaXMgcmFuZ2UgYXJlIHVuZGVm
aW5lZC4KKworY29uc3QgaW50IFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6bV9tYXhT
ZWFyY2hJdGVyYXRpb25zID0gMjA7CisKK1Bhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+
IFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlRm9yVG91Y2hQYWQoY29uc3Qg
RmxvYXRQb2ludCYgdmVsb2NpdHksIEludFBvaW50IGN1bXVsYXRpdmVTY3JvbGwpCit7CisgICAg
Ly8gVGhlIGRlZmF1bHQgcGFyYW1ldGVycyBsaXN0ZWQgYmVsb3cgYXJlIGEgbWF0Y2hlZCBzZXQs
IGFuZCBzaG91bGQgbm90IGJlIGNoYW5nZWQgaW5kZXBlbmRlbnRseSBvZiBvbmUgYW5vdGhlci4K
KyAgICByZXR1cm4gY3JlYXRlKHZlbG9jaXR5LCAtNS43MDc2MmUrMDMsIDEuNzJlKzAyLCAzLjdl
KzAwLCAwLCAwLCAxLjMsIGN1bXVsYXRpdmVTY3JvbGwpOworfQorCitQYXNzT3duUHRyPFBsYXRm
b3JtR2VzdHVyZUN1cnZlPiBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZUZv
clRvdWNoU2NyZWVuKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBJbnRQb2ludCBjdW11bGF0
aXZlU2Nyb2xsKQoreworICAgIC8vIFRoZSB0b3VjaHNjcmVlbi1zcGVjaWZpYyBwYXJhbWV0ZXJz
IGxpc3RlZCBiZWxvdyBhcmUgYSBtYXRjaGVkIHNldCwgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdl
ZCBpbmRlcGVuZGVudGx5IG9mIG9uZSBhbm90aGVyLgorICAgIHJldHVybiBjcmVhdGUodmVsb2Np
dHksIC0zLjVlKzAzLCA5MCwgMy4wZSswMCwgMCwgMCwgMS41ODY0LCBjdW11bGF0aXZlU2Nyb2xs
KTsKK30KKworLy8gRklYTUU6IG5lZWQgdG8gcmVtb3ZlIHAzLCBwNCBoZXJlIGFuZCBiZWxvdyBh
cyB0aGV5IGFyZSBub3QgdXNlZCBpbiB0aGUgZXhwb25lbnRpYWwgY3VydmUsIGJ1dCBsZWF2ZSBp
biBmb3Igbm93IHRvIGZhY2lsaXRhdGUKKy8vIHRoZSBpbi1mbGlnaHQgcGF0Y2ggZm9yIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTY2MyAuCitQYXNzT3duUHRyPFBs
YXRmb3JtR2VzdHVyZUN1cnZlPiBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0
ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgZmxvYXQgcDAsIGZsb2F0IHAxLCBmbG9hdCBw
MiwgZmxvYXQgcDMsIGZsb2F0IHA0LCBmbG9hdCBjdXJ2ZUR1cmF0aW9uLCBJbnRQb2ludCBjdW11
bGF0aXZlU2Nyb2xsKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVG91Y2hGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlKHZlbG9jaXR5LCBwMCwgcDEsIHAyLCBwMywgcDQsIGN1cnZlRHVyYXRp
b24sIGN1bXVsYXRpdmVTY3JvbGwpKTsKK30KKworaW5saW5lIGRvdWJsZSBwb3NpdGlvbihkb3Vi
bGUgdCwgZmxvYXQqIHApCit7CisgICAgcmV0dXJuIHBbMF0gKiBleHAoLXBbMl0gKiB0KSAtIHBb
MV0gKiB0IC0gcFswXTsKK30KKworaW5saW5lIGRvdWJsZSB2ZWxvY2l0eShkb3VibGUgdCwgZmxv
YXQqIHApCit7CisgICAgcmV0dXJuIC1wWzBdICogcFsyXSAqIGV4cCgtcFsyXSAqIHQpIC0gcFsx
XTsKK30KKworVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpUb3VjaEZsaW5nUGxhdGZv
cm1HZXN0dXJlQ3VydmUoY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbFZlbG9jaXR5LCBmbG9hdCBw
MCwgZmxvYXQgcDEsIGZsb2F0IHAyLCBmbG9hdCBwMywgZmxvYXQgcDQsIGZsb2F0IGN1cnZlRHVy
YXRpb24sIGNvbnN0IEludFBvaW50JiBjdW11bGF0aXZlU2Nyb2xsKQorICAgIDogbV9jdW11bGF0
aXZlU2Nyb2xsKGN1bXVsYXRpdmVTY3JvbGwpCisgICAgLCBtX2N1cnZlRHVyYXRpb24oY3VydmVE
dXJhdGlvbikKK3sKKyAgICBBU1NFUlQoaW5pdGlhbFZlbG9jaXR5ICE9IEZsb2F0UG9pbnQ6Onpl
cm8oKSk7CisKKyAgICBtX2NvZWZmc1swXSA9IHAwOyAvLyBhbHBoYQorICAgIG1fY29lZmZzWzFd
ID0gcDE7IC8vIGJldGEKKyAgICBtX2NvZWZmc1syXSA9IHAyOyAvLyBnYW1tYQorICAgIG1fY29l
ZmZzWzNdID0gcDM7IC8vIG5vdCB1c2VkCisgICAgbV9jb2VmZnNbNF0gPSBwNDsgLy8gbm90IHVz
ZWQKKworICAgIGZsb2F0IG1heEluaXRpYWxWZWxvY2l0eSA9IG1heChmYWJzKGluaXRpYWxWZWxv
Y2l0eS54KCkpLCBmYWJzKGluaXRpYWxWZWxvY2l0eS55KCkpKTsKKworICAgIC8vIEZvcmNlIG1h
eEluaXRpYWxWZWxvY2l0eSB0byBsaWUgaW4gdGhlIHJhbmdlIHYoMCkgdG8gdihjdXJ2ZUR1cmF0
aW9uKSwgYW5kIGFzc3VtZSB0aGF0CisgICAgLy8gdGhlIGN1cnZlIHBhcmFtZXRlcnMgZGVmaW5l
IGEgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIHZlbG9jaXR5LCBvciBlbHNlIGJpc2VjdGlvbiBz
ZWFyY2ggbWF5CisgICAgLy8gZmFpbC4KKyAgICBpZiAobWF4SW5pdGlhbFZlbG9jaXR5ID4gdmVs
b2NpdHkoMCwgbV9jb2VmZnMpKQorICAgICAgICBtYXhJbml0aWFsVmVsb2NpdHkgPSB2ZWxvY2l0
eSgwLCBtX2NvZWZmcyk7CisKKyAgICBpZiAobWF4SW5pdGlhbFZlbG9jaXR5IDwgdmVsb2NpdHko
bV9jdXJ2ZUR1cmF0aW9uLCBtX2NvZWZmcykpCisgICAgICAgIG1heEluaXRpYWxWZWxvY2l0eSA9
IHZlbG9jaXR5KG1fY3VydmVEdXJhdGlvbiwgbV9jb2VmZnMpOworCisgICAgLy8gV2Uga2VlcCB0
cmFjayBvZiByZWxhdGl2ZSBtYWduaXR1ZGVzIGFuZCBkaXJlY3Rpb25zIG9mIHRoZSB2ZWxvY2l0
eS9kaXNwbGFjZW1lbnQgY29tcG9uZW50cyBoZXJlLgorICAgIG1fZGlzcGxhY2VtZW50UmF0aW8g
PSBGbG9hdFBvaW50KGluaXRpYWxWZWxvY2l0eS54KCkgLyBtYXhJbml0aWFsVmVsb2NpdHksIGlu
aXRpYWxWZWxvY2l0eS55KCkgLyBtYXhJbml0aWFsVmVsb2NpdHkpOworCisgICAgLy8gVXNlIGJh
c2ljIGJpc2VjdGlvbiB0byBlc3RpbWF0ZSB3aGVyZSB3ZSBzaG91bGQgc3RhcnQgb24gdGhlIGN1
cnZlLgorICAgIC8vIEZJWE1FOiBXb3VsZCBOZXd0b24ncyBtZXRob2QgYmUgYmV0dGVyPworICAg
IGNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMTsgLy8gSXQgaXMgcHJvYmFibHkgZ29vZCBlbm91Z2gg
dG8gZ2V0IHRoZSBzdGFydCBwb2ludCB0byB3aXRoaW4gMSBwaXhlbC9zZWMuCisgICAgZG91Ymxl
IHQwID0gMDsKKyAgICBkb3VibGUgdDEgPSBjdXJ2ZUR1cmF0aW9uOworICAgIGludCBudW1JdGVy
YXRpb25zID0gMDsKKyAgICB3aGlsZSAodDAgPCB0MSAmJiBudW1JdGVyYXRpb25zIDwgbV9tYXhT
ZWFyY2hJdGVyYXRpb25zKSB7CisgICAgICAgIG51bUl0ZXJhdGlvbnMrKzsKKyAgICAgICAgbV90
aW1lT2Zmc2V0ID0gKHQwICsgdDEpICogMC41OworICAgICAgICBkb3VibGUgdk9mZnNldCA9IHZl
bG9jaXR5KG1fdGltZU9mZnNldCwgbV9jb2VmZnMpOworICAgICAgICBpZiAoZmFicyhtYXhJbml0
aWFsVmVsb2NpdHkgLSB2T2Zmc2V0KSA8IGVwc2lsb24pCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBpZiAodk9mZnNldCA+IG1heEluaXRpYWxWZWxvY2l0eSkKKyAgICAgICAgICAgIHQw
ID0gbV90aW1lT2Zmc2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB0MSA9IG1fdGltZU9m
ZnNldDsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIGN1cnZlIHBvc2l0aW9uIGF0IG9mZnNldCB0
aW1lCisgICAgbV9wb3NpdGlvbk9mZnNldCA9IHBvc2l0aW9uKG1fdGltZU9mZnNldCwgbV9jb2Vm
ZnMpOworfQorCitUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6On5Ub3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUoKQoreworfQorCitjb25zdCBjaGFyKiBUb3VjaEZsaW5nUGxhdGZv
cm1HZXN0dXJlQ3VydmU6OmRlYnVnTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJUb3VjaHBh
ZEZsaW5nIjsKK30KKworYm9vbCBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5
KGRvdWJsZSB0aW1lLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQoreworICAg
IGZsb2F0IGRpc3BsYWNlbWVudDsKKyAgICBpZiAodGltZSA8IDApCisgICAgICAgIGRpc3BsYWNl
bWVudCA9IDA7CisgICAgZWxzZSBpZiAodGltZSArIG1fdGltZU9mZnNldCA8IG1fY3VydmVEdXJh
dGlvbikKKyAgICAgICAgZGlzcGxhY2VtZW50ID0gcG9zaXRpb24odGltZSArIG1fdGltZU9mZnNl
dCwgbV9jb2VmZnMpIC0gbV9wb3NpdGlvbk9mZnNldDsKKyAgICBlbHNlCisgICAgICAgIGRpc3Bs
YWNlbWVudCA9IHBvc2l0aW9uKG1fY3VydmVEdXJhdGlvbiwgbV9jb2VmZnMpIC0gbV9wb3NpdGlv
bk9mZnNldDsKKworICAgIC8vIEtlZXAgdHJhY2sgb2YgaW50ZWdlciBwb3J0aW9uIG9mIHNjcm9s
bCB0aHVzIGZhciwgYW5kIHByZXBhcmUgaW5jcmVtZW50LgorICAgIEludFBvaW50IHNjcm9sbChk
aXNwbGFjZW1lbnQgKiBtX2Rpc3BsYWNlbWVudFJhdGlvLngoKSwgZGlzcGxhY2VtZW50ICogbV9k
aXNwbGFjZW1lbnRSYXRpby55KCkpOworICAgIEludFBvaW50IHNjcm9sbEluY3JlbWVudChzY3Jv
bGwgLSBtX2N1bXVsYXRpdmVTY3JvbGwpOworICAgIG1fY3VtdWxhdGl2ZVNjcm9sbCA9IHNjcm9s
bDsKKworICAgIGlmICh0aW1lICsgbV90aW1lT2Zmc2V0IDwgbV9jdXJ2ZUR1cmF0aW9uIHx8IHNj
cm9sbEluY3JlbWVudCAhPSBJbnRQb2ludDo6emVybygpKSB7CisgICAgICAgIHRhcmdldC0+c2Ny
b2xsQnkoc2Nyb2xsSW5jcmVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM4OGNhMzcwNTI2OWM0MWIyY2FhYWJiMzU4ZDc3MGRiOTI0YWNiMTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisjZGVmaW5lIFRvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldDsKKworLy8gSW1wbGVtZW50YXRpb24gb2YgUGxhdGZv
cm1HZXN0dXJlQ3VydmUgc3VpdGFibGUgZm9yIHRvdWNoIHBhZC9zY3JlZW4tYmFzZWQKKy8vIGZs
aW5nIHNjcm9sbC4gU3RhcnRzIHdpdGggYSBmbGF0IHZlbG9jaXR5IHByb2ZpbGUgYmFzZWQgb24g
J3ZlbG9jaXR5Jywgd2hpY2gKKy8vIHRhaWxzIG9mZiB0byB6ZXJvLiBUaW1lIGlzIHNjYWxlZCB0
byB0aGF0IGR1cmF0aW9uIG9mIHRoZSBmbGluZyBpcyBwcm9wb3J0aW9uYWwKKy8vIHRoZSBpbml0
aWFsIHZlbG9jaXR5LgorY2xhc3MgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlICA6IHB1
YmxpYyBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGNyZWF0ZUZvclRvdWNoUGFkKGNvbnN0IEZsb2F0UG9p
bnQmIHZlbG9jaXR5LCBJbnRQb2ludCBjdW11bGF0aXZlU2Nyb2xsID0gSW50UG9pbnQoKSk7Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGNyZWF0ZUZvclRvdWNo
U2NyZWVuKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBJbnRQb2ludCBjdW11bGF0aXZlU2Ny
b2xsID0gSW50UG9pbnQoKSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJl
Q3VydmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgZmxvYXQgcDAsIGZsb2F0
IHAxLCBmbG9hdCBwMiwgZmxvYXQgcDMsIGZsb2F0IHA0LCBmbG9hdCBjdXJ2ZUR1cmF0aW9uLCBJ
bnRQb2ludCBjdW11bGF0aXZlU2Nyb2xsID0gSW50UG9pbnQoKSk7CisgICAgdmlydHVhbCB+VG91
Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGRlYnVnTmFtZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBhcHBseShkb3Vi
bGUgbW9ub3RvbmljVGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqKSBPVkVSUklERTsK
KworcHJpdmF0ZToKKyAgICBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUoY29uc3QgRmxv
YXRQb2ludCYgdmVsb2NpdHksIGZsb2F0IHAwLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGZsb2F0IHAz
LCBmbG9hdCBwNCwgZmxvYXQgY3VydmVEdXJhdGlvbiwgY29uc3QgSW50UG9pbnQmIGN1bXVsYXRp
dmVTY3JvbGwpOworCisgICAgRmxvYXRQb2ludCBtX2Rpc3BsYWNlbWVudFJhdGlvOworICAgIElu
dFBvaW50IG1fY3VtdWxhdGl2ZVNjcm9sbDsKKyAgICBmbG9hdCBtX2NvZWZmc1s1XTsKKyAgICBm
bG9hdCBtX3RpbWVPZmZzZXQ7CisgICAgZmxvYXQgbV9jdXJ2ZUR1cmF0aW9uOworICAgIGZsb2F0
IG1fcG9zaXRpb25PZmZzZXQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IG1fbWF4U2VhcmNoSXRl
cmF0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hwYWRGbGluZ1BsYXRmb3Jt
R2VzdHVyZUN1cnZlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJiZmJlYTVl
MTMyZWYzOWNlOTRiZGM4ZGFmMjUxYWVmMGEyOWIyMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaHBhZEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRvdWNo
cGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1HZXN0
dXJlQ3VydmVUYXJnZXQuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotLy8gVGhpcyBjdXJ2ZSBpbXBsZW1lbnRhdGlv
biBpcyBiYXNlZCBvbiB0aGUgbm90aW9uIG9mIGEgc2luZ2xlLCBhYnNvbHV0ZSBjdXJ2ZSwgd2hp
Y2ggc3RhcnRzIGF0Ci0vLyBhIGxhcmdlIHZlbG9jaXR5IGFuZCBzbW9vdGhseSBkZWNyZWFzZXMg
dG8gemVyby4gRm9yIGEgZ2l2ZW4gaW5wdXQgdmVsb2NpdHksIHdlIGZpbmQgd2hlcmUgb24KLS8v
IHRoZSBjdXJ2ZSB0aGlzIHZlbG9jaXR5IG9jY3VycywgYW5kIHN0YXJ0IHRoZSBhbmltYXRpb24g
YXQgdGhpcyBwb2ludC0tLWRlbm90ZWQgYnkgKG1fdGltZU9mZnNldCwKLS8vIG1fcG9zaXRpb25P
ZmZzZXQpLgotLy8KLS8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgYXV0b21hdGljYWxseSBkZXRl
cm1pbmluZyBhbiBhbmltYXRpb24gZHVyYXRpb24gdGhhdCBzY2FsZXMgd2l0aCBpbnB1dAotLy8g
dmVsb2NpdHksIGFzIGZhc3RlciBpbml0aWFsIHZlbG9jaXRpZXMgc3RhcnQgZWFybGllciBvbiB0
aGUgY3VydmUgYW5kIHRodXMgdGFrZSBsb25nZXIgdG8gcmVhY2ggdGhlIGVuZC4KLS8vIE5vIGNv
bXBsaWNhdGVkIHRpbWUgc2NhbGluZyBpcyByZXF1aXJlZC4KLS8vCi0vLyBTaW5jZSB0aGUgc3Rh
cnRpbmcgdmVsb2NpdHkgaXMgaW1wbGljaXRseSBkZXRlcm1pbmVkIGJ5IG91ciBzdGFydGluZyBw
b2ludCwgd2Ugb25seSBzdG9yZSB0aGUKLS8vIHJlbGF0aXZlIG1hZ25pdHVkZSBhbmQgZGlyZWN0
aW9uIG9mIGJvdGggaW5pdGlhbCB4LSBhbmQgeS12ZWxvY2l0aWVzLCBhbmQgdXNlIHRoaXMgdG8g
c2NhbGUgdGhlCi0vLyBjb21wdXRlZCBkaXNwbGFjZW1lbnQgYXQgYW55IHBvaW50IGluIHRpbWUu
IFRoaXMgZ3VhcmFudGVlcyB0aGF0IGZsaW5nIHRyYWplY3RvcmllcyBhcmUgc3RyYWlnaHQKLS8v
IGxpbmVzIHdoZW4gdmlld2VkIGluIHgteSBzcGFjZS4gSW5pdGlhbCB2ZWxvY2l0aWVzIHRoYXQg
bGllIG91dHNpZGUgdGhlIG1heCB2ZWxvY2l0eSBhcmUgY29uc3RyYWluZWQKLS8vIHRvIHN0YXJ0
IGF0IHplcm8gKGFuZCB0aHVzIGFyZSBpbXBsaWNpdGx5IHNjYWxlZCkuCi0vLwotLy8gVGhlIGN1
cnZlIGlzIG1vZGVsbGVkIGFzIGEgNHRoIG9yZGVyIHBvbHlub21pYWwsIHN0YXJ0aW5nIGF0IHQg
PSAwLCBhbmQgZW5kaW5nIGF0IHQgPSBtX2N1cnZlRHVyYXRpb24uCi0vLyBBdHRlbXB0cyB0byBn
ZW5lcmF0ZSBwb3NpdGlvbi92ZWxvY2l0eSBlc3RpbWF0ZXMgb3V0c2lkZSB0aGlzIHJhbmdlIGFy
ZSB1bmRlZmluZWQuCi0KLWNvbnN0IGludCBUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmU6Om1fbWF4U2VhcmNoSXRlcmF0aW9ucyA9IDIwOwotCi1QYXNzT3duUHRyPFBsYXRmb3JtR2Vz
dHVyZUN1cnZlPiBUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShjb25z
dCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgSW50UG9pbnQgY3VtdWxhdGl2ZVNjcm9sbCkKLXsKLSAg
ICAvLyBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGxpc3RlZCBiZWxvdyBhcmUgYSBtYXRjaGVkIHNl
dCwgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZCBpbmRlcGVuZGVudGx5IG9mIG9uZSBhbm90aGVy
LgotICAgIHJldHVybiBjcmVhdGUodmVsb2NpdHksIC01LjcwNzYyZSswMywgMS43MmUrMDIsIDMu
N2UrMDAsIDAsIDAsIDEuMywgY3VtdWxhdGl2ZVNjcm9sbCk7Ci19Ci0KLS8vIEZJWE1FOiBuZWVk
IHRvIHJlbW92ZSBwMywgcDQgaGVyZSBhbmQgYmVsb3cgYXMgdGhleSBhcmUgbm90IHVzZWQgaW4g
dGhlIGV4cG9uZW50aWFsIGN1cnZlLCBidXQgbGVhdmUgaW4gZm9yIG5vdyB0byBmYWNpbGl0YXRl
Ci0vLyB0aGUgaW4tZmxpZ2h0IHBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE2NjMgLgotUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gVG91
Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYg
dmVsb2NpdHksIGZsb2F0IHAwLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGZsb2F0IHAzLCBmbG9hdCBw
NCwgZmxvYXQgY3VydmVEdXJhdGlvbiwgSW50UG9pbnQgY3VtdWxhdGl2ZVNjcm9sbCkKLXsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSh2
ZWxvY2l0eSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBjdXJ2ZUR1cmF0aW9uLCBjdW11bGF0aXZlU2Ny
b2xsKSk7Ci19Ci0KLWlubGluZSBkb3VibGUgcG9zaXRpb24oZG91YmxlIHQsIGZsb2F0KiBwKQot
ewotICAgIHJldHVybiBwWzBdICogZXhwKC1wWzJdICogdCkgLSBwWzFdICogdCAtIHBbMF07Ci19
Ci0KLWlubGluZSBkb3VibGUgdmVsb2NpdHkoZG91YmxlIHQsIGZsb2F0KiBwKQotewotICAgIHJl
dHVybiAtcFswXSAqIHBbMl0gKiBleHAoLXBbMl0gKiB0KSAtIHBbMV07Ci19Ci0KLVRvdWNocGFk
RmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6VG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlKGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxWZWxvY2l0eSwgZmxvYXQgcDAsIGZsb2F0IHAx
LCBmbG9hdCBwMiwgZmxvYXQgcDMsIGZsb2F0IHA0LCBmbG9hdCBjdXJ2ZUR1cmF0aW9uLCBjb25z
dCBJbnRQb2ludCYgY3VtdWxhdGl2ZVNjcm9sbCkKLSAgICA6IG1fY3VtdWxhdGl2ZVNjcm9sbChj
dW11bGF0aXZlU2Nyb2xsKQotICAgICwgbV9jdXJ2ZUR1cmF0aW9uKGN1cnZlRHVyYXRpb24pCi17
Ci0gICAgQVNTRVJUKGluaXRpYWxWZWxvY2l0eSAhPSBGbG9hdFBvaW50Ojp6ZXJvKCkpOwotCi0g
ICAgbV9jb2VmZnNbMF0gPSBwMDsgLy8gYWxwaGEKLSAgICBtX2NvZWZmc1sxXSA9IHAxOyAvLyBi
ZXRhCi0gICAgbV9jb2VmZnNbMl0gPSBwMjsgLy8gZ2FtbWEKLSAgICBtX2NvZWZmc1szXSA9IHAz
OyAvLyBub3QgdXNlZAotICAgIG1fY29lZmZzWzRdID0gcDQ7IC8vIG5vdCB1c2VkCi0KLSAgICBm
bG9hdCBtYXhJbml0aWFsVmVsb2NpdHkgPSBtYXgoZmFicyhpbml0aWFsVmVsb2NpdHkueCgpKSwg
ZmFicyhpbml0aWFsVmVsb2NpdHkueSgpKSk7Ci0KLSAgICAvLyBGb3JjZSBtYXhJbml0aWFsVmVs
b2NpdHkgdG8gbGllIGluIHRoZSByYW5nZSB2KDApIHRvIHYoY3VydmVEdXJhdGlvbiksIGFuZCBh
c3N1bWUgdGhhdAotICAgIC8vIHRoZSBjdXJ2ZSBwYXJhbWV0ZXJzIGRlZmluZSBhIG1vbm90b25p
Y2FsbHkgZGVjcmVhc2luZyB2ZWxvY2l0eSwgb3IgZWxzZSBiaXNlY3Rpb24gc2VhcmNoIG1heQot
ICAgIC8vIGZhaWwuCi0gICAgaWYgKG1heEluaXRpYWxWZWxvY2l0eSA+IHZlbG9jaXR5KDAsIG1f
Y29lZmZzKSkKLSAgICAgICAgbWF4SW5pdGlhbFZlbG9jaXR5ID0gdmVsb2NpdHkoMCwgbV9jb2Vm
ZnMpOwotCi0gICAgaWYgKG1heEluaXRpYWxWZWxvY2l0eSA8IHZlbG9jaXR5KG1fY3VydmVEdXJh
dGlvbiwgbV9jb2VmZnMpKQotICAgICAgICBtYXhJbml0aWFsVmVsb2NpdHkgPSB2ZWxvY2l0eSht
X2N1cnZlRHVyYXRpb24sIG1fY29lZmZzKTsKLQotICAgIC8vIFdlIGtlZXAgdHJhY2sgb2YgcmVs
YXRpdmUgbWFnbml0dWRlcyBhbmQgZGlyZWN0aW9ucyBvZiB0aGUgdmVsb2NpdHkvZGlzcGxhY2Vt
ZW50IGNvbXBvbmVudHMgaGVyZS4KLSAgICBtX2Rpc3BsYWNlbWVudFJhdGlvID0gRmxvYXRQb2lu
dChpbml0aWFsVmVsb2NpdHkueCgpIC8gbWF4SW5pdGlhbFZlbG9jaXR5LCBpbml0aWFsVmVsb2Np
dHkueSgpIC8gbWF4SW5pdGlhbFZlbG9jaXR5KTsKLQotICAgIC8vIFVzZSBiYXNpYyBiaXNlY3Rp
b24gdG8gZXN0aW1hdGUgd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0IG9uIHRoZSBjdXJ2ZS4KLSAgICAv
LyBGSVhNRTogV291bGQgTmV3dG9uJ3MgbWV0aG9kIGJlIGJldHRlcj8KLSAgICBjb25zdCBkb3Vi
bGUgZXBzaWxvbiA9IDE7IC8vIEl0IGlzIHByb2JhYmx5IGdvb2QgZW5vdWdoIHRvIGdldCB0aGUg
c3RhcnQgcG9pbnQgdG8gd2l0aGluIDEgcGl4ZWwvc2VjLgotICAgIGRvdWJsZSB0MCA9IDA7Ci0g
ICAgZG91YmxlIHQxID0gY3VydmVEdXJhdGlvbjsKLSAgICBpbnQgbnVtSXRlcmF0aW9ucyA9IDA7
Ci0gICAgd2hpbGUgKHQwIDwgdDEgJiYgbnVtSXRlcmF0aW9ucyA8IG1fbWF4U2VhcmNoSXRlcmF0
aW9ucykgewotICAgICAgICBudW1JdGVyYXRpb25zKys7Ci0gICAgICAgIG1fdGltZU9mZnNldCA9
ICh0MCArIHQxKSAqIDAuNTsKLSAgICAgICAgZG91YmxlIHZPZmZzZXQgPSB2ZWxvY2l0eShtX3Rp
bWVPZmZzZXQsIG1fY29lZmZzKTsKLSAgICAgICAgaWYgKGZhYnMobWF4SW5pdGlhbFZlbG9jaXR5
IC0gdk9mZnNldCkgPCBlcHNpbG9uKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYg
KHZPZmZzZXQgPiBtYXhJbml0aWFsVmVsb2NpdHkpCi0gICAgICAgICAgICB0MCA9IG1fdGltZU9m
ZnNldDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdDEgPSBtX3RpbWVPZmZzZXQ7Ci0gICAg
fQotCi0gICAgLy8gQ29tcHV0ZSBjdXJ2ZSBwb3NpdGlvbiBhdCBvZmZzZXQgdGltZQotICAgIG1f
cG9zaXRpb25PZmZzZXQgPSBwb3NpdGlvbihtX3RpbWVPZmZzZXQsIG1fY29lZmZzKTsKLX0KLQot
VG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjp+VG91Y2hwYWRGbGluZ1BsYXRmb3Jt
R2VzdHVyZUN1cnZlKCkKLXsKLX0KLQotY29uc3QgY2hhciogVG91Y2hwYWRGbGluZ1BsYXRmb3Jt
R2VzdHVyZUN1cnZlOjpkZWJ1Z05hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiVG91Y2hwYWRG
bGluZyI7Ci19Ci0KLWJvb2wgVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjphcHBs
eShkb3VibGUgdGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQqIHRhcmdldCkKLXsKLSAg
ICBmbG9hdCBkaXNwbGFjZW1lbnQ7Ci0gICAgaWYgKHRpbWUgPCAwKQotICAgICAgICBkaXNwbGFj
ZW1lbnQgPSAwOwotICAgIGVsc2UgaWYgKHRpbWUgKyBtX3RpbWVPZmZzZXQgPCBtX2N1cnZlRHVy
YXRpb24pCi0gICAgICAgIGRpc3BsYWNlbWVudCA9IHBvc2l0aW9uKHRpbWUgKyBtX3RpbWVPZmZz
ZXQsIG1fY29lZmZzKSAtIG1fcG9zaXRpb25PZmZzZXQ7Ci0gICAgZWxzZQotICAgICAgICBkaXNw
bGFjZW1lbnQgPSBwb3NpdGlvbihtX2N1cnZlRHVyYXRpb24sIG1fY29lZmZzKSAtIG1fcG9zaXRp
b25PZmZzZXQ7Ci0KLSAgICAvLyBLZWVwIHRyYWNrIG9mIGludGVnZXIgcG9ydGlvbiBvZiBzY3Jv
bGwgdGh1cyBmYXIsIGFuZCBwcmVwYXJlIGluY3JlbWVudC4KLSAgICBJbnRQb2ludCBzY3JvbGwo
ZGlzcGxhY2VtZW50ICogbV9kaXNwbGFjZW1lbnRSYXRpby54KCksIGRpc3BsYWNlbWVudCAqIG1f
ZGlzcGxhY2VtZW50UmF0aW8ueSgpKTsKLSAgICBJbnRQb2ludCBzY3JvbGxJbmNyZW1lbnQoc2Ny
b2xsIC0gbV9jdW11bGF0aXZlU2Nyb2xsKTsKLSAgICBtX2N1bXVsYXRpdmVTY3JvbGwgPSBzY3Jv
bGw7Ci0KLSAgICBpZiAodGltZSArIG1fdGltZU9mZnNldCA8IG1fY3VydmVEdXJhdGlvbiB8fCBz
Y3JvbGxJbmNyZW1lbnQgIT0gSW50UG9pbnQ6Onplcm8oKSkgewotICAgICAgICB0YXJnZXQtPnNj
cm9sbEJ5KHNjcm9sbEluY3JlbWVudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFjODU1NzVkNTczY2Vm
ZGE0NDY4MWZlMzQ1ODA0MDAxNDgxY2JlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaHBhZEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlX2gKLSNk
ZWZpbmUgVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlX2gKLQotI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtR2VzdHVyZUN1cnZlVGFyZ2V0OwotCi0vLyBJbXBs
ZW1lbnRhdGlvbiBvZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSBzdWl0YWJsZSBmb3IgdG91Y2ggcGFk
L3NjcmVlbi1iYXNlZAotLy8gZmxpbmcgc2Nyb2xsLiBTdGFydHMgd2l0aCBhIGZsYXQgdmVsb2Np
dHkgcHJvZmlsZSBiYXNlZCBvbiAndmVsb2NpdHknLCB3aGljaAotLy8gdGFpbHMgb2ZmIHRvIHpl
cm8uIFRpbWUgaXMgc2NhbGVkIHRvIHRoYXQgZHVyYXRpb24gb2YgdGhlIGZsaW5nIGlzIHByb3Bv
cnRpb25hbAotLy8gdGhlIGluaXRpYWwgdmVsb2NpdHkuCi1jbGFzcyBUb3VjaHBhZEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUgOiBwdWJsaWMgUGxhdGZvcm1HZXN0dXJlQ3VydmUgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBjcmVhdGUoY29u
c3QgRmxvYXRQb2ludCYgdmVsb2NpdHksIEludFBvaW50IGN1bXVsYXRpdmVTY3JvbGwgPSBJbnRQ
b2ludCgpKTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gY3Jl
YXRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBmbG9hdCBwMCwgZmxvYXQgcDEsIGZsb2F0
IHAyLCBmbG9hdCBwMywgZmxvYXQgcDQsIGZsb2F0IGN1cnZlRHVyYXRpb24sIEludFBvaW50IGN1
bXVsYXRpdmVTY3JvbGwgPSBJbnRQb2ludCgpKTsKLSAgICB2aXJ0dWFsIH5Ub3VjaHBhZEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmUoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVidWdO
YW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGFwcGx5KGRvdWJsZSBtb25v
dG9uaWNUaW1lLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldCopIE9WRVJSSURFOwotCi1wcml2
YXRlOgotICAgIFRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZShjb25zdCBGbG9hdFBv
aW50JiB2ZWxvY2l0eSwgZmxvYXQgcDAsIGZsb2F0IHAxLCBmbG9hdCBwMiwgZmxvYXQgcDMsIGZs
b2F0IHA0LCBmbG9hdCBjdXJ2ZUR1cmF0aW9uLCBjb25zdCBJbnRQb2ludCYgY3VtdWxhdGl2ZVNj
cm9sbCk7Ci0KLSAgICBGbG9hdFBvaW50IG1fZGlzcGxhY2VtZW50UmF0aW87Ci0gICAgSW50UG9p
bnQgbV9jdW11bGF0aXZlU2Nyb2xsOwotICAgIGZsb2F0IG1fY29lZmZzWzVdOwotICAgIGZsb2F0
IG1fdGltZU9mZnNldDsKLSAgICBmbG9hdCBtX2N1cnZlRHVyYXRpb247Ci0gICAgZmxvYXQgbV9w
b3NpdGlvbk9mZnNldDsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbV9tYXhTZWFyY2hJdGVyYXRp
b25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvUGxhdGZvcm1HZXN0dXJl
Q3VydmVGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvUGxhdGZvcm1HZXN0dXJlQ3VydmVGYWN0b3J5LmNwcAppbmRleCBlY2Q5NzI0ZDlkZGNkOGZk
OGVkZWFkNmJhOGI1NmU4ZjQwYWU0ODBmLi4yMDNmMzljZTk5ZjQyNThiNGFmMDZkYzU0MWM4YWU4
YTIwNDdhYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1BsYXRmb3JtR2VzdHVyZUN1cnZlRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZUZhY3Rvcnku
Y3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZS5oIgorI2luY2x1ZGUgIlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1
ZGUgIldlYkZsaW5nQW5pbWF0b3JUb0dlc3R1cmVDdXJ2ZUFkYXB0ZXIuaCIKICNpbmNsdWRlICJX
ZWJJbnB1dEV2ZW50LmgiCiAKQEAgLTUwLDExICs1MCwxMCBAQCBQYXNzT3duUHRyPFdlYkNvcmU6
OlBsYXRmb3JtR2VzdHVyZUN1cnZlPiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZUZhY3Rvcnk6OmNyZWF0
ZUN1cgogICAgIGlmIChmbGluZ0FuaW1hdG9yKQogICAgICAgICByZXR1cm4gV2ViRmxpbmdBbmlt
YXRvclRvR2VzdHVyZUN1cnZlQWRhcHRlcjo6Y3JlYXRlKHBvaW50LCBXZWJDb3JlOjpJbnRSZWN0
KCksIGZsaW5nQW5pbWF0b3IucmVsZWFzZSgpKTsKIAotICAgIC8vIEZJWE1FOiBBZGQgYSB0b3Vj
aC1zY3JlZW4gc291cmNlZCBzcGVjaWZpYyBjdXJ2ZS4KICAgICBpZiAoZGV2aWNlU291cmNlID09
IFdlYkdlc3R1cmVFdmVudDo6VG91Y2hzY3JlZW4pCi0gICAgICAgIHJldHVybiBXZWJDb3JlOjpU
b3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShwb2ludCwgY3VtdWxhdGl2
ZVNjcm9sbCk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpUb3VjaEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmU6OmNyZWF0ZUZvclRvdWNoU2NyZWVuKHBvaW50LCBjdW11bGF0aXZlU2Nyb2xsKTsK
IAotICAgIHJldHVybiBXZWJDb3JlOjpUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6
OmNyZWF0ZShwb2ludCwgY3VtdWxhdGl2ZVNjcm9sbCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OlRv
dWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlRm9yVG91Y2hQYWQocG9pbnQsIGN1
bXVsYXRpdmVTY3JvbGwpOwogfQogCiB2b2lkIFBsYXRmb3JtR2VzdHVyZUN1cnZlRmFjdG9yeTo6
c2V0V2ViRmxpbmdBbmltYXRvckZvclRlc3QoUGFzc093blB0cjxXZWJGbGluZ0FuaW1hdG9yPiBt
b2NrRmxpbmdBbmltYXRvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcAppbmRleCA0ZjBhMjI3NmY4MTZmYzFl
MWM3YjkwMDU0NmJkZjk2YTEzYzhjNTkwLi5jM2EzODEwYzM3N2EzZjdhZDJhNzdkYWQ1NjQzYzc0
NjE5YmNjNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRm
b3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVk
ZSAiQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiQ0NHZXN0dXJlQ3VydmUu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdldC5oIgotI2luY2x1ZGUgIlRv
dWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgorI2luY2x1ZGUgIlRvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgIldoZWVsRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZS5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgpAQCAtMTAxLDcgKzEwMSw3IEBAIFRFU1QoUGxhdGZvcm1HZXN0dXJlQ3VydmUsIGZsaW5n
Q3VydmVUb3VjaCkKIHsKICAgICBkb3VibGUgaW5pdGlhbFZlbG9jaXR5ID0gNTAwMDsKICAgICBN
b2NrUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgdGFyZ2V0OwotICAgIE93blB0cjxBY3RpdmVQ
bGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVy
ZUFuaW1hdGlvbjo6Y3JlYXRlKFRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3Jl
YXRlKEZsb2F0UG9pbnQoaW5pdGlhbFZlbG9jaXR5LCAwKSksICZ0YXJnZXQpOworICAgIE93blB0
cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFjdGl2ZVBsYXRm
b3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZTo6Y3JlYXRlRm9yVG91Y2hQYWQoRmxvYXRQb2ludChpbml0aWFsVmVsb2NpdHksIDApKSwgJnRh
cmdldCk7CiAKICAgICAvLyBOb3RlOiB0aGUgZXhwZWN0YXRpb25zIGJlbG93IGFyZSBkZXBlbmRl
bnQgb24gdGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQtY29kZWQgaW4gdGhlIGN1cnZlIHBhcmFtZXRl
cnMuCiAgICAgLy8gICAgICAgSWYgdGhlIHBhcmFtZXRlcnMgY2hhbmdlLCB0aGVuIHRoZSB0ZXN0
cyB2YWx1ZXMvZXhwZWN0YXRpb25zIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162867</attachid>
            <date>2012-09-07 14:18:05 -0700</date>
            <delta_ts>2012-09-07 14:56:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95997-20120907171743.patch</filename>
            <type>text/plain</type>
            <size>31247</size>
            <attacher name="Robert Kroeger">rjkroege</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3ODY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhiMzQ2NmQwMjYwMzlm
NmE3NmExNDcxMWEyZDc3YjdlZjFkZWNhZi4uZmM2ZjFkNjJlYWVhMzk5MWQ1NWI3NjQ2ZTdlNmY0
NTY4YTY3YjNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA5LTA2ICBSb2Jl
cnQgS3JvZWdlciAgPHJqa3JvZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IEFkZCB0b3VjaHNjcmVlbiBzcGVjaWZpYyBmbGluZyBjdXJ2ZSBwYXJhbWV0cml6YXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgQWRkZWQgYSBuZXcg
c2V0IG9mIGZsaW5nIGN1cnZlIHBhcmFtZXRlcnMgd2l0aCBhIGdvb2QgZmVlbCBmb3IgdG91Y2hz
Y3JlZW4KKyAgICAgICAgaW5pdGlhdGVkIGZsaW5ncy4gUmVuYW1lZCBUb3VjaHBhZEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUgdG8KKyAgICAgICAgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlIHRvIGJldHRlciByZWZsZWN0IHRoYXQgdGhlIGNsYXNzCisgICAgICAgIGNhbiBzZXJ2ZSBm
b3IgYm90aCB0b3VjaHNjcmVlbiBhbmQgdG91Y2hwYWQgZmxpbmdzIHdoZW4gYXBwcm9wcmlhdGVs
eQorICAgICAgICBwYXJhbWV0cml6ZWQuIFVwZGF0ZWQgYnVpbGQgZmlsZXMgYXMgbmVjZXNzYXJ5
IGZvciB0aGUgcmVuYW1lLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIGV4aXN0aW5nIHRlc3Rz
IGFwcGx5LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3JOb25lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Tm9uZTo6ZmlyZVVwQW5BbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL1RvdWNoRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6
OmNyZWF0ZUZvclRvdWNoUGFkKToKKyAgICAgICAgKFdlYkNvcmU6OlRvdWNoRmxpbmdQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlRm9yVG91Y2hTY3JlZW4pOgorICAgICAgICBBZGRlZCB3aXRo
IHRvdWNoc2NyZWVuIHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjp2ZWxvY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6On5Ub3Vj
aEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6VG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpkZWJ1Z05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VG91
Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0v
VG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1BsYXRmb3JtR2VzdHVyZUN1cnZl
RmFjdG9yeS5jcHA6IGludm9rZXMKKyAgICAgICAgY3JlYXRlRm9yVG91Y2hQYWQgb3IgY3JlYXRl
Rm9yVG91Y2hTY3JlZW4gYXMgYXBwcm9wcmlhdGUuCisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3Jt
R2VzdHVyZUN1cnZlRmFjdG9yeTo6Y3JlYXRlQ3VydmUpOgorCiAyMDEyLTA5LTA3ICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTI3NzgwIGFuZCByMTI3ODU5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCAzZmY0MTFkMGQwODllZmRhZjgxYzAwOTU2ODRmYmE2MGM1ZmZiZjFkLi4xNjUwZTRi
NGVhY2NjNjg2ZjRhMjAyZmY1ZjFlNDMwNDU1MmM3YjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA5LTA3ICBSb2JlcnQgS3JvZWdlciAgPHJqa3Jv
ZWdlQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCB0b3VjaHNjcmVlbiBz
cGVjaWZpYyBmbGluZyBjdXJ2ZSBwYXJhbWV0cml6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1OTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgQWRkZWQgYSBuZXcgc2V0IG9mIGZsaW5nIGN1cnZl
IHBhcmFtZXRlcnMgd2l0aCBhIGdvb2QgZmVlbCBmb3IgdG91Y2hzY3JlZW4KKyAgICAgICAgaW5p
dGlhdGVkIGZsaW5ncy4gUmVuYW1lZCBUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUg
dG8KKyAgICAgICAgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlIHRvIGJldHRlciByZWZs
ZWN0IHRoYXQgdGhlIGNsYXNzCisgICAgICAgIGNhbiBzZXJ2ZSBmb3IgYm90aCB0b3VjaHNjcmVl
biBhbmQgdG91Y2hwYWQgZmxpbmdzIHdoZW4gYXBwcm9wcmlhdGVseQorICAgICAgICBwYXJhbWV0
cml6ZWQuIFVwZGF0ZWQgYnVpbGQgZmlsZXMgYXMgbmVjZXNzYXJ5IGZvciB0aGUgcmVuYW1lLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIGV4aXN0aW5nIHRlc3RzIGFwcGx5LgorCisKKyAgICAg
ICAgKiB0ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwOiBUbyB1c2UgdGhlIHJlbmFt
ZWQgY3VydmUgY29uc3RydWN0b3IuCisKIDIwMTItMDktMDcgIEFsbGFuIFNhbmRmZWxkIEplbnNl
biAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKICAgICAgICAgWDExIEdsb2JhbCBTZWxlY3Rp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGE5ZTk0ODk5NjkyOWU3Yjc3MDQxOTIwYjY0OTMw
ZGI0NGNiNDNjYy4uN2JlNjA3MjI0MmRiMDAxOTA1YWE2YTdjMDI0NjMxODQ2ZjE5YmQ0YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTI0OTAsNyArMjQ5MCw3IEBAIElGIChFTkFCTEVfU01PT1RI
X1NDUk9MTElORykKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxh
dGZvcm0vQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uLmNwcAogICAgICAgICBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCi0gICAgICAgIHBsYXRmb3JtL1RvdWNocGFkRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmNwcAogICAgICkKIEVORElGICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IGVmYTAwYjdlMWI0MzhjNmM3ZjY1NThhMjhmNDhjNzcxMmFmNGE5MmEu
LmM3ODYwOWZhMzBhN2VjODQ0MGMwODk0YTQxYjk4YTQ3MjFjZmU1NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtNDgwMiw4ICs0ODAyLDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVCaWRpLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZVR5cGVzLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RocmVhZENoZWNrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Ro
cmVhZEdsb2JhbERhdGEuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlM2I5ZjM2NjIzNWZhN2Mx
Y2Q1ZjYzNjA1ZjM1ZDU5NWFjODFjZmZjLi4wMWQwMmM0NzAxZGUyNDM4MDcxYWNiMTk3OGIyMjQ2
MGI1NzhjN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NTE5LDggKzQ1MTksOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL1RocmVhZFRpbWVycy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L1RocmVhZFRpbWVycy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9UaW1lci5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL1RvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3Vy
dmUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vVVVJRC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL1VVSUQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vV2hlZWxGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3JOb25lLmNwcAppbmRleCA2ZDFmM2RmNjMwZjljMzE5Y2I3MzQ5MGY1M2U0YTM3NTAy
MzU2OGY3Li45NjlkOGFhMDk1OWU1ODY2MGNhNGU5MTI2ZTY4NDI3ODRkNDdjMTYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAKQEAgLTQ2LDcg
KzQ2LDcgQEAKIAogI2lmIEVOQUJMRShHRVNUVVJFX0FOSU1BVElPTikKICNpbmNsdWRlICJBY3Rp
dmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24uaCIKLSNpbmNsdWRlICJUb3VjaHBhZEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlICJUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmUuaCIKICNlbmRpZgogCiAKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIFNjcm9sbEFuaW1h
dG9yTm9uZTo6ZmlyZVVwQW5BbmltYXRpb24oRmxvYXRQb2ludCBmcCkKICNpZiBFTkFCTEUoR0VT
VFVSRV9BTklNQVRJT04pCiAgICAgaWYgKG1fZ2VzdHVyZUFuaW1hdGlvbikKICAgICAgICAgbV9n
ZXN0dXJlQW5pbWF0aW9uLmNsZWFyKCk7Ci0gICAgbV9nZXN0dXJlQW5pbWF0aW9uID0gQWN0aXZl
UGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOjpjcmVhdGUoVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2Vz
dHVyZUN1cnZlOjpjcmVhdGUoZnApLCB0aGlzKTsKKyAgICBtX2dlc3R1cmVBbmltYXRpb24gPSBB
Y3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb246OmNyZWF0ZShUb3VjaEZsaW5nUGxhdGZvcm1H
ZXN0dXJlQ3VydmU6OmNyZWF0ZUZvclRvdWNoUGFkKGZwKSwgdGhpcyk7CiAjZW5kaWYKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCiAgICAgc3RhcnROZXh0VGltZXIoMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1H
ZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjFiODNmMDQ0NzI0NTE3ODk1ODczMzI5
NmJhYjQ4Njc3NTUxNmVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApAQCAtMCwwICsxLDE2MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVG91Y2hGbGlu
Z1BsYXRmb3JtR2VzdHVyZUN1cnZlLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2
ZVRhcmdldC5oIgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLyBUaGlzIGN1cnZlIGltcGxlbWVudGF0aW9uIGlzIGJh
c2VkIG9uIHRoZSBub3Rpb24gb2YgYSBzaW5nbGUsIGFic29sdXRlIGN1cnZlLCB3aGljaCBzdGFy
dHMgYXQKKy8vIGEgbGFyZ2UgdmVsb2NpdHkgYW5kIHNtb290aGx5IGRlY3JlYXNlcyB0byB6ZXJv
LiBGb3IgYSBnaXZlbiBpbnB1dCB2ZWxvY2l0eSwgd2UgZmluZCB3aGVyZSBvbgorLy8gdGhlIGN1
cnZlIHRoaXMgdmVsb2NpdHkgb2NjdXJzLCBhbmQgc3RhcnQgdGhlIGFuaW1hdGlvbiBhdCB0aGlz
IHBvaW50LS0tZGVub3RlZCBieSAobV90aW1lT2Zmc2V0LAorLy8gbV9wb3NpdGlvbk9mZnNldCku
CisvLworLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBhdXRvbWF0aWNhbGx5IGRldGVybWluaW5n
IGFuIGFuaW1hdGlvbiBkdXJhdGlvbiB0aGF0IHNjYWxlcyB3aXRoIGlucHV0CisvLyB2ZWxvY2l0
eSwgYXMgZmFzdGVyIGluaXRpYWwgdmVsb2NpdGllcyBzdGFydCBlYXJsaWVyIG9uIHRoZSBjdXJ2
ZSBhbmQgdGh1cyB0YWtlIGxvbmdlciB0byByZWFjaCB0aGUgZW5kLgorLy8gTm8gY29tcGxpY2F0
ZWQgdGltZSBzY2FsaW5nIGlzIHJlcXVpcmVkLgorLy8KKy8vIFNpbmNlIHRoZSBzdGFydGluZyB2
ZWxvY2l0eSBpcyBpbXBsaWNpdGx5IGRldGVybWluZWQgYnkgb3VyIHN0YXJ0aW5nIHBvaW50LCB3
ZSBvbmx5IHN0b3JlIHRoZQorLy8gcmVsYXRpdmUgbWFnbml0dWRlIGFuZCBkaXJlY3Rpb24gb2Yg
Ym90aCBpbml0aWFsIHgtIGFuZCB5LXZlbG9jaXRpZXMsIGFuZCB1c2UgdGhpcyB0byBzY2FsZSB0
aGUKKy8vIGNvbXB1dGVkIGRpc3BsYWNlbWVudCBhdCBhbnkgcG9pbnQgaW4gdGltZS4gVGhpcyBn
dWFyYW50ZWVzIHRoYXQgZmxpbmcgdHJhamVjdG9yaWVzIGFyZSBzdHJhaWdodAorLy8gbGluZXMg
d2hlbiB2aWV3ZWQgaW4geC15IHNwYWNlLiBJbml0aWFsIHZlbG9jaXRpZXMgdGhhdCBsaWUgb3V0
c2lkZSB0aGUgbWF4IHZlbG9jaXR5IGFyZSBjb25zdHJhaW5lZAorLy8gdG8gc3RhcnQgYXQgemVy
byAoYW5kIHRodXMgYXJlIGltcGxpY2l0bHkgc2NhbGVkKS4KKy8vCisvLyBUaGUgY3VydmUgaXMg
bW9kZWxsZWQgYXMgYSA0dGggb3JkZXIgcG9seW5vbWlhbCwgc3RhcnRpbmcgYXQgdCA9IDAsIGFu
ZCBlbmRpbmcgYXQgdCA9IG1fY3VydmVEdXJhdGlvbi4KKy8vIEF0dGVtcHRzIHRvIGdlbmVyYXRl
IHBvc2l0aW9uL3ZlbG9jaXR5IGVzdGltYXRlcyBvdXRzaWRlIHRoaXMgcmFuZ2UgYXJlIHVuZGVm
aW5lZC4KKworc3RhdGljIGNvbnN0IGludCBjTWF4U2VhcmNoSXRlcmF0aW9ucyA9IDIwOworCitQ
YXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmU6OmNyZWF0ZUZvclRvdWNoUGFkKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBJbnRQ
b2ludCBjdW11bGF0aXZlU2Nyb2xsKQoreworICAgIC8vIFRoZSBkZWZhdWx0IHBhcmFtZXRlcnMg
bGlzdGVkIGJlbG93IGFyZSBhIG1hdGNoZWQgc2V0LCBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2Vk
IGluZGVwZW5kZW50bHkgb2Ygb25lIGFub3RoZXIuCisgICAgcmV0dXJuIGNyZWF0ZSh2ZWxvY2l0
eSwgLTUuNzA3NjJlKzAzLCAxLjcyZSswMiwgMy43ZSswMCwgMS4zLCBjdW11bGF0aXZlU2Nyb2xs
KTsKK30KKworUGFzc093blB0cjxQbGF0Zm9ybUdlc3R1cmVDdXJ2ZT4gVG91Y2hGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlOjpjcmVhdGVGb3JUb3VjaFNjcmVlbihjb25zdCBGbG9hdFBvaW50JiB2
ZWxvY2l0eSwgSW50UG9pbnQgY3VtdWxhdGl2ZVNjcm9sbCkKK3sKKyAgICAvLyBUaGUgdG91Y2hz
Y3JlZW4tc3BlY2lmaWMgcGFyYW1ldGVycyBsaXN0ZWQgYmVsb3cgYXJlIGEgbWF0Y2hlZCBzZXQs
IGFuZCBzaG91bGQgbm90IGJlIGNoYW5nZWQgaW5kZXBlbmRlbnRseSBvZiBvbmUgYW5vdGhlci4K
KyAgICByZXR1cm4gY3JlYXRlKHZlbG9jaXR5LCAtMy41ZSswMywgOTAsIDMuMGUrMDAsIDEuNTg2
NCwgY3VtdWxhdGl2ZVNjcm9sbCk7Cit9CisKK1Bhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3Vy
dmU+IFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHZlbG9jaXR5LCBmbG9hdCBwMCwgZmxvYXQgcDEsIGZsb2F0IHAyLCBmbG9hdCBjdXJ2ZUR1
cmF0aW9uLCBJbnRQb2ludCBjdW11bGF0aXZlU2Nyb2xsKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKHZlbG9jaXR5LCBwMCwgcDEsIHAy
LCBjdXJ2ZUR1cmF0aW9uLCBjdW11bGF0aXZlU2Nyb2xsKSk7Cit9CisKK2lubGluZSBkb3VibGUg
cG9zaXRpb24oZG91YmxlIHQsIGZsb2F0KiBwKQoreworICAgIHJldHVybiBwWzBdICogZXhwKC1w
WzJdICogdCkgLSBwWzFdICogdCAtIHBbMF07Cit9CisKK2lubGluZSBkb3VibGUgdmVsb2NpdHko
ZG91YmxlIHQsIGZsb2F0KiBwKQoreworICAgIHJldHVybiAtcFswXSAqIHBbMl0gKiBleHAoLXBb
Ml0gKiB0KSAtIHBbMV07Cit9CisKK1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6VG91
Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxWZWxv
Y2l0eSwgZmxvYXQgcDAsIGZsb2F0IHAxLCBmbG9hdCBwMiwgZmxvYXQgY3VydmVEdXJhdGlvbiwg
Y29uc3QgSW50UG9pbnQmIGN1bXVsYXRpdmVTY3JvbGwpCisgICAgOiBtX2N1bXVsYXRpdmVTY3Jv
bGwoY3VtdWxhdGl2ZVNjcm9sbCkKKyAgICAsIG1fY3VydmVEdXJhdGlvbihjdXJ2ZUR1cmF0aW9u
KQoreworICAgIEFTU0VSVChpbml0aWFsVmVsb2NpdHkgIT0gRmxvYXRQb2ludDo6emVybygpKTsK
KworICAgIG1fY29lZmZpY2llbnRzWzBdID0gcDA7IC8vIGFscGhhCisgICAgbV9jb2VmZmljaWVu
dHNbMV0gPSBwMTsgLy8gYmV0YQorICAgIG1fY29lZmZpY2llbnRzWzJdID0gcDI7IC8vIGdhbW1h
CisKKyAgICBmbG9hdCBtYXhJbml0aWFsVmVsb2NpdHkgPSBtYXgoZmFicyhpbml0aWFsVmVsb2Np
dHkueCgpKSwgZmFicyhpbml0aWFsVmVsb2NpdHkueSgpKSk7CisKKyAgICAvLyBGb3JjZSBtYXhJ
bml0aWFsVmVsb2NpdHkgdG8gbGllIGluIHRoZSByYW5nZSB2KDApIHRvIHYoY3VydmVEdXJhdGlv
biksIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIHRoZSBjdXJ2ZSBwYXJhbWV0ZXJzIGRlZmluZSBh
IG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyB2ZWxvY2l0eSwgb3IgZWxzZSBiaXNlY3Rpb24gc2Vh
cmNoIG1heQorICAgIC8vIGZhaWwuCisgICAgaWYgKG1heEluaXRpYWxWZWxvY2l0eSA+IHZlbG9j
aXR5KDAsIG1fY29lZmZpY2llbnRzKSkKKyAgICAgICAgbWF4SW5pdGlhbFZlbG9jaXR5ID0gdmVs
b2NpdHkoMCwgbV9jb2VmZmljaWVudHMpOworCisgICAgaWYgKG1heEluaXRpYWxWZWxvY2l0eSA8
IHZlbG9jaXR5KG1fY3VydmVEdXJhdGlvbiwgbV9jb2VmZmljaWVudHMpKQorICAgICAgICBtYXhJ
bml0aWFsVmVsb2NpdHkgPSB2ZWxvY2l0eShtX2N1cnZlRHVyYXRpb24sIG1fY29lZmZpY2llbnRz
KTsKKworICAgIC8vIFdlIGtlZXAgdHJhY2sgb2YgcmVsYXRpdmUgbWFnbml0dWRlcyBhbmQgZGly
ZWN0aW9ucyBvZiB0aGUgdmVsb2NpdHkvZGlzcGxhY2VtZW50IGNvbXBvbmVudHMgaGVyZS4KKyAg
ICBtX2Rpc3BsYWNlbWVudFJhdGlvID0gRmxvYXRQb2ludChpbml0aWFsVmVsb2NpdHkueCgpIC8g
bWF4SW5pdGlhbFZlbG9jaXR5LCBpbml0aWFsVmVsb2NpdHkueSgpIC8gbWF4SW5pdGlhbFZlbG9j
aXR5KTsKKworICAgIC8vIFVzZSBiYXNpYyBiaXNlY3Rpb24gdG8gZXN0aW1hdGUgd2hlcmUgd2Ug
c2hvdWxkIHN0YXJ0IG9uIHRoZSBjdXJ2ZS4KKyAgICAvLyBGSVhNRTogV291bGQgTmV3dG9uJ3Mg
bWV0aG9kIGJlIGJldHRlcj8KKyAgICBjb25zdCBkb3VibGUgZXBzaWxvbiA9IDE7IC8vIEl0IGlz
IHByb2JhYmx5IGdvb2QgZW5vdWdoIHRvIGdldCB0aGUgc3RhcnQgcG9pbnQgdG8gd2l0aGluIDEg
cGl4ZWwvc2VjLgorICAgIGRvdWJsZSB0MCA9IDA7CisgICAgZG91YmxlIHQxID0gY3VydmVEdXJh
dGlvbjsKKyAgICBpbnQgbnVtSXRlcmF0aW9ucyA9IDA7CisgICAgd2hpbGUgKHQwIDwgdDEgJiYg
bnVtSXRlcmF0aW9ucyA8IGNNYXhTZWFyY2hJdGVyYXRpb25zKSB7CisgICAgICAgIG51bUl0ZXJh
dGlvbnMrKzsKKyAgICAgICAgbV90aW1lT2Zmc2V0ID0gKHQwICsgdDEpICogMC41OworICAgICAg
ICBkb3VibGUgdk9mZnNldCA9IHZlbG9jaXR5KG1fdGltZU9mZnNldCwgbV9jb2VmZmljaWVudHMp
OworICAgICAgICBpZiAoZmFicyhtYXhJbml0aWFsVmVsb2NpdHkgLSB2T2Zmc2V0KSA8IGVwc2ls
b24pCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAodk9mZnNldCA+IG1heEluaXRp
YWxWZWxvY2l0eSkKKyAgICAgICAgICAgIHQwID0gbV90aW1lT2Zmc2V0OworICAgICAgICBlbHNl
CisgICAgICAgICAgICB0MSA9IG1fdGltZU9mZnNldDsKKyAgICB9CisKKyAgICAvLyBDb21wdXRl
IGN1cnZlIHBvc2l0aW9uIGF0IG9mZnNldCB0aW1lCisgICAgbV9wb3NpdGlvbk9mZnNldCA9IHBv
c2l0aW9uKG1fdGltZU9mZnNldCwgbV9jb2VmZmljaWVudHMpOworfQorCitUb3VjaEZsaW5nUGxh
dGZvcm1HZXN0dXJlQ3VydmU6On5Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUoKQorewor
fQorCitjb25zdCBjaGFyKiBUb3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmRlYnVnTmFt
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJUb3VjaHBhZEZsaW5nIjsKK30KKworYm9vbCBUb3Vj
aEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmFwcGx5KGRvdWJsZSB0aW1lLCBQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZVRhcmdldCogdGFyZ2V0KQoreworICAgIGZsb2F0IGRpc3BsYWNlbWVudDsKKyAg
ICBpZiAodGltZSA8IDApCisgICAgICAgIGRpc3BsYWNlbWVudCA9IDA7CisgICAgZWxzZSBpZiAo
dGltZSArIG1fdGltZU9mZnNldCA8IG1fY3VydmVEdXJhdGlvbikKKyAgICAgICAgZGlzcGxhY2Vt
ZW50ID0gcG9zaXRpb24odGltZSArIG1fdGltZU9mZnNldCwgbV9jb2VmZmljaWVudHMpIC0gbV9w
b3NpdGlvbk9mZnNldDsKKyAgICBlbHNlCisgICAgICAgIGRpc3BsYWNlbWVudCA9IHBvc2l0aW9u
KG1fY3VydmVEdXJhdGlvbiwgbV9jb2VmZmljaWVudHMpIC0gbV9wb3NpdGlvbk9mZnNldDsKKwor
ICAgIC8vIEtlZXAgdHJhY2sgb2YgaW50ZWdlciBwb3J0aW9uIG9mIHNjcm9sbCB0aHVzIGZhciwg
YW5kIHByZXBhcmUgaW5jcmVtZW50LgorICAgIEludFBvaW50IHNjcm9sbChkaXNwbGFjZW1lbnQg
KiBtX2Rpc3BsYWNlbWVudFJhdGlvLngoKSwgZGlzcGxhY2VtZW50ICogbV9kaXNwbGFjZW1lbnRS
YXRpby55KCkpOworICAgIEludFBvaW50IHNjcm9sbEluY3JlbWVudChzY3JvbGwgLSBtX2N1bXVs
YXRpdmVTY3JvbGwpOworICAgIG1fY3VtdWxhdGl2ZVNjcm9sbCA9IHNjcm9sbDsKKworICAgIGlm
ICh0aW1lICsgbV90aW1lT2Zmc2V0IDwgbV9jdXJ2ZUR1cmF0aW9uIHx8IHNjcm9sbEluY3JlbWVu
dCAhPSBJbnRQb2ludDo6emVybygpKSB7CisgICAgICAgIHRhcmdldC0+c2Nyb2xsQnkoc2Nyb2xs
SW5jcmVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYyMzhhNzE3ZDIxOWM5MGUzNjFjMzAyNmY5MzdkNjllMDYyNDYxYmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJl
Q3VydmUuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZV9oCisjZGVmaW5lIFRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZV9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1H
ZXN0dXJlQ3VydmUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZVRhcmdldDsKKworLy8gSW1wbGVtZW50YXRpb24gb2YgUGxhdGZvcm1HZXN0dXJlQ3Vy
dmUgc3VpdGFibGUgZm9yIHRvdWNoIHBhZC9zY3JlZW4tYmFzZWQKKy8vIGZsaW5nIHNjcm9sbC4g
U3RhcnRzIHdpdGggYSBmbGF0IHZlbG9jaXR5IHByb2ZpbGUgYmFzZWQgb24gJ3ZlbG9jaXR5Jywg
d2hpY2gKKy8vIHRhaWxzIG9mZiB0byB6ZXJvLiBUaW1lIGlzIHNjYWxlZCB0byB0aGF0IGR1cmF0
aW9uIG9mIHRoZSBmbGluZyBpcyBwcm9wb3J0aW9uYWwKKy8vIHRoZSBpbml0aWFsIHZlbG9jaXR5
LgorY2xhc3MgVG91Y2hGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlICA6IHB1YmxpYyBQbGF0Zm9y
bUdlc3R1cmVDdXJ2ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1H
ZXN0dXJlQ3VydmU+IGNyZWF0ZUZvclRvdWNoUGFkKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5
LCBJbnRQb2ludCBjdW11bGF0aXZlU2Nyb2xsID0gSW50UG9pbnQoKSk7CisgICAgc3RhdGljIFBh
c3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGNyZWF0ZUZvclRvdWNoU2NyZWVuKGNvbnN0
IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBJbnRQb2ludCBjdW11bGF0aXZlU2Nyb2xsID0gSW50UG9p
bnQoKSk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGxhdGZvcm1HZXN0dXJlQ3VydmU+IGNyZWF0
ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgZmxvYXQgcDAsIGZsb2F0IHAxLCBmbG9hdCBw
MiwgZmxvYXQgY3VydmVEdXJhdGlvbiwgSW50UG9pbnQgY3VtdWxhdGl2ZVNjcm9sbCA9IEludFBv
aW50KCkpOworICAgIHZpcnR1YWwgflRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSgpOwor
CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z05hbWUoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgYXBwbHkoZG91YmxlIG1vbm90b25pY1RpbWUsIFBsYXRmb3JtR2VzdHVy
ZUN1cnZlVGFyZ2V0KikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgVG91Y2hGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBmbG9hdCBwMCwgZmxv
YXQgcDEsIGZsb2F0IHAyLCBmbG9hdCBjdXJ2ZUR1cmF0aW9uLCBjb25zdCBJbnRQb2ludCYgY3Vt
dWxhdGl2ZVNjcm9sbCk7CisKKyAgICBGbG9hdFBvaW50IG1fZGlzcGxhY2VtZW50UmF0aW87Cisg
ICAgSW50UG9pbnQgbV9jdW11bGF0aXZlU2Nyb2xsOworICAgIGZsb2F0IG1fY29lZmZpY2llbnRz
WzNdOworICAgIGZsb2F0IG1fdGltZU9mZnNldDsKKyAgICBmbG9hdCBtX2N1cnZlRHVyYXRpb247
CisgICAgZmxvYXQgbV9wb3NpdGlvbk9mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3VjaHBh
ZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjJiZmJlYTVlMTMyZWYzOWNlOTRiZGM4ZGFmMjUxYWVmMGEyOWIyMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2luY2x1ZGUgIlRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgotCi0j
aW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQuaCIKLSNpbmNsdWRlIDxtYXRoLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotLy8gVGhp
cyBjdXJ2ZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgbm90aW9uIG9mIGEgc2luZ2xl
LCBhYnNvbHV0ZSBjdXJ2ZSwgd2hpY2ggc3RhcnRzIGF0Ci0vLyBhIGxhcmdlIHZlbG9jaXR5IGFu
ZCBzbW9vdGhseSBkZWNyZWFzZXMgdG8gemVyby4gRm9yIGEgZ2l2ZW4gaW5wdXQgdmVsb2NpdHks
IHdlIGZpbmQgd2hlcmUgb24KLS8vIHRoZSBjdXJ2ZSB0aGlzIHZlbG9jaXR5IG9jY3VycywgYW5k
IHN0YXJ0IHRoZSBhbmltYXRpb24gYXQgdGhpcyBwb2ludC0tLWRlbm90ZWQgYnkgKG1fdGltZU9m
ZnNldCwKLS8vIG1fcG9zaXRpb25PZmZzZXQpLgotLy8KLS8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qg
b2YgYXV0b21hdGljYWxseSBkZXRlcm1pbmluZyBhbiBhbmltYXRpb24gZHVyYXRpb24gdGhhdCBz
Y2FsZXMgd2l0aCBpbnB1dAotLy8gdmVsb2NpdHksIGFzIGZhc3RlciBpbml0aWFsIHZlbG9jaXRp
ZXMgc3RhcnQgZWFybGllciBvbiB0aGUgY3VydmUgYW5kIHRodXMgdGFrZSBsb25nZXIgdG8gcmVh
Y2ggdGhlIGVuZC4KLS8vIE5vIGNvbXBsaWNhdGVkIHRpbWUgc2NhbGluZyBpcyByZXF1aXJlZC4K
LS8vCi0vLyBTaW5jZSB0aGUgc3RhcnRpbmcgdmVsb2NpdHkgaXMgaW1wbGljaXRseSBkZXRlcm1p
bmVkIGJ5IG91ciBzdGFydGluZyBwb2ludCwgd2Ugb25seSBzdG9yZSB0aGUKLS8vIHJlbGF0aXZl
IG1hZ25pdHVkZSBhbmQgZGlyZWN0aW9uIG9mIGJvdGggaW5pdGlhbCB4LSBhbmQgeS12ZWxvY2l0
aWVzLCBhbmQgdXNlIHRoaXMgdG8gc2NhbGUgdGhlCi0vLyBjb21wdXRlZCBkaXNwbGFjZW1lbnQg
YXQgYW55IHBvaW50IGluIHRpbWUuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGZsaW5nIHRyYWplY3Rv
cmllcyBhcmUgc3RyYWlnaHQKLS8vIGxpbmVzIHdoZW4gdmlld2VkIGluIHgteSBzcGFjZS4gSW5p
dGlhbCB2ZWxvY2l0aWVzIHRoYXQgbGllIG91dHNpZGUgdGhlIG1heCB2ZWxvY2l0eSBhcmUgY29u
c3RyYWluZWQKLS8vIHRvIHN0YXJ0IGF0IHplcm8gKGFuZCB0aHVzIGFyZSBpbXBsaWNpdGx5IHNj
YWxlZCkuCi0vLwotLy8gVGhlIGN1cnZlIGlzIG1vZGVsbGVkIGFzIGEgNHRoIG9yZGVyIHBvbHlu
b21pYWwsIHN0YXJ0aW5nIGF0IHQgPSAwLCBhbmQgZW5kaW5nIGF0IHQgPSBtX2N1cnZlRHVyYXRp
b24uCi0vLyBBdHRlbXB0cyB0byBnZW5lcmF0ZSBwb3NpdGlvbi92ZWxvY2l0eSBlc3RpbWF0ZXMg
b3V0c2lkZSB0aGlzIHJhbmdlIGFyZSB1bmRlZmluZWQuCi0KLWNvbnN0IGludCBUb3VjaHBhZEZs
aW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6Om1fbWF4U2VhcmNoSXRlcmF0aW9ucyA9IDIwOwotCi1Q
YXNzT3duUHRyPFBsYXRmb3JtR2VzdHVyZUN1cnZlPiBUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0
dXJlQ3VydmU6OmNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgSW50UG9pbnQgY3Vt
dWxhdGl2ZVNjcm9sbCkKLXsKLSAgICAvLyBUaGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGxpc3RlZCBi
ZWxvdyBhcmUgYSBtYXRjaGVkIHNldCwgYW5kIHNob3VsZCBub3QgYmUgY2hhbmdlZCBpbmRlcGVu
ZGVudGx5IG9mIG9uZSBhbm90aGVyLgotICAgIHJldHVybiBjcmVhdGUodmVsb2NpdHksIC01Ljcw
NzYyZSswMywgMS43MmUrMDIsIDMuN2UrMDAsIDAsIDAsIDEuMywgY3VtdWxhdGl2ZVNjcm9sbCk7
Ci19Ci0KLS8vIEZJWE1FOiBuZWVkIHRvIHJlbW92ZSBwMywgcDQgaGVyZSBhbmQgYmVsb3cgYXMg
dGhleSBhcmUgbm90IHVzZWQgaW4gdGhlIGV4cG9uZW50aWFsIGN1cnZlLCBidXQgbGVhdmUgaW4g
Zm9yIG5vdyB0byBmYWNpbGl0YXRlCi0vLyB0aGUgaW4tZmxpZ2h0IHBhdGNoIGZvciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE2NjMgLgotUGFzc093blB0cjxQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZT4gVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpjcmVh
dGUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHksIGZsb2F0IHAwLCBmbG9hdCBwMSwgZmxvYXQg
cDIsIGZsb2F0IHAzLCBmbG9hdCBwNCwgZmxvYXQgY3VydmVEdXJhdGlvbiwgSW50UG9pbnQgY3Vt
dWxhdGl2ZVNjcm9sbCkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRvdWNocGFkRmxpbmdQ
bGF0Zm9ybUdlc3R1cmVDdXJ2ZSh2ZWxvY2l0eSwgcDAsIHAxLCBwMiwgcDMsIHA0LCBjdXJ2ZUR1
cmF0aW9uLCBjdW11bGF0aXZlU2Nyb2xsKSk7Ci19Ci0KLWlubGluZSBkb3VibGUgcG9zaXRpb24o
ZG91YmxlIHQsIGZsb2F0KiBwKQotewotICAgIHJldHVybiBwWzBdICogZXhwKC1wWzJdICogdCkg
LSBwWzFdICogdCAtIHBbMF07Ci19Ci0KLWlubGluZSBkb3VibGUgdmVsb2NpdHkoZG91YmxlIHQs
IGZsb2F0KiBwKQotewotICAgIHJldHVybiAtcFswXSAqIHBbMl0gKiBleHAoLXBbMl0gKiB0KSAt
IHBbMV07Ci19Ci0KLVRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6VG91Y2hwYWRG
bGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKGNvbnN0IEZsb2F0UG9pbnQmIGluaXRpYWxWZWxvY2l0
eSwgZmxvYXQgcDAsIGZsb2F0IHAxLCBmbG9hdCBwMiwgZmxvYXQgcDMsIGZsb2F0IHA0LCBmbG9h
dCBjdXJ2ZUR1cmF0aW9uLCBjb25zdCBJbnRQb2ludCYgY3VtdWxhdGl2ZVNjcm9sbCkKLSAgICA6
IG1fY3VtdWxhdGl2ZVNjcm9sbChjdW11bGF0aXZlU2Nyb2xsKQotICAgICwgbV9jdXJ2ZUR1cmF0
aW9uKGN1cnZlRHVyYXRpb24pCi17Ci0gICAgQVNTRVJUKGluaXRpYWxWZWxvY2l0eSAhPSBGbG9h
dFBvaW50Ojp6ZXJvKCkpOwotCi0gICAgbV9jb2VmZnNbMF0gPSBwMDsgLy8gYWxwaGEKLSAgICBt
X2NvZWZmc1sxXSA9IHAxOyAvLyBiZXRhCi0gICAgbV9jb2VmZnNbMl0gPSBwMjsgLy8gZ2FtbWEK
LSAgICBtX2NvZWZmc1szXSA9IHAzOyAvLyBub3QgdXNlZAotICAgIG1fY29lZmZzWzRdID0gcDQ7
IC8vIG5vdCB1c2VkCi0KLSAgICBmbG9hdCBtYXhJbml0aWFsVmVsb2NpdHkgPSBtYXgoZmFicyhp
bml0aWFsVmVsb2NpdHkueCgpKSwgZmFicyhpbml0aWFsVmVsb2NpdHkueSgpKSk7Ci0KLSAgICAv
LyBGb3JjZSBtYXhJbml0aWFsVmVsb2NpdHkgdG8gbGllIGluIHRoZSByYW5nZSB2KDApIHRvIHYo
Y3VydmVEdXJhdGlvbiksIGFuZCBhc3N1bWUgdGhhdAotICAgIC8vIHRoZSBjdXJ2ZSBwYXJhbWV0
ZXJzIGRlZmluZSBhIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyB2ZWxvY2l0eSwgb3IgZWxzZSBi
aXNlY3Rpb24gc2VhcmNoIG1heQotICAgIC8vIGZhaWwuCi0gICAgaWYgKG1heEluaXRpYWxWZWxv
Y2l0eSA+IHZlbG9jaXR5KDAsIG1fY29lZmZzKSkKLSAgICAgICAgbWF4SW5pdGlhbFZlbG9jaXR5
ID0gdmVsb2NpdHkoMCwgbV9jb2VmZnMpOwotCi0gICAgaWYgKG1heEluaXRpYWxWZWxvY2l0eSA8
IHZlbG9jaXR5KG1fY3VydmVEdXJhdGlvbiwgbV9jb2VmZnMpKQotICAgICAgICBtYXhJbml0aWFs
VmVsb2NpdHkgPSB2ZWxvY2l0eShtX2N1cnZlRHVyYXRpb24sIG1fY29lZmZzKTsKLQotICAgIC8v
IFdlIGtlZXAgdHJhY2sgb2YgcmVsYXRpdmUgbWFnbml0dWRlcyBhbmQgZGlyZWN0aW9ucyBvZiB0
aGUgdmVsb2NpdHkvZGlzcGxhY2VtZW50IGNvbXBvbmVudHMgaGVyZS4KLSAgICBtX2Rpc3BsYWNl
bWVudFJhdGlvID0gRmxvYXRQb2ludChpbml0aWFsVmVsb2NpdHkueCgpIC8gbWF4SW5pdGlhbFZl
bG9jaXR5LCBpbml0aWFsVmVsb2NpdHkueSgpIC8gbWF4SW5pdGlhbFZlbG9jaXR5KTsKLQotICAg
IC8vIFVzZSBiYXNpYyBiaXNlY3Rpb24gdG8gZXN0aW1hdGUgd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0
IG9uIHRoZSBjdXJ2ZS4KLSAgICAvLyBGSVhNRTogV291bGQgTmV3dG9uJ3MgbWV0aG9kIGJlIGJl
dHRlcj8KLSAgICBjb25zdCBkb3VibGUgZXBzaWxvbiA9IDE7IC8vIEl0IGlzIHByb2JhYmx5IGdv
b2QgZW5vdWdoIHRvIGdldCB0aGUgc3RhcnQgcG9pbnQgdG8gd2l0aGluIDEgcGl4ZWwvc2VjLgot
ICAgIGRvdWJsZSB0MCA9IDA7Ci0gICAgZG91YmxlIHQxID0gY3VydmVEdXJhdGlvbjsKLSAgICBp
bnQgbnVtSXRlcmF0aW9ucyA9IDA7Ci0gICAgd2hpbGUgKHQwIDwgdDEgJiYgbnVtSXRlcmF0aW9u
cyA8IG1fbWF4U2VhcmNoSXRlcmF0aW9ucykgewotICAgICAgICBudW1JdGVyYXRpb25zKys7Ci0g
ICAgICAgIG1fdGltZU9mZnNldCA9ICh0MCArIHQxKSAqIDAuNTsKLSAgICAgICAgZG91YmxlIHZP
ZmZzZXQgPSB2ZWxvY2l0eShtX3RpbWVPZmZzZXQsIG1fY29lZmZzKTsKLSAgICAgICAgaWYgKGZh
YnMobWF4SW5pdGlhbFZlbG9jaXR5IC0gdk9mZnNldCkgPCBlcHNpbG9uKQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgaWYgKHZPZmZzZXQgPiBtYXhJbml0aWFsVmVsb2NpdHkpCi0gICAg
ICAgICAgICB0MCA9IG1fdGltZU9mZnNldDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdDEg
PSBtX3RpbWVPZmZzZXQ7Ci0gICAgfQotCi0gICAgLy8gQ29tcHV0ZSBjdXJ2ZSBwb3NpdGlvbiBh
dCBvZmZzZXQgdGltZQotICAgIG1fcG9zaXRpb25PZmZzZXQgPSBwb3NpdGlvbihtX3RpbWVPZmZz
ZXQsIG1fY29lZmZzKTsKLX0KLQotVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjp+
VG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlKCkKLXsKLX0KLQotY29uc3QgY2hhciog
VG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlOjpkZWJ1Z05hbWUoKSBjb25zdAotewot
ICAgIHJldHVybiAiVG91Y2hwYWRGbGluZyI7Ci19Ci0KLWJvb2wgVG91Y2hwYWRGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlOjphcHBseShkb3VibGUgdGltZSwgUGxhdGZvcm1HZXN0dXJlQ3VydmVU
YXJnZXQqIHRhcmdldCkKLXsKLSAgICBmbG9hdCBkaXNwbGFjZW1lbnQ7Ci0gICAgaWYgKHRpbWUg
PCAwKQotICAgICAgICBkaXNwbGFjZW1lbnQgPSAwOwotICAgIGVsc2UgaWYgKHRpbWUgKyBtX3Rp
bWVPZmZzZXQgPCBtX2N1cnZlRHVyYXRpb24pCi0gICAgICAgIGRpc3BsYWNlbWVudCA9IHBvc2l0
aW9uKHRpbWUgKyBtX3RpbWVPZmZzZXQsIG1fY29lZmZzKSAtIG1fcG9zaXRpb25PZmZzZXQ7Ci0g
ICAgZWxzZQotICAgICAgICBkaXNwbGFjZW1lbnQgPSBwb3NpdGlvbihtX2N1cnZlRHVyYXRpb24s
IG1fY29lZmZzKSAtIG1fcG9zaXRpb25PZmZzZXQ7Ci0KLSAgICAvLyBLZWVwIHRyYWNrIG9mIGlu
dGVnZXIgcG9ydGlvbiBvZiBzY3JvbGwgdGh1cyBmYXIsIGFuZCBwcmVwYXJlIGluY3JlbWVudC4K
LSAgICBJbnRQb2ludCBzY3JvbGwoZGlzcGxhY2VtZW50ICogbV9kaXNwbGFjZW1lbnRSYXRpby54
KCksIGRpc3BsYWNlbWVudCAqIG1fZGlzcGxhY2VtZW50UmF0aW8ueSgpKTsKLSAgICBJbnRQb2lu
dCBzY3JvbGxJbmNyZW1lbnQoc2Nyb2xsIC0gbV9jdW11bGF0aXZlU2Nyb2xsKTsKLSAgICBtX2N1
bXVsYXRpdmVTY3JvbGwgPSBzY3JvbGw7Ci0KLSAgICBpZiAodGltZSArIG1fdGltZU9mZnNldCA8
IG1fY3VydmVEdXJhdGlvbiB8fCBzY3JvbGxJbmNyZW1lbnQgIT0gSW50UG9pbnQ6Onplcm8oKSkg
ewotICAgICAgICB0YXJnZXQtPnNjcm9sbEJ5KHNjcm9sbEluY3JlbWVudCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVG91Y2hwYWRG
bGluZ1BsYXRmb3JtR2VzdHVyZUN1cnZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ub3Vj
aHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTFjODU1NzVkNTczY2VmZGE0NDY4MWZlMzQ1ODA0MDAxNDgxY2JlMi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVG91Y2hwYWRGbGluZ1BsYXRm
b3JtR2VzdHVyZUN1cnZlX2gKLSNkZWZpbmUgVG91Y2hwYWRGbGluZ1BsYXRmb3JtR2VzdHVyZUN1
cnZlX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtR2VzdHVyZUN1
cnZlVGFyZ2V0OwotCi0vLyBJbXBsZW1lbnRhdGlvbiBvZiBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZSBz
dWl0YWJsZSBmb3IgdG91Y2ggcGFkL3NjcmVlbi1iYXNlZAotLy8gZmxpbmcgc2Nyb2xsLiBTdGFy
dHMgd2l0aCBhIGZsYXQgdmVsb2NpdHkgcHJvZmlsZSBiYXNlZCBvbiAndmVsb2NpdHknLCB3aGlj
aAotLy8gdGFpbHMgb2ZmIHRvIHplcm8uIFRpbWUgaXMgc2NhbGVkIHRvIHRoYXQgZHVyYXRpb24g
b2YgdGhlIGZsaW5nIGlzIHByb3BvcnRpb25hbAotLy8gdGhlIGluaXRpYWwgdmVsb2NpdHkuCi1j
bGFzcyBUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUgOiBwdWJsaWMgUGxhdGZvcm1H
ZXN0dXJlQ3VydmUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBsYXRmb3JtR2Vz
dHVyZUN1cnZlPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgdmVsb2NpdHksIEludFBvaW50IGN1
bXVsYXRpdmVTY3JvbGwgPSBJbnRQb2ludCgpKTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlbG9jaXR5LCBmbG9h
dCBwMCwgZmxvYXQgcDEsIGZsb2F0IHAyLCBmbG9hdCBwMywgZmxvYXQgcDQsIGZsb2F0IGN1cnZl
RHVyYXRpb24sIEludFBvaW50IGN1bXVsYXRpdmVTY3JvbGwgPSBJbnRQb2ludCgpKTsKLSAgICB2
aXJ0dWFsIH5Ub3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmUoKTsKLQotICAgIHZpcnR1
YWwgY29uc3QgY2hhciogZGVidWdOYW1lKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBi
b29sIGFwcGx5KGRvdWJsZSBtb25vdG9uaWNUaW1lLCBQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRhcmdl
dCopIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIFRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZShjb25zdCBGbG9hdFBvaW50JiB2ZWxvY2l0eSwgZmxvYXQgcDAsIGZsb2F0IHAxLCBm
bG9hdCBwMiwgZmxvYXQgcDMsIGZsb2F0IHA0LCBmbG9hdCBjdXJ2ZUR1cmF0aW9uLCBjb25zdCBJ
bnRQb2ludCYgY3VtdWxhdGl2ZVNjcm9sbCk7Ci0KLSAgICBGbG9hdFBvaW50IG1fZGlzcGxhY2Vt
ZW50UmF0aW87Ci0gICAgSW50UG9pbnQgbV9jdW11bGF0aXZlU2Nyb2xsOwotICAgIGZsb2F0IG1f
Y29lZmZzWzVdOwotICAgIGZsb2F0IG1fdGltZU9mZnNldDsKLSAgICBmbG9hdCBtX2N1cnZlRHVy
YXRpb247Ci0gICAgZmxvYXQgbV9wb3NpdGlvbk9mZnNldDsKLQotICAgIHN0YXRpYyBjb25zdCBp
bnQgbV9tYXhTZWFyY2hJdGVyYXRpb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvUGxhdGZvcm1HZXN0dXJlQ3VydmVGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvUGxhdGZvcm1HZXN0dXJlQ3VydmVGYWN0b3J5LmNwcApp
bmRleCBlY2Q5NzI0ZDlkZGNkOGZkOGVkZWFkNmJhOGI1NmU4ZjQwYWU0ODBmLi4yMDNmMzljZTk5
ZjQyNThiNGFmMDZkYzU0MWM4YWU4YTIwNDdhYzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1BsYXRmb3JtR2VzdHVyZUN1cnZlRmFjdG9yeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9QbGF0Zm9y
bUdlc3R1cmVDdXJ2ZUZhY3RvcnkuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRvdWNocGFkRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgorI2luY2x1ZGUgIlRvdWNoRmxpbmdQbGF0Zm9ybUdl
c3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgIldlYkZsaW5nQW5pbWF0b3JUb0dlc3R1cmVDdXJ2ZUFk
YXB0ZXIuaCIKICNpbmNsdWRlICJXZWJJbnB1dEV2ZW50LmgiCiAKQEAgLTUwLDExICs1MCwxMCBA
QCBQYXNzT3duUHRyPFdlYkNvcmU6OlBsYXRmb3JtR2VzdHVyZUN1cnZlPiBQbGF0Zm9ybUdlc3R1
cmVDdXJ2ZUZhY3Rvcnk6OmNyZWF0ZUN1cgogICAgIGlmIChmbGluZ0FuaW1hdG9yKQogICAgICAg
ICByZXR1cm4gV2ViRmxpbmdBbmltYXRvclRvR2VzdHVyZUN1cnZlQWRhcHRlcjo6Y3JlYXRlKHBv
aW50LCBXZWJDb3JlOjpJbnRSZWN0KCksIGZsaW5nQW5pbWF0b3IucmVsZWFzZSgpKTsKIAotICAg
IC8vIEZJWE1FOiBBZGQgYSB0b3VjaC1zY3JlZW4gc291cmNlZCBzcGVjaWZpYyBjdXJ2ZS4KICAg
ICBpZiAoZGV2aWNlU291cmNlID09IFdlYkdlc3R1cmVFdmVudDo6VG91Y2hzY3JlZW4pCi0gICAg
ICAgIHJldHVybiBXZWJDb3JlOjpUb3VjaHBhZEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNy
ZWF0ZShwb2ludCwgY3VtdWxhdGl2ZVNjcm9sbCk7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpU
b3VjaEZsaW5nUGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZUZvclRvdWNoU2NyZWVuKHBvaW50
LCBjdW11bGF0aXZlU2Nyb2xsKTsKIAotICAgIHJldHVybiBXZWJDb3JlOjpUb3VjaHBhZEZsaW5n
UGxhdGZvcm1HZXN0dXJlQ3VydmU6OmNyZWF0ZShwb2ludCwgY3VtdWxhdGl2ZVNjcm9sbCk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRl
Rm9yVG91Y2hQYWQocG9pbnQsIGN1bXVsYXRpdmVTY3JvbGwpOwogfQogCiB2b2lkIFBsYXRmb3Jt
R2VzdHVyZUN1cnZlRmFjdG9yeTo6c2V0V2ViRmxpbmdBbmltYXRvckZvclRlc3QoUGFzc093blB0
cjxXZWJGbGluZ0FuaW1hdG9yPiBtb2NrRmxpbmdBbmltYXRvcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1HZXN0dXJlQ3VydmVUZXN0LmNwcApp
bmRleCA0ZjBhMjI3NmY4MTZmYzFlMWM3YjkwMDU0NmJkZjk2YTEzYzhjNTkwLi5jM2EzODEwYzM3
N2EzZjdhZDJhNzdkYWQ1NjQzYzc0NjE5YmNjNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtR2VzdHVyZUN1cnZlVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRlc3QuY3BwCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQ0NBY3RpdmVHZXN0dXJlQW5pbWF0aW9uLmgiCiAjaW5j
bHVkZSAiQ0NHZXN0dXJlQ3VydmUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVDdXJ2ZVRh
cmdldC5oIgotI2luY2x1ZGUgIlRvdWNocGFkRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgor
I2luY2x1ZGUgIlRvdWNoRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgIldo
ZWVsRmxpbmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZS5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMTAxLDcgKzEwMSw3IEBAIFRFU1QoUGxhdGZv
cm1HZXN0dXJlQ3VydmUsIGZsaW5nQ3VydmVUb3VjaCkKIHsKICAgICBkb3VibGUgaW5pdGlhbFZl
bG9jaXR5ID0gNTAwMDsKICAgICBNb2NrUGxhdGZvcm1HZXN0dXJlQ3VydmVUYXJnZXQgdGFyZ2V0
OwotICAgIE93blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGFuaW1hdGlvbiA9
IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFRvdWNocGFkRmxpbmdQbGF0
Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5pdGlhbFZlbG9jaXR5LCAwKSks
ICZ0YXJnZXQpOworICAgIE93blB0cjxBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb24+IGFu
aW1hdGlvbiA9IEFjdGl2ZVBsYXRmb3JtR2VzdHVyZUFuaW1hdGlvbjo6Y3JlYXRlKFRvdWNoRmxp
bmdQbGF0Zm9ybUdlc3R1cmVDdXJ2ZTo6Y3JlYXRlRm9yVG91Y2hQYWQoRmxvYXRQb2ludChpbml0
aWFsVmVsb2NpdHksIDApKSwgJnRhcmdldCk7CiAKICAgICAvLyBOb3RlOiB0aGUgZXhwZWN0YXRp
b25zIGJlbG93IGFyZSBkZXBlbmRlbnQgb24gdGhlIHZhbHVlIG9mIHNpZ21hIGhhcmQtY29kZWQg
aW4gdGhlIGN1cnZlIHBhcmFtZXRlcnMuCiAgICAgLy8gICAgICAgSWYgdGhlIHBhcmFtZXRlcnMg
Y2hhbmdlLCB0aGVuIHRoZSB0ZXN0cyB2YWx1ZXMvZXhwZWN0YXRpb25zIHdpbGwgbmVlZCB0byBi
ZSB1cGRhdGVkLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>