<?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>94860</bug_id>
          
          <creation_ts>2012-08-23 14:47:23 -0700</creation_ts>
          <short_desc>[chromium] Should accelerate rotations of &gt;= 180 degrees</short_desc>
          <delta_ts>2012-08-27 20:38:44 -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>WebKit Misc.</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>
          <dependson>94993</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>703409</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-08-23 14:47:23 -0700</bug_when>
    <thetext>Currently we don&apos;t accelerate these animations because our matrix-based keyframe interpolation would fail. If WebTransformOperation was given an x y z and angle, we could do better rotation interpolation (actually, for all operation types) and drop this restriction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704369</commentid>
    <comment_count>1</comment_count>
      <attachid>160485</attachid>
    <who name="">vollick</who>
    <bug_when>2012-08-24 12:59:52 -0700</bug_when>
    <thetext>Created attachment 160485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704370</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 13:02:03 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704371</commentid>
    <comment_count>3</comment_count>
      <attachid>160485</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-24 13:03:19 -0700</bug_when>
    <thetext>Comment on attachment 160485
Patch

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

&gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:83
&gt; +bool isIdentity(const WebTransformOperation* operation)

static for all these methods?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704406</commentid>
    <comment_count>4</comment_count>
      <attachid>160485</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-08-24 13:48:51 -0700</bug_when>
    <thetext>Comment on attachment 160485
Patch


Seems like a nice cleanup to me!

I&apos;m a bit worried about the additional identity stuff.  It seems to be a bit precarious in places where if we want to modify the code later, we might need to remember to check isIdentity() which could be easy to overlook.  Otherwise LGTM =)


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

&gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:65
&gt;      WebTransformationMatrix matrix;
&gt; +    double x;
&gt; +    double y;
&gt; +    double z;
&gt; +    double angle;

do we use the matrix anymore, for any operation other than WebTransformOperationMatrix?

maybe we could use unions here.  Not only could that save space, but would allow us to have more intuitive names for the parameters of each transform.

&gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:154
&gt; +        double fromX = isIdentity(from) ? 0 : from-&gt;x;
&gt; +        double fromY = isIdentity(from) ? 0 : from-&gt;y;
&gt; +        double fromZ = isIdentity(from) ? 0 : from-&gt;z;
&gt; +        double toX = isIdentity(to) ? 0 : to-&gt;x;
&gt; +        double toY = isIdentity(to) ? 0 : to-&gt;y;
&gt; +        double toZ = isIdentity(to) ? 0 : to-&gt;z;

this pattern shows up a lot in this patch - is it really necessary?  or could we just initialize to and from x, y, z appropriately in all cases?   Seems like this isIdentity() ? 0 : value  pattern may be error-prone down the road...

&gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:177
&gt; +        else {
&gt; +            WebTransformationMatrix toMatrix;
&gt; +            if (!isIdentity(to))
&gt; +                toMatrix = to-&gt;matrix;
&gt; +            WebTransformationMatrix fromMatrix;
&gt; +            if (!isIdentity(from))
&gt; +                fromMatrix = from-&gt;matrix;
&gt; +            toReturn = toMatrix;
&gt; +            toReturn.blend(fromMatrix, progress);
&gt; +        }

Will this else-statement also work for angles greater than 180?  I thought we would have to interpolate the axis and angle separately to get this part correct?

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:117
&gt; +            webTransformOperations.appendIdentity();

I&apos;m willing to believe that this is correct, but I&apos;m just wondering why this change is necessary?   Especially for the NONE case?

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:-148
&gt; -bool causesRotationOfAtLeast180Degrees(const TransformAnimationValue* value, const TransformAnimationValue* lastValue)

Refreshing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705453</commentid>
    <comment_count>5</comment_count>
      <attachid>160761</attachid>
    <who name="">vollick</who>
    <bug_when>2012-08-27 11:42:13 -0700</bug_when>
    <thetext>Created attachment 160761
Patch

(In reply to comment #4)
&gt; (From update of attachment 160485 [details])
&gt;
&gt; Seems like a nice cleanup to me!
&gt;
&gt; I&apos;m a bit worried about the additional identity stuff.  It seems to be a bit precarious in places where if we want to modify the code later, we might need to remember to check isIdentity() which could be easy to overlook.  Otherwise LGTM =)
&gt;
&gt;
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160485&amp;action=review
&gt;
&gt; &gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:65
&gt; &gt;      WebTransformationMatrix matrix;
&gt; &gt; +    double x;
&gt; &gt; +    double y;
&gt; &gt; +    double z;
&gt; &gt; +    double angle;
&gt;
&gt; do we use the matrix anymore, for any operation other than WebTransformOperationMatrix?
&gt;
&gt; maybe we could use unions here.  Not only could that save space, but would allow us to have more intuitive names for the parameters of each transform.
I have used a union, but the matrix couldn&apos;t be included as it has a non-trivial copy constructor.
&gt;
&gt; &gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:154
&gt; &gt; +        double fromX = isIdentity(from) ? 0 : from-&gt;x;
&gt; &gt; +        double fromY = isIdentity(from) ? 0 : from-&gt;y;
&gt; &gt; +        double fromZ = isIdentity(from) ? 0 : from-&gt;z;
&gt; &gt; +        double toX = isIdentity(to) ? 0 : to-&gt;x;
&gt; &gt; +        double toY = isIdentity(to) ? 0 : to-&gt;y;
&gt; &gt; +        double toZ = isIdentity(to) ? 0 : to-&gt;z;
&gt;
&gt; this pattern shows up a lot in this patch - is it really necessary?  or could we just initialize to and from x, y, z appropriately in all cases?   Seems like this isIdentity() ? 0 : value  pattern may be error-prone down the road...
I do think it&apos;s necessary. It can be the case that to or from is NULL. It&apos;s also possible that &apos;to&apos; is a translation and &apos;from&apos; is a rotation, but it just so happens that the &apos;from&apos; rotation is 0 degrees (and is, therefore, an identity transform).
So if I tried to access from.translate.x, it would not be initialized correctly (since we set the rotate part of the union, not the translate).
&gt;
&gt; &gt; Source/WebCore/platform/chromium/support/WebTransformOperations.cpp:177
&gt; &gt; +        else {
&gt; &gt; +            WebTransformationMatrix toMatrix;
&gt; &gt; +            if (!isIdentity(to))
&gt; &gt; +                toMatrix = to-&gt;matrix;
&gt; &gt; +            WebTransformationMatrix fromMatrix;
&gt; &gt; +            if (!isIdentity(from))
&gt; &gt; +                fromMatrix = from-&gt;matrix;
&gt; &gt; +            toReturn = toMatrix;
&gt; &gt; +            toReturn.blend(fromMatrix, progress);
&gt; &gt; +        }
&gt;
&gt; Will this else-statement also work for angles greater than 180?  I thought we would have to interpolate the axis and angle separately to get this part correct?
I experimented with interpolating the axes, but the results were unattractive and do not match the unaccelerated path. It appears that the correct behavior is to
rotate3d(x, y, z, blend(fromAngle, toAngle, progress)) if the axes line up, but revert to blending the rotation matrices otherwise (which decomposes to quaternions
and does a quaternion slerp under the covers).
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:117
&gt; &gt; +            webTransformOperations.appendIdentity();
&gt;
&gt; I&apos;m willing to believe that this is correct, but I&apos;m just wondering why this change is necessary?   Especially for the NONE case?
This was a bug -- we should do nothing in the NONE case. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705926</commentid>
    <comment_count>6</comment_count>
      <attachid>160761</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-27 17:42:45 -0700</bug_when>
    <thetext>Comment on attachment 160761
Patch

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

OK

&gt; Source/WebCore/platform/graphics/chromium/AnimationTranslationUtil.cpp:119
&gt; +            // do nothing.

Not sure why this changed - I think the caps was better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705952</commentid>
    <comment_count>7</comment_count>
      <attachid>160875</attachid>
    <who name="">vollick</who>
    <bug_when>2012-08-27 18:02:24 -0700</bug_when>
    <thetext>Created attachment 160875
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705985</commentid>
    <comment_count>8</comment_count>
      <attachid>160875</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 18:58:46 -0700</bug_when>
    <thetext>Comment on attachment 160875
Patch for landing

Rejecting attachment 160875 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
re/ChangeLog
Auto-merging Source/WebCore/WebCore.xcodeproj/project.pbxproj
Failed to merge in the changes.
Patch failed at 0001 Even more unreviewed rebaselining after r126683.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.

Full output: http://queues.webkit.org/results/13644161</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705998</commentid>
    <comment_count>9</comment_count>
      <attachid>160884</attachid>
    <who name="">vollick</who>
    <bug_when>2012-08-27 19:20:22 -0700</bug_when>
    <thetext>Created attachment 160884
Patch

Rebasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706031</commentid>
    <comment_count>10</comment_count>
      <attachid>160884</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 20:38:39 -0700</bug_when>
    <thetext>Comment on attachment 160884
Patch

Clearing flags on attachment: 160884

Committed r126838: &lt;http://trac.webkit.org/changeset/126838&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706032</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-27 20:38:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160485</attachid>
            <date>2012-08-24 12:59:52 -0700</date>
            <delta_ts>2012-08-27 11:42:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94860-20120824155947.patch</filename>
            <type>text/plain</type>
            <size>36477</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBiY2E1YWQ4YWRiYjY3
YmI2MTllYThmN2NlNDU4ZGM3ZWVhNzYwOTE1Li5lZDNkY2VmNDIwNTgxZjE0MDczZWJkMjlkOTlk
YWRiMDE5MzdkOWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wOC0yNCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNob3VsZCBhY2NlbGVyYXRlIHJvdGF0aW9ucyBvZiA+PSAxODAgZGVncmVlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGdlbmVyYWxpemluZyB0
aGUga2V5ZnJhbWUgaW50ZXJwb2xhdGlvbiwgaXQgYmVjYW1lIHVzZWZ1bCB0byBhcHBlbmQgYW4g
aWRlbnRpdHkgdHJhbnNmb3JtIG9wZXJhdGlvbiwKKyAgICAgICAgYW5kIHRvIGFzayBhIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb2JqZWN0IGlmIGl0IGlzSWRlbnRpdHkoKS4KKworICAgICAgICAq
IGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg6CisgICAgICAgIChXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zKToKKwogMjAxMi0wOC0yMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1l
c3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBXZWJBbmltYXRp
b25DdXJ2ZSBzdWJ0eXBlcyBpbnRvIHB1cmUgdmlydHVhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDAyZjUzYzMw
NWJkZTY4NWJlZjQ3YzBiMzEzZjVkMWU1ZjQxNTFmZDEuLjIzYWFlOGM0OGJmMWE3MGVhNWQ0NzMw
MmE1NDI4NDY2MmQ2ODI1MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxMi0wOC0y
NCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFNob3VsZCBhY2NlbGVyYXRlIHJvdGF0aW9ucyBvZiA+PSAxODAgZGVncmVlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24gbm93IHN0b3JlcyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gaW50ZXJwb2xhdGUKKyAgICAg
ICAgd2l0aG91dCByZXNvcnRpbmcgdG8gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmJsZW5kIHdo
aWNoIGlzIGJvdGgKKyAgICAgICAgZXhwZW5zaXZlLCBhbmQgaW4gdGhlIGNhc2Ugb2YgYmlnIHJv
dGF0aW9ucywgZXJyb3IgcHJvbmUuIEZvciBleGFtcGxlLAorICAgICAgICB3ZSBub3cgc3RvcmUg
dGhlIGF4aXMgYW5kIGFuZ2xlIGZvciByb3RhdGlvbnMsIHNvIGlmIHR3byByb3RhdGlvbnMgYXJl
CisgICAgICAgIGludGVycG9sYXRlZCwgYW5kIHRoZXkgYXJlIGFib3V0IHRoZSBzYW1lIGF4aXMs
IHdlIGNhbiBzaW1wbHkKKyAgICAgICAgaW50ZXJwb2xhdGUgdGhlIGFuZ2xlcy4KKworICAgICAg
ICBVbml0IHRlc3RzOgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QudHJhbnNm
b3JtVHlwZXNBcmVVbmlxdWUKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0Lm1h
dGNoVHlwZXNTYW1lTGVuZ3RoCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5p
ZGVudGl0eUFsd2F5c01hdGNoZXMKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0
LmxhcmdlUm90YXRpb25zV2l0aFNhbWVBeGlzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhTYW1lQXhpc0luRGlmZmVyZW50RGlyZWN0aW9uCisg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhEaWZm
ZXJlbnRBeGVzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFJvdGF0
aW9uRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVu
ZFRyYW5zbGF0aW9uRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdC5ibGVuZFNjYWxlRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5ibGVuZFNrZXdGcm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVGcm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUm90YXRpb25Ub0lkZW50aXR5CisgICAgICAgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFRyYW5zbGF0aW9uVG9JZGVudGl0eQorICAgICAg
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYmxlbmRTY2FsZVRvSWRlbnRpdHkKKyAgICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kU2tld1RvSWRlbnRpdHkKKyAgICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVUb0lkZW50aXR5
CisgICAgICAgICAgQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25XaXRoQmlnUm90YXRpb24KKyAgICAgICAgICBBbmltYXRpb25UcmFuc2xhdGlvblV0
aWxUZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlvbkFuZEVtcHR5VHJh
bnNmb3JtT3BlcmF0aW9uTGlzdAorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKHN0ZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYlRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgICAgQWRkZWQgeCB5IHogYW5k
IGFuZ2xlLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb246OmlzSWRlbnRp
dHkpOgorICAgICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGlzLT5tYXRyaXguaXNJZGVudGl0eSgp
CisgICAgICAgIChXZWJLaXQ6OmlzSWRlbnRpdHkpOgorICAgICAgICAgIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgYXJndW1lbnQgaXMgbnVsbCBvciAtPmlzSWRlbnRpdHkoKQorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6c2hhcmVTYW1lQXhpcyk6CisgICAgICAgICAgQSBoZWxwZXIg
ZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIHR3byB0cmFuc2Zvcm0gb3BlcmF0aW9ucworICAg
ICAgICAgIHNoYXJlIHRoZSBzYW1lIGF4aXMuIEFsc28gcmV0dXJucyB0aGUgYXhpcyBhbmQgJ2Zy
b20nIGFuZ2xlCisgICAgICAgICAgdG8gdXNlIGluIHRoZSBpbnRlcnBvbGF0aW9uIChpbiBjYXNl
IHRoZSBheGVzIHBvaW50IGluIGRpZmZlcmVudAorICAgICAgICAgIGRpcmVjdGlvbnMpLgorICAg
ICAgICAoV2ViS2l0OjpibGVuZERvdWJsZXMpOgorICAgICAgICAgIExpbmVhcmx5IGludGVycG9s
YXRlcyBkb3VibGVzLgorICAgICAgICAoV2ViS2l0OjpibGVuZFRyYW5zZm9ybU9wZXJhdGlvbnMp
OgorICAgICAgICAgIEJsZW5kcyB0d28gV2ViVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kKToKKyAgICAgICAg
ICBCbGVuZHMgdHdvIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb2JqZWN0cywgdGFraW5nIHNwZWNp
YWwgY2FyZQorICAgICAgICAgIHdoZW4gZWl0aGVyIGlzSWRlbnRpdHkoKS4KKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6bWF0Y2hlc1R5cGVzKToKKyAgICAgICAgICBX
YXMgY2hhbmdlZCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgaWRlbnRpdHkgdHJhbnNmb3JtIG9w
ZXJhdGlvbnMKKyAgICAgICAgICBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kVHJhbnNsYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRTa2V3KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRJZGVudGl0eSk6CisgICAgICAgICAgVGhl
ICdhcHBlbmQnIGZ1bmN0aW9ucyBhbGwgcG9wdWxhdGUgdGhlIG5ldyBtZW1iZXJzIGluCisgICAg
ICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zOjppc0lkZW50aXR5KToKKyAgICAgICAgICBSZXR1cm5zIGZhbHNlIGlmZiBh
bnkgb2YgaXRzIHRyYW5zZm9ybSBvcGVyYXRpb25zICFpc0lkZW50aXR5KCkuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgICAgUmVtb3ZlZCB0
aGUgPj0gMTgwIGRlZ3JlZSByZXN0cmljdGlvbi4KKwogMjAxMi0wOC0yNCAgQW5kcmV5IEFkYWlr
aW4gIDxhYW5kcmV5QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbV2Vi
R0xdIEltcGxlbWVudCBjdXN0b20gd3JhcCBmdW5jdGlvbnMgb24gR0wgY29udGV4dApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBmOTJlOWE3Zjk1ZjY5Nzc4MGQ3N2QwZTM1NWY5ODBjMjQ3
YWU3MTI4Li42NzQ4ZDc4OTcwZTQ3ZmMyMWM4YzQ2NTM2MDEyZmUyNDQxNGYxM2NjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA4LTI0ICBJYW4gVm9s
bGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2hvdWxk
IGFjY2VsZXJhdGUgcm90YXRpb25zIG9mID49IDE4MCBkZWdyZWVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDg2MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB1bml0IHRlc3RzOgorICAg
ICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QudHJhbnNmb3JtVHlwZXNBcmVVbmlxdWUK
KyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0Lm1hdGNoVHlwZXNTYW1lTGVuZ3Ro
CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5pZGVudGl0eUFsd2F5c01hdGNo
ZXMKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmxhcmdlUm90YXRpb25zV2l0
aFNhbWVBeGlzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0
aW9uc1dpdGhTYW1lQXhpc0luRGlmZmVyZW50RGlyZWN0aW9uCisgICAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhEaWZmZXJlbnRBeGVzCisgICAgICAg
ICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFJvdGF0aW9uRnJvbUlkZW50aXR5Cisg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFRyYW5zbGF0aW9uRnJvbUlk
ZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFNjYWxlRnJv
bUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFNrZXdG
cm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUGVy
c3BlY3RpdmVGcm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0
LmJsZW5kUm90YXRpb25Ub0lkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdC5ibGVuZFRyYW5zbGF0aW9uVG9JZGVudGl0eQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvblRlc3QuYmxlbmRTY2FsZVRvSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LmJsZW5kU2tld1RvSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVUb0lkZW50aXR5CisgICAgICAgICAgQW5pbWF0
aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90
YXRpb24KKyAgICAgICAgICBBbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LmNyZWF0ZVRyYW5z
Zm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlvbkFuZEVtcHR5VHJhbnNmb3JtT3BlcmF0aW9uTGlz
dAorCisgICAgICAgICogdGVzdHMvQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnNUZXN0LmNwcDoKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoZ2V0SWRlbnRpdHlPcGVy
YXRpb25zKToKKwogMjAxMi0wOC0yNCAgRGFuIENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBbVjhdIFJlZmFjdG9yIGF3YXkgSXNvbGF0ZWRXb3JsZApkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMu
aAppbmRleCBhNDk3YWFhNTU0OWQzNDA5OTdiODZmODc2M2Y2ZWRkYzYxOWJkZDk2Li5lNTY1YWU3
ZThhZTI2M2RiYTAzMDdkMDBhOWZiN2Q3N2Y1MThiMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaApAQCAt
NzQsNiArNzQsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFNrZXco
ZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kUGVyc3Bl
Y3RpdmUoZG91YmxlIGRlcHRoKTsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kTWF0cml4
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IGFwcGVuZElkZW50aXR5KCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNJZGVudGl0eSgp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFu
c2Zvcm1PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKaW5kZXggMTJiZDAwYjI2ZjQ4MGQxMzli
N2MyMjY5ZTI3NzNjY2Q3NjdmYzJlNC4uYTkzZGViY2JlNGQxY2VmOWEyYzhkNmZlNGMwYjQzODEz
MGE2NzJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCkBAIC0yNiw4
ICsyNiwxNSBAQAogCiAjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4K
IAorI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSB7Citjb25zdCBkb3VibGUgRVBTSUxPTiA9IDFl
LTQ7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uIHsKQEAgLTM3LDExICs0NCwyNyBAQCBzdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHsK
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGUsCiAgICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvblNrZXcsCiAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZl
LAotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25NYXRyaXgKKyAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uTWF0cml4LAorICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0
eQogICAgIH07CiAKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24oKQorICAgICAgICA6IHR5cGUo
V2ViVHJhbnNmb3JtT3BlcmF0aW9uSWRlbnRpdHkpCisgICAgICAgICwgeCgwKQorICAgICAgICAs
IHkoMCkKKyAgICAgICAgLCB6KDApCisgICAgICAgICwgYW5nbGUoMCkKKyAgICB7CisgICAgfQor
CiAgICAgVHlwZSB0eXBlOwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAg
ICBkb3VibGUgeDsKKyAgICBkb3VibGUgeTsKKyAgICBkb3VibGUgejsKKyAgICBkb3VibGUgYW5n
bGU7CisKKyAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtYXRyaXguaXNJZGVu
dGl0eSgpOyB9CiB9OwogCiBjbGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSB7CkBA
IC01NywxMyArODAsMTY1IEBAIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnM6OmFwcGx5KCkgY29uc3QKICAgICByZXR1cm4gdG9SZXR1cm47CiB9CiAKK2Jvb2wg
aXNJZGVudGl0eShjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikKK3sKKyAg
ICByZXR1cm4gIW9wZXJhdGlvbiB8fCBvcGVyYXRpb24tPmlzSWRlbnRpdHkoKTsKK30KKworYm9v
bCBzaGFyZVNhbWVBeGlzKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3Qg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgZG91YmxlJiBheGlzWCwgZG91YmxlJiBheGlzWSwg
ZG91YmxlJiBheGlzWiwgZG91YmxlJiBhbmdsZUZyb20pCit7CisgICAgaWYgKGlzSWRlbnRpdHko
ZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChpc0lkZW50aXR5KGZyb20pICYmICFpc0lkZW50aXR5KHRvKSkgeworICAgICAgICBheGlzWCA9
IHRvLT54OworICAgICAgICBheGlzWSA9IHRvLT55OworICAgICAgICBheGlzWiA9IHRvLT56Owor
ICAgICAgICBhbmdsZUZyb20gPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpIHsKKyAgICAgICAgYXhp
c1ggPSBmcm9tLT54OworICAgICAgICBheGlzWSA9IGZyb20tPnk7CisgICAgICAgIGF4aXNaID0g
ZnJvbS0+ejsKKyAgICAgICAgYW5nbGVGcm9tID0gZnJvbS0+YW5nbGU7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGRvdWJsZSBsZW5ndGgyID0gZnJvbS0+eCAqIGZyb20tPngg
KyBmcm9tLT55ICogZnJvbS0+eSArIGZyb20tPnogKiBmcm9tLT56OworICAgIGRvdWJsZSBvdGhl
ckxlbmd0aDIgPSB0by0+eCAqIHRvLT54ICsgdG8tPnkgKiB0by0+eSArIHRvLT56ICogdG8tPno7
CisKKyAgICBpZiAobGVuZ3RoMiA8PSBFUFNJTE9OIHx8IG90aGVyTGVuZ3RoMiA8PSBFUFNJTE9O
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkb3VibGUgZG90ID0gdG8tPnggKiBmcm9t
LT54ICsgdG8tPnkgKiBmcm9tLT55ICsgdG8tPnogKiBmcm9tLT56OworICAgIGRvdWJsZSBlcnJv
ciA9IGZhYnMoMS4wIC0gKGRvdCAqIGRvdCkgLyAobGVuZ3RoMiAqIG90aGVyTGVuZ3RoMikpOwor
ICAgIGJvb2wgcmVzdWx0ID0gZXJyb3IgPCBFUFNJTE9OOworICAgIGlmIChyZXN1bHQpIHsKKyAg
ICAgICAgYXhpc1ggPSB0by0+eDsKKyAgICAgICAgYXhpc1kgPSB0by0+eTsKKyAgICAgICAgYXhp
c1ogPSB0by0+ejsKKyAgICAgICAgLy8gSWYgdGhlIGF4ZXMgYXJlIHBvaW50aW5nIGluIG9wcG9z
aXRlIGRpcmVjdGlvbnMsIHdlIG5lZWQgdG8gcmV2ZXJzZQorICAgICAgICAvLyB0aGUgYW5nbGUu
CisgICAgICAgIGFuZ2xlRnJvbSA9IGRvdCA+IDAgPyBmcm9tLT5hbmdsZSA6IC1mcm9tLT5hbmds
ZTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZG91YmxlIGJsZW5kRG91Ymxlcyhk
b3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIGZy
b20gKiAoMSAtIHByb2dyZXNzKSArIHRvICogcHJvZ3Jlc3M7Cit9CisKK1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGJsZW5kVHJhbnNmb3JtT3BlcmF0aW9ucyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1JldHVybjsKKworICAgIGlm
IChpc0lkZW50aXR5KGZyb20pICYmIGlzSWRlbnRpdHkodG8pKQorICAgICAgICByZXR1cm4gdG9S
ZXR1cm47CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OlR5cGUgaW50ZXJwb2xhdGlvblR5
cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvbklkZW50aXR5
OworICAgIGlmIChpc0lkZW50aXR5KHRvKSkKKyAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUgPSBm
cm9tLT50eXBlOworICAgIGVsc2UKKyAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUgPSB0by0+dHlw
ZTsKKworICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlvblR5cGUpIHsKKyAgICBjYXNlIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uVHJhbnNsYXRlOiB7CisgICAgICAg
IGRvdWJsZSBmcm9tWCA9IGlzSWRlbnRpdHkoZnJvbSkgPyAwIDogZnJvbS0+eDsKKyAgICAgICAg
ZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT55OworICAgICAgICBk
b3VibGUgZnJvbVogPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPno7CisgICAgICAgIGRv
dWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/IDAgOiB0by0+eDsKKyAgICAgICAgZG91YmxlIHRv
WSA9IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT55OworICAgICAgICBkb3VibGUgdG9aID0gaXNJ
ZGVudGl0eSh0bykgPyAwIDogdG8tPno7CisgICAgICAgIHRvUmV0dXJuLnRyYW5zbGF0ZTNkKGJs
ZW5kRG91Ymxlcyhmcm9tWCwgdG9YLCBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsZW5kRG91Ymxlcyhmcm9tWSwgdG9ZLCBwcm9ncmVzcyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsZW5kRG91Ymxlcyhmcm9tWiwgdG9aLCBwcm9ncmVzcykpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRy
YW5zZm9ybU9wZXJhdGlvblJvdGF0ZTogeworICAgICAgICBkb3VibGUgYXhpc1ggPSAwOworICAg
ICAgICBkb3VibGUgYXhpc1kgPSAwOworICAgICAgICBkb3VibGUgYXhpc1ogPSAxOworICAgICAg
ICBkb3VibGUgZnJvbUFuZ2xlID0gMDsKKyAgICAgICAgZG91YmxlIHRvQW5nbGUgPSBpc0lkZW50
aXR5KHRvKSA/IDAgOiB0by0+YW5nbGU7CisgICAgICAgIGlmIChzaGFyZVNhbWVBeGlzKGZyb20s
IHRvLCBheGlzWCwgYXhpc1ksIGF4aXNaLCBmcm9tQW5nbGUpKQorICAgICAgICAgICAgdG9SZXR1
cm4ucm90YXRlM2QoYXhpc1gsIGF4aXNZLCBheGlzWiwgYmxlbmREb3VibGVzKGZyb21BbmdsZSwg
dG9BbmdsZSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeDsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGl0eSh0
bykpCisgICAgICAgICAgICAgICAgdG9NYXRyaXggPSB0by0+bWF0cml4OworICAgICAgICAgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKKyAgICAgICAgICAgIGlmICghaXNJ
ZGVudGl0eShmcm9tKSkKKyAgICAgICAgICAgICAgICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0cml4
OworICAgICAgICAgICAgdG9SZXR1cm4gPSB0b01hdHJpeDsKKyAgICAgICAgICAgIHRvUmV0dXJu
LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJh
dGlvblNjYWxlOiB7CisgICAgICAgIGRvdWJsZSBmcm9tWCA9IGlzSWRlbnRpdHkoZnJvbSkgPyAx
IDogZnJvbS0+eDsKKyAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDEg
OiBmcm9tLT55OworICAgICAgICBkb3VibGUgZnJvbVogPSBpc0lkZW50aXR5KGZyb20pID8gMSA6
IGZyb20tPno7CisgICAgICAgIGRvdWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/IDEgOiB0by0+
eDsKKyAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRlbnRpdHkodG8pID8gMSA6IHRvLT55OworICAg
ICAgICBkb3VibGUgdG9aID0gaXNJZGVudGl0eSh0bykgPyAxIDogdG8tPno7CisgICAgICAgIHRv
UmV0dXJuLnNjYWxlM2QoYmxlbmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dyZXNzKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBibGVuZERvdWJsZXMoZnJvbVksIHRvWSwgcHJvZ3Jlc3MpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRG91Ymxlcyhmcm9tWiwgdG9aLCBwcm9ncmVz
cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRp
b246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNrZXc6IHsKKyAgICAgICAgZG91YmxlIGZyb21YID0g
aXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT54OworICAgICAgICBkb3VibGUgZnJvbVkgPSBp
c0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnk7CisgICAgICAgIGRvdWJsZSB0b1ggPSBpc0lk
ZW50aXR5KHRvKSA/IDAgOiB0by0+eDsKKyAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRlbnRpdHko
dG8pID8gMCA6IHRvLT55OworICAgICAgICB0b1JldHVybi5za2V3WChibGVuZERvdWJsZXMoZnJv
bVgsIHRvWCwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgdG9SZXR1cm4uc2tld1koYmxlbmREb3VibGVz
KGZyb21ZLCB0b1ksIHByb2dyZXNzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUGVyc3BlY3RpdmU6
IHsKKyAgICAgICAgZG91YmxlIGZyb21QZXJzcGVjdGl2ZSA9IGlzSWRlbnRpdHkoZnJvbSkgPyBu
dW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSA6IGZyb20tPng7CisgICAgICAgIGRvdWJsZSB0
b1BlcnNwZWN0aXZlID0gaXNJZGVudGl0eSh0bykgPyBudW1lcmljX2xpbWl0czxkb3VibGU+Ojpt
YXgoKSA6IHRvLT54OworICAgICAgICB0b1JldHVybi5hcHBseVBlcnNwZWN0aXZlKGJsZW5kRG91
Ymxlcyhmcm9tUGVyc3BlY3RpdmUsIHRvUGVyc3BlY3RpdmUsIHByb2dyZXNzKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9uTWF0cml4OiB7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRv
TWF0cml4OworICAgICAgICBpZiAoIWlzSWRlbnRpdHkodG8pKQorICAgICAgICAgICAgdG9NYXRy
aXggPSB0by0+bWF0cml4OworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0
cml4OworICAgICAgICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkpCisgICAgICAgICAgICBmcm9tTWF0
cml4ID0gZnJvbS0+bWF0cml4OworICAgICAgICB0b1JldHVybiA9IHRvTWF0cml4OworICAgICAg
ICB0b1JldHVybi5ibGVuZChmcm9tTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9uSWRlbnRpdHk6CisgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiB0b1JldHVybjsKK30KKwogV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YmxlbmQoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyYgZnJvbSwgZG91YmxlIHByb2dyZXNzKSBjb25zdAogewogICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IHRvUmV0dXJuOworICAgIGJvb2wgZnJvbUlkZW50aXR5ID0gZnJvbS5pc0lkZW50aXR5
KCk7CisgICAgYm9vbCB0b0lkZW50aXR5ID0gaXNJZGVudGl0eSgpOworICAgIGlmIChmcm9tSWRl
bnRpdHkgJiYgdG9JZGVudGl0eSkKKyAgICAgICAgcmV0dXJuIHRvUmV0dXJuOworCiAgICAgaWYg
KG1hdGNoZXNUeXBlcyhmcm9tKSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
cHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggYmxlbmRlZCA9IG1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5tYXRyaXg7
Ci0gICAgICAgICAgICBibGVuZGVkLmJsZW5kKGZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zW2ld
Lm1hdHJpeCwgcHJvZ3Jlc3MpOworICAgICAgICBzaXplX3QgbnVtT3BlcmF0aW9ucyA9IG1heChm
cm9tSWRlbnRpdHkgPyAwIDogZnJvbS5tX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0lkZW50aXR5ID8gMCA6IG1fcHJpdmF0
ZS0+b3BlcmF0aW9ucy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bU9wZXJhdGlvbnM7ICsraSkgeworICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
YmxlbmRlZCA9IGJsZW5kVHJhbnNmb3JtT3BlcmF0aW9ucygKKyAgICAgICAgICAgICAgICBmcm9t
SWRlbnRpdHkgPyAwIDogJmZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLAorICAgICAgICAg
ICAgICAgIHRvSWRlbnRpdHkgPyAwIDogJm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXSwKKyAgICAg
ICAgICAgICAgICBwcm9ncmVzcyk7CiAgICAgICAgICAgICB0b1JldHVybi5tdWx0aXBseShibGVu
ZGVkKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC03NiwxMSArMjUxLDE2IEBAIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kKGNvbnN0IFdl
YlRyYW5zZm9ybU9wZXJhdGlvCiAKIGJvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6bWF0Y2hl
c1R5cGVzKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdAogeworICAg
IGlmIChpc0lkZW50aXR5KCkgfHwgb3RoZXIuaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKwogICAgIGlmIChtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpICE9IG90aGVyLm1f
cHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZSAhPSBvdGhlci5t
X3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZSkKKyAgICAgICAgaWYgKG1fcHJpdmF0ZS0+b3Bl
cmF0aW9uc1tpXS50eXBlICE9IG90aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS50eXBlCisg
ICAgICAgICAgICAmJiAhbV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLmlzSWRlbnRpdHkoKQorICAg
ICAgICAgICAgJiYgIW90aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50aXR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05Miw2ICsyNzIsOSBAQCB2
b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFRyYW5zbGF0ZShkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB6KQogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKICAgICB0
b0FkZC5tYXRyaXgudHJhbnNsYXRlM2QoeCwgeSwgeik7CiAgICAgdG9BZGQudHlwZSA9IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uVHJhbnNsYXRlOworICAgIHRv
QWRkLnggPSB4OworICAgIHRvQWRkLnkgPSB5OworICAgIHRvQWRkLnogPSB6OwogICAgIG1fcHJp
dmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwogfQogCkBAIC0xMDAsNiArMjgzLDEwIEBA
IHZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKGRvdWJsZSB4LCBkb3Vi
bGUgeSwgZG91YmxlIHosIGRvdWJsZSBkCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRk
OwogICAgIHRvQWRkLm1hdHJpeC5yb3RhdGUzZCh4LCB5LCB6LCBkZWdyZWVzKTsKICAgICB0b0Fk
ZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25Sb3Rh
dGU7CisgICAgdG9BZGQueCA9IHg7CisgICAgdG9BZGQueSA9IHk7CisgICAgdG9BZGQueiA9IHo7
CisgICAgdG9BZGQuYW5nbGUgPSBkZWdyZWVzOwogICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5h
cHBlbmQodG9BZGQpOwogfQogCkBAIC0xMDgsNiArMjk1LDkgQEAgdm9pZCBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zOjphcHBlbmRTY2FsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KQogICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKICAgICB0b0FkZC5tYXRyaXguc2NhbGUzZCh4
LCB5LCB6KTsKICAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25TY2FsZTsKKyAgICB0b0FkZC54ID0geDsKKyAgICB0b0FkZC55ID0geTsK
KyAgICB0b0FkZC56ID0gejsKICAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRk
KTsKIH0KIApAQCAtMTE3LDYgKzMwNyw4IEBAIHZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6
YXBwZW5kU2tldyhkb3VibGUgeCwgZG91YmxlIHkpCiAgICAgdG9BZGQubWF0cml4LnNrZXdYKHgp
OwogICAgIHRvQWRkLm1hdHJpeC5za2V3WSh5KTsKICAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNm
b3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25Ta2V3OworICAgIHRvQWRkLnggPSB4
OworICAgIHRvQWRkLnkgPSB5OwogICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9B
ZGQpOwogfQogCkBAIC0xMjUsNiArMzE3LDcgQEAgdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
OjphcHBlbmRQZXJzcGVjdGl2ZShkb3VibGUgZGVwdGgpCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uIHRvQWRkOwogICAgIHRvQWRkLm1hdHJpeC5hcHBseVBlcnNwZWN0aXZlKGRlcHRoKTsKICAg
ICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25QZXJzcGVjdGl2ZTsKKyAgICB0b0FkZC54ID0gZGVwdGg7CiAgICAgbV9wcml2YXRlLT5vcGVy
YXRpb25zLmFwcGVuZCh0b0FkZCk7CiB9CiAKQEAgLTEzNiw2ICszMjksMjAgQEAgdm9pZCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCkKICAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsK
IH0KIAordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRJZGVudGl0eSgpCit7Cisg
ICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZChXZWJUcmFuc2Zvcm1PcGVyYXRpb24oKSk7
Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6aXNJZGVudGl0eSgpIGNvbnN0Cit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0uaXNJZGVudGl0
eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpyZXNldCgpCiB7CiAgICAgbV9wcml2
YXRlLnJlc2V0KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAK
aW5kZXggODA2NGFlMzhlZDIwNjdmMTMwNTE1OTdmNGI2OTc5NGZjNDJmYWQ0YS4uNGQwZDIzMWMy
YTE0YjQxNzZlMzNlOTA5NTU0N2VlNWMxYTg4MWE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRp
b25UcmFuc2xhdGlvblV0aWwuY3BwCkBAIC0xMTQsNyArMTE0LDcgQEAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
cyYgdHJhbnMKICAgICAgICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURF
TlRJVFk6CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgotICAgICAgICAg
ICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMuYXBw
ZW5kSWRlbnRpdHkoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9IC8vIHN3aXRjaAog
ICAgIH0gLy8gZm9yIGVhY2ggb3BlcmF0aW9uCkBAIC0xNDUsNTEgKzE0NSw5IEBAIGJvb2wgaXNS
b3RhdGlvblR5cGUoVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHRyYW5zZm9ybVR5
cGUpCiAgICAgICAgIHx8IHRyYW5zZm9ybVR5cGUgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RB
VEVfM0Q7CiB9CiAKLWJvb2wgY2F1c2VzUm90YXRpb25PZkF0TGVhc3QxODBEZWdyZWVzKGNvbnN0
IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUqIGxhc3RWYWx1ZSkKLXsKLSAgICBpZiAoIWxhc3RWYWx1ZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0aW9ucyA9ICp2
YWx1ZS0+dmFsdWUoKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBsYXN0T3BlcmF0
aW9ucyA9ICpsYXN0VmFsdWUtPnZhbHVlKCk7Ci0KLSAgICAvLyBXZSdsbCBiZSBkb2luZyBtYXRy
aXggaW50ZXJwb2xhdGlvbiBpbiB0aGlzIGNhc2UuIE5vIHJpc2sgb2YgaW5jb3JyZWN0IHJvdGF0
aW9ucyBoZXJlLgotICAgIGlmIChvcGVyYXRpb25zLnNpemUoKSAmJiBsYXN0T3BlcmF0aW9ucy5z
aXplKCkgJiYgIW9wZXJhdGlvbnMub3BlcmF0aW9uc01hdGNoKGxhc3RPcGVyYXRpb25zKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2l6ZV90IG51bU9wZXJhdGlvbnMgPSBtYXgob3Bl
cmF0aW9ucy5zaXplKCksIGxhc3RPcGVyYXRpb25zLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1PcGVyYXRpb25zOyArK2kpIHsKLSAgICAgICAgZmxvYXQgYW5nbGUgPSAw
OwotICAgICAgICBpZiAoaSA8IG9wZXJhdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBpZiAo
IWlzUm90YXRpb25UeXBlKG9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2ldLT5nZXRPcGVyYXRpb25U
eXBlKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qIHJvdGF0aW9uID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKj4ob3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0uZ2V0KCkpOwotICAgICAgICAg
ICAgYW5nbGUgPSByb3RhdGlvbi0+YW5nbGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0
IGxhc3RBbmdsZSA9IDA7Ci0gICAgICAgIGlmIChpIDwgbGFzdE9wZXJhdGlvbnMuc2l6ZSgpKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzUm90YXRpb25UeXBlKGxhc3RPcGVyYXRpb25zLm9wZXJhdGlv
bnMoKVtpXS0+Z2V0T3BlcmF0aW9uVHlwZSgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBsYXN0Um90YXRpb24gPSBz
dGF0aWNfY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihsYXN0T3BlcmF0aW9ucy5vcGVy
YXRpb25zKClbaV0uZ2V0KCkpOwotICAgICAgICAgICAgbGFzdEFuZ2xlID0gbGFzdFJvdGF0aW9u
LT5hbmdsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZhYnMoYW5nbGUgLSBsYXN0QW5n
bGUpID49IDE4MCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQogdGVtcGxhdGUgPD4KIGJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRh
cmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgV2ViVHJhbnNmb3JtS2V5
ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihXZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1
ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBsYXN0VmFsdWUsIFdlYktp
dDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5
cGUsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKIHsKLSAgICBpZiAoY2F1c2VzUm90YXRpb25P
ZkF0TGVhc3QxODBEZWdyZWVzKHZhbHVlLCBsYXN0VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKTsKICAgICBpZiAob3BlcmF0
aW9ucy5hcHBseSgpLmlzSW52ZXJ0aWJsZSgpKSB7CiAgICAgICAgIGN1cnZlLT5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwgb3BlcmF0aW9ucyksIHRpbWluZ0Z1bmN0aW9uVHlwZSk7
CkBAIC0yMDEsOSArMTU5LDYgQEAgYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhTdGFuZGFyZFRpbWlu
Z0Z1bmN0aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBXZWJUcmFuc2YKIHRlbXBsYXRlIDw+
CiBib29sIGFwcGVuZEtleWZyYW1lV2l0aEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uPFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlLCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSwgV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU+KFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSwgZG91YmxlIGtl
eVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgY29uc3QgVHJhbnNm
b3JtQW5pbWF0aW9uVmFsdWUqIGxhc3RWYWx1ZSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJs
ZSB4MiwgZG91YmxlIHkyLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCiB7Ci0gICAgaWYgKGNh
dXNlc1JvdGF0aW9uT2ZBdExlYXN0MTgwRGVncmVlcyh2YWx1ZSwgbGFzdFZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
ID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7CiAg
ICAgaWYgKG9wZXJhdGlvbnMuYXBwbHkoKS5pc0ludmVydGlibGUoKSkgewogICAgICAgICBjdXJ2
ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKGtleVRpbWUsIG9wZXJhdGlvbnMpLCB4MSwgeTEs
IHgyLCB5Mik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0FuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9BbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LmNwcAppbmRleCA3MGRhNjVlZjY1ZThhYWIz
ODU1ZjQ4YWZjNWI0OWQyODIyYzM5MTQ4Li5lYTdkZmI3YmMzYTIzOTQ3MmVmNzU1NzVlMTJhMWFk
MjM3OWI0OTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0FuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcHAKQEAgLTk2LDcgKzk2LDcgQEAg
VEVTVChBbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRp
b25XaXRoQmlnUm90YXRpb24pCiAgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5p
bWF0aW9uOjpjcmVhdGUoKTsKICAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsK
IAotICAgIEVYUEVDVF9GQUxTRShhbmltYXRpb25DYW5CZVRyYW5zbGF0ZWQodmFsdWVzLCBhbmlt
YXRpb24uZ2V0KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmltYXRpb25DYW5CZVRyYW5zbGF0ZWQo
dmFsdWVzLCBhbmltYXRpb24uZ2V0KCkpKTsKIH0KIAogVEVTVChBbmltYXRpb25UcmFuc2xhdGlv
blV0aWxUZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRpb25BbmRFbXB0
eVRyYW5zZm9ybU9wZXJhdGlvbkxpc3QpCkBAIC0xMTQsNyArMTE0LDcgQEAgVEVTVChBbmltYXRp
b25UcmFuc2xhdGlvblV0aWxUZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90
YXRpb25BbmRFbXAKICAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246
OmNyZWF0ZSgpOwogICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwogCi0gICAg
RVhQRUNUX0ZBTFNFKGFuaW1hdGlvbkNhbkJlVHJhbnNsYXRlZCh2YWx1ZXMsIGFuaW1hdGlvbi5n
ZXQoKSkpOworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbkNhbkJlVHJhbnNsYXRlZCh2YWx1ZXMs
IGFuaW1hdGlvbi5nZXQoKSkpOwogfQogCiBURVNUKEFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbFRl
c3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhSb3RhdGlvbkludm9sdmluZ05lZ2F0aXZl
QW5nbGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFu
c2Zvcm1PcGVyYXRpb25zVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcAppbmRleCBkZWFmN2FkNzRmNTMyOTFlZjViNDFh
YWUxMDllZDI3MTgwZWYwZDllLi45ZTRmNzVhM2NlYjhlMDkyZmY2ZWI0Nzg2ZDcwMGU4NWQ2Mzk1
OGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9y
bU9wZXJhdGlvbnNUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCit1c2luZyBuYW1l
c3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogVEVTVChXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LCB0cmFuc2Zvcm1UeXBlc0FyZVVuaXF1ZSkKQEAgLTQyLDE5ICs0MywxOSBA
QCBURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIHRyYW5zZm9ybVR5cGVzQXJlVW5pcXVl
KQogICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiB0cmFuc2Zvcm1z
OwogCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyogdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucygpOwotICAgIHRvQWRkLT5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAg
dG9BZGQtPmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKICAgICB0cmFuc2Zvcm1zLmFwcGVuZChh
ZG9wdFB0cih0b0FkZCkpOwogCiAgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cygpOwotICAgIHRvQWRkLT5hcHBlbmRSb3RhdGUoMCwgMCwgMSwgMCk7CisgICAgdG9BZGQtPmFw
cGVuZFJvdGF0ZSgwLCAwLCAxLCAyKTsKICAgICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0
b0FkZCkpOwogCiAgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAg
IHRvQWRkLT5hcHBlbmRTY2FsZSgxLCAxLCAxKTsKKyAgICB0b0FkZC0+YXBwZW5kU2NhbGUoMiwg
MiwgMik7CiAgICAgdHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKIAogICAgIHRv
QWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKLSAgICB0b0FkZC0+YXBwZW5kU2tl
dygwLCAwKTsKKyAgICB0b0FkZC0+YXBwZW5kU2tldygxLCAwKTsKICAgICB0cmFuc2Zvcm1zLmFw
cGVuZChhZG9wdFB0cih0b0FkZCkpOwogCiAgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucygpOwpAQCAtNzIsMTkgKzczLDE5IEBAIFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdCwgdHJhbnNmb3JtVHlwZXNBcmVVbmlxdWUpCiBURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlv
blRlc3QsIG1hdGNoVHlwZXNTYW1lTGVuZ3RoKQogewogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgdHJhbnNsYXRlczsKLSAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsK
LSAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKLSAgICB0cmFuc2xhdGVz
LmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0
ZSgxLCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAg
ICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKIAogICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgc2tld3M7Ci0gICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKLSAgICBza2V3
cy5hcHBlbmRTa2V3KDAsIDApOwotICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMCk7CisgICAgc2tl
d3MuYXBwZW5kU2tldygwLCAyKTsKKyAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDIpOworICAgIHNr
ZXdzLmFwcGVuZFNrZXcoMCwgMik7CiAKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5z
bGF0ZXMyOwotICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKLSAgICB0
cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Ci0gICAgdHJhbnNsYXRlczIuYXBw
ZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgw
LCAyLCAwKTsKKyAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMiwgMCk7CisgICAg
dHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDIsIDApOwogCiAgICAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyB0cmFuc2xhdGVzMyA9IHRyYW5zbGF0ZXMyOwogCkBAIC05NiwyMiArOTcsODQg
QEAgVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBtYXRjaFR5cGVzU2FtZUxlbmd0aCkK
IFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgbWF0Y2hUeXBlc0RpZmZlcmVudExlbmd0
aCkKIHsKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zbGF0ZXM7Ci0gICAgdHJhbnNs
YXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Ci0gICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFu
c2xhdGUoMCwgMCwgMCk7Ci0gICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7
CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgdHJhbnNsYXRl
cy5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xh
dGUoMSwgMCwgMCk7CiAKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHNrZXdzOwotICAgIHNr
ZXdzLmFwcGVuZFNrZXcoMCwgMCk7Ci0gICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKKyAgICBz
a2V3cy5hcHBlbmRTa2V3KDIsIDApOworICAgIHNrZXdzLmFwcGVuZFNrZXcoMiwgMCk7CiAKICAg
ICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zbGF0ZXMyOwotICAgIHRyYW5zbGF0ZXMyLmFw
cGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKLSAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUo
MCwgMCwgMCk7CisgICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDIsIDApOworICAg
IHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAyLCAwKTsKIAogICAgIEVYUEVDVF9GQUxT
RSh0cmFuc2xhdGVzLm1hdGNoZXNUeXBlcyhza2V3cykpOwogICAgIEVYUEVDVF9GQUxTRSh0cmFu
c2xhdGVzLm1hdGNoZXNUeXBlcyh0cmFuc2xhdGVzMikpOwogfQogCit2b2lkIGdldElkZW50aXR5
T3BlcmF0aW9ucyhWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4qIG9wZXJh
dGlvbnMpCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyogdG9BZGQgPSBuZXcgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucygpOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0Fk
ZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRv
QWRkLT5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFk
b3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
KCk7CisgICAgdG9BZGQtPmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0b0FkZC0+YXBw
ZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0
b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAg
IHRvQWRkLT5hcHBlbmRTY2FsZSgxLCAxLCAxKTsKKyAgICBvcGVyYXRpb25zLT5hcHBlbmQoYWRv
cHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMo
KTsKKyAgICB0b0FkZC0+YXBwZW5kU2NhbGUoMSwgMSwgMSk7CisgICAgdG9BZGQtPmFwcGVuZFNj
YWxlKDEsIDEsIDEpOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOwor
CisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5h
cHBlbmRTa2V3KDAsIDApOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkp
OworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRk
LT5hcHBlbmRTa2V3KDAsIDApOworICAgIHRvQWRkLT5hcHBlbmRTa2V3KDAsIDApOworICAgIG9w
ZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRSb3RhdGUoMCwgMCwgMSwg
MCk7CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0Fk
ZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFJvdGF0
ZSgwLCAwLCAxLCAwKTsKKyAgICB0b0FkZC0+YXBwZW5kUm90YXRlKDAsIDAsIDEsIDApOworICAg
IG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRNYXRyaXgoV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSk7CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRv
QWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAg
dG9BZGQtPmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKyAgICB0b0Fk
ZC0+YXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworICAgIG9wZXJhdGlv
bnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJh
dGlvblRlc3QsIGlkZW50aXR5QWx3YXlzTWF0Y2hlcykKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gb3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9wZXJh
dGlvbnMoJm9wZXJhdGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRp
b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgb3BlcmF0
aW9ucy5zaXplKCk7ICsraikKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG9wZXJhdGlvbnNbaV0t
Pm1hdGNoZXNUeXBlcygqb3BlcmF0aW9uc1tqXSkpOworICAgIH0KK30KKwogVEVTVChXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBseVRyYW5zbGF0ZSkKIHsKICAgICBkb3VibGUgeCA9IDE7
CkBAIC0zMzksMyArNDAyLDIzOCBAQCBURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJs
ZW5kV2hlblR5cGVzRG9Ob3RNYXRjaCkKIAogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRS
SVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnNUby5ibGVuZChvcGVyYXRpb25zRnJvbSwgcHJvZ3Jl
c3MpKTsKIH0KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBsYXJnZVJvdGF0aW9u
c1dpdGhTYW1lQXhpcykKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNG
cm9tOworICAgIG9wZXJhdGlvbnNGcm9tLmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAwKTsKKworICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc1RvOworICAgIG9wZXJhdGlvbnNUby5h
cHBlbmRSb3RhdGUoMCwgMCwgMiwgMzYwKTsKKworICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsK
KworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgIGV4cGVjdGVkLnJv
dGF0ZTNkKDAsIDAsIDEsIDE4MCk7CisKKyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zVG8uYmxlbmQob3BlcmF0aW9uc0Zyb20sIHByb2dyZXNz
KSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgbGFyZ2VSb3RhdGlvbnNX
aXRoU2FtZUF4aXNJbkRpZmZlcmVudERpcmVjdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnNGcm9tOworICAgIG9wZXJhdGlvbnNGcm9tLmFwcGVuZFJvdGF0ZSgw
LCAwLCAxLCAxODApOworCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zVG87
CisgICAgb3BlcmF0aW9uc1RvLmFwcGVuZFJvdGF0ZSgwLCAwLCAtMSwgMTgwKTsKKworICAgIGRv
dWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkOworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3Bl
cmF0aW9uc1RvLmJsZW5kKG9wZXJhdGlvbnNGcm9tLCBwcm9ncmVzcykpOworfQorCitURVNUKFdl
YlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGxhcmdlUm90YXRpb25zV2l0aERpZmZlcmVudEF4ZXMp
Cit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zRnJvbTsKKyAgICBvcGVy
YXRpb25zRnJvbS5hcHBlbmRSb3RhdGUoMCwgMCwgMSwgMTgwKTsKKworICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uc1RvOworICAgIG9wZXJhdGlvbnNUby5hcHBlbmRSb3RhdGUo
MCwgMSwgMCwgMTgwKTsKKworICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKyAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhGcm9tOworICAgIG1hdHJpeEZyb20ucm90YXRlM2QoMCwg
MCwgMSwgMTgwKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeFRvOworICAg
IG1hdHJpeFRvLnJvdGF0ZTNkKDAsIDEsIDAsIDE4MCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBleHBlY3RlZCA9IG1hdHJpeFRvOworICAgIGV4cGVjdGVkLmJsZW5kKG1hdHJpeEZy
b20sIHByb2dyZXNzKTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhw
ZWN0ZWQsIG9wZXJhdGlvbnNUby5ibGVuZChvcGVyYXRpb25zRnJvbSwgcHJvZ3Jlc3MpKTsKK30K
KworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFJvdGF0aW9uRnJvbUlkZW50
aXR5KQoreworICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVu
dGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJh
dGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
OworICAgICAgICBvcGVyYXRpb25zLmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAzNjApOworCisgICAg
ICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0ZWQucm90YXRlM2QoMCwgMCwgMSwgMTgwKTsK
KworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVy
YXRpb25zLmJsZW5kKCppZGVudGl0eU9wZXJhdGlvbnNbaV0sIHByb2dyZXNzKSk7CisgICAgfQor
fQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kVHJhbnNsYXRpb25Gcm9t
SWRlbnRpdHkpCit7CisgICAgVmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+
IGlkZW50aXR5T3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5
T3BlcmF0aW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnM7CisgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKDIsIDIsIDIpOworCisg
ICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0ZWQudHJhbnNsYXRlM2QoMSwgMSwgMSk7
CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3Bl
cmF0aW9ucy5ibGVuZCgqaWRlbnRpdHlPcGVyYXRpb25zW2ldLCBwcm9ncmVzcykpOworICAgIH0K
K30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFNjYWxlRnJvbUlkZW50
aXR5KQoreworICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVu
dGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJh
dGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
OworICAgICAgICBvcGVyYXRpb25zLmFwcGVuZFNjYWxlKDMsIDMsIDMpOworCisgICAgICAgIGRv
dWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBl
eHBlY3RlZDsKKyAgICAgICAgZXhwZWN0ZWQuc2NhbGUzZCgyLCAyLCAyKTsKKworICAgICAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zLmJsZW5k
KCppZGVudGl0eU9wZXJhdGlvbnNbaV0sIHByb2dyZXNzKSk7CisgICAgfQorfQorCitURVNUKFdl
YlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kU2tld0Zyb21JZGVudGl0eSkKK3sKKyAgICBW
ZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25z
OworICAgIGdldElkZW50aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3Bl
cmF0aW9ucy5hcHBlbmRTa2V3KDIsIDIpOworCisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAu
NTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAg
ZXhwZWN0ZWQuc2tld1goMSk7CisgICAgICAgIGV4cGVjdGVkLnNrZXdZKDEpOworCisgICAgICAg
IEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYmxl
bmQoKmlkZW50aXR5T3BlcmF0aW9uc1tpXSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1Qo
V2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRQZXJzcGVjdGl2ZUZyb21JZGVudGl0eSkK
K3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlP
cGVyYXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25z
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAg
ICAgICAgb3BlcmF0aW9ucy5hcHBlbmRQZXJzcGVjdGl2ZSgxMDAwKTsKKworICAgICAgICBkb3Vi
bGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhw
ZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVkLmFwcGx5UGVyc3BlY3RpdmUoNTAwICsgMC41ICogbnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYmxlbmQoKmlkZW50aXR5T3BlcmF0
aW9uc1tpXSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdCwgYmxlbmRSb3RhdGlvblRvSWRlbnRpdHkpCit7CisgICAgVmVjdG9yPE93blB0cjxX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5T3BlcmF0aW9uczsKKyAgICBnZXRJZGVu
dGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5k
Um90YXRlKDAsIDAsIDEsIDM2MCk7CisKKyAgICAgICAgZG91YmxlIHByb2dyZXNzID0gMC41Owor
CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgICAgICBleHBl
Y3RlZC5yb3RhdGUzZCgwLCAwLCAxLCAxODApOworCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIGlkZW50aXR5T3BlcmF0aW9uc1tpXS0+YmxlbmQob3Bl
cmF0aW9ucywgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdCwgYmxlbmRUcmFuc2xhdGlvblRvSWRlbnRpdHkpCit7CisgICAgVmVjdG9yPE93blB0
cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5T3BlcmF0aW9uczsKKyAgICBnZXRJ
ZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9ucyk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kVHJhbnNsYXRlKDIsIDIsIDIpOworCisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsK
KworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhw
ZWN0ZWQudHJhbnNsYXRlM2QoMSwgMSwgMSk7CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShleHBlY3RlZCwgaWRlbnRpdHlPcGVyYXRpb25zW2ldLT5ibGVuZChvcGVy
YXRpb25zLCBwcm9ncmVzcykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRp
b25UZXN0LCBibGVuZFNjYWxlVG9JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50aXR5
T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRTY2Fs
ZSgzLCAzLCAzKTsKKworICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVkLnNjYWxl
M2QoMiwgMiwgMik7CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShl
eHBlY3RlZCwgaWRlbnRpdHlPcGVyYXRpb25zW2ldLT5ibGVuZChvcGVyYXRpb25zLCBwcm9ncmVz
cykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFNr
ZXdUb0lkZW50aXR5KQoreworICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9u
cz4gPiBpZGVudGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVu
dGl0eU9wZXJhdGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0eU9w
ZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zOworICAgICAgICBvcGVyYXRpb25zLmFwcGVuZFNrZXcoMiwgMik7CisKKyAgICAg
ICAgZG91YmxlIHByb2dyZXNzID0gMC41OworCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGV4cGVjdGVkOworICAgICAgICBleHBlY3RlZC5za2V3WCgxKTsKKyAgICAgICAgZXhwZWN0
ZWQuc2tld1koMSk7CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShl
eHBlY3RlZCwgaWRlbnRpdHlPcGVyYXRpb25zW2ldLT5ibGVuZChvcGVyYXRpb25zLCBwcm9ncmVz
cykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFBl
cnNwZWN0aXZlVG9JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0aW9u
cygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRl
bnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRQZXJzcGVjdGl2ZSgx
MDAwKTsKKworICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVkLmFwcGx5UGVyc3Bl
Y3RpdmUoNTAwICsgMC41ICogbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworCisgICAg
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIGlkZW50aXR5T3Bl
cmF0aW9uc1tpXS0+YmxlbmQob3BlcmF0aW9ucywgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160761</attachid>
            <date>2012-08-27 11:42:13 -0700</date>
            <delta_ts>2012-08-27 18:02:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94860-20120827144204.patch</filename>
            <type>text/plain</type>
            <size>37479</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBiY2E1YWQ4YWRiYjY3
YmI2MTllYThmN2NlNDU4ZGM3ZWVhNzYwOTE1Li5lZDNkY2VmNDIwNTgxZjE0MDczZWJkMjlkOTlk
YWRiMDE5MzdkOWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wOC0yNCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNob3VsZCBhY2NlbGVyYXRlIHJvdGF0aW9ucyBvZiA+PSAxODAgZGVncmVlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIGdlbmVyYWxpemluZyB0
aGUga2V5ZnJhbWUgaW50ZXJwb2xhdGlvbiwgaXQgYmVjYW1lIHVzZWZ1bCB0byBhcHBlbmQgYW4g
aWRlbnRpdHkgdHJhbnNmb3JtIG9wZXJhdGlvbiwKKyAgICAgICAgYW5kIHRvIGFzayBhIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb2JqZWN0IGlmIGl0IGlzSWRlbnRpdHkoKS4KKworICAgICAgICAq
IGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg6CisgICAgICAgIChXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zKToKKwogMjAxMi0wOC0yMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1l
c3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBXZWJBbmltYXRp
b25DdXJ2ZSBzdWJ0eXBlcyBpbnRvIHB1cmUgdmlydHVhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDAyZjUzYzMw
NWJkZTY4NWJlZjQ3YzBiMzEzZjVkMWU1ZjQxNTFmZDEuLjIzYWFlOGM0OGJmMWE3MGVhNWQ0NzMw
MmE1NDI4NDY2MmQ2ODI1MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxMi0wOC0y
NCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFNob3VsZCBhY2NlbGVyYXRlIHJvdGF0aW9ucyBvZiA+PSAxODAgZGVncmVlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24gbm93IHN0b3JlcyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gaW50ZXJwb2xhdGUKKyAgICAg
ICAgd2l0aG91dCByZXNvcnRpbmcgdG8gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmJsZW5kIHdo
aWNoIGlzIGJvdGgKKyAgICAgICAgZXhwZW5zaXZlLCBhbmQgaW4gdGhlIGNhc2Ugb2YgYmlnIHJv
dGF0aW9ucywgZXJyb3IgcHJvbmUuIEZvciBleGFtcGxlLAorICAgICAgICB3ZSBub3cgc3RvcmUg
dGhlIGF4aXMgYW5kIGFuZ2xlIGZvciByb3RhdGlvbnMsIHNvIGlmIHR3byByb3RhdGlvbnMgYXJl
CisgICAgICAgIGludGVycG9sYXRlZCwgYW5kIHRoZXkgYXJlIGFib3V0IHRoZSBzYW1lIGF4aXMs
IHdlIGNhbiBzaW1wbHkKKyAgICAgICAgaW50ZXJwb2xhdGUgdGhlIGFuZ2xlcy4KKworICAgICAg
ICBVbml0IHRlc3RzOgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QudHJhbnNm
b3JtVHlwZXNBcmVVbmlxdWUKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0Lm1h
dGNoVHlwZXNTYW1lTGVuZ3RoCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5p
ZGVudGl0eUFsd2F5c01hdGNoZXMKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0
LmxhcmdlUm90YXRpb25zV2l0aFNhbWVBeGlzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhTYW1lQXhpc0luRGlmZmVyZW50RGlyZWN0aW9uCisg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhEaWZm
ZXJlbnRBeGVzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFJvdGF0
aW9uRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVu
ZFRyYW5zbGF0aW9uRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdC5ibGVuZFNjYWxlRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5ibGVuZFNrZXdGcm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVGcm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUm90YXRpb25Ub0lkZW50aXR5CisgICAgICAgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFRyYW5zbGF0aW9uVG9JZGVudGl0eQorICAgICAg
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYmxlbmRTY2FsZVRvSWRlbnRpdHkKKyAgICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kU2tld1RvSWRlbnRpdHkKKyAgICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVUb0lkZW50aXR5
CisgICAgICAgICAgQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25XaXRoQmlnUm90YXRpb24KKyAgICAgICAgICBBbmltYXRpb25UcmFuc2xhdGlvblV0
aWxUZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlvbkFuZEVtcHR5VHJh
bnNmb3JtT3BlcmF0aW9uTGlzdAorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKHN0ZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYlRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgICAgQWRkZWQgeCB5IHogYW5k
IGFuZ2xlLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb246OmlzSWRlbnRp
dHkpOgorICAgICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGlzLT5tYXRyaXguaXNJZGVudGl0eSgp
CisgICAgICAgIChXZWJLaXQ6OmlzSWRlbnRpdHkpOgorICAgICAgICAgIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgYXJndW1lbnQgaXMgbnVsbCBvciAtPmlzSWRlbnRpdHkoKQorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6c2hhcmVTYW1lQXhpcyk6CisgICAgICAgICAgQSBoZWxwZXIg
ZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIHR3byB0cmFuc2Zvcm0gb3BlcmF0aW9ucworICAg
ICAgICAgIHNoYXJlIHRoZSBzYW1lIGF4aXMuIEFsc28gcmV0dXJucyB0aGUgYXhpcyBhbmQgJ2Zy
b20nIGFuZ2xlCisgICAgICAgICAgdG8gdXNlIGluIHRoZSBpbnRlcnBvbGF0aW9uIChpbiBjYXNl
IHRoZSBheGVzIHBvaW50IGluIGRpZmZlcmVudAorICAgICAgICAgIGRpcmVjdGlvbnMpLgorICAg
ICAgICAoV2ViS2l0OjpibGVuZERvdWJsZXMpOgorICAgICAgICAgIExpbmVhcmx5IGludGVycG9s
YXRlcyBkb3VibGVzLgorICAgICAgICAoV2ViS2l0OjpibGVuZFRyYW5zZm9ybU9wZXJhdGlvbnMp
OgorICAgICAgICAgIEJsZW5kcyB0d28gV2ViVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kKToKKyAgICAgICAg
ICBCbGVuZHMgdHdvIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb2JqZWN0cywgdGFraW5nIHNwZWNp
YWwgY2FyZQorICAgICAgICAgIHdoZW4gZWl0aGVyIGlzSWRlbnRpdHkoKS4KKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6bWF0Y2hlc1R5cGVzKToKKyAgICAgICAgICBX
YXMgY2hhbmdlZCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgaWRlbnRpdHkgdHJhbnNmb3JtIG9w
ZXJhdGlvbnMKKyAgICAgICAgICBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kVHJhbnNsYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRTa2V3KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRJZGVudGl0eSk6CisgICAgICAgICAgVGhl
ICdhcHBlbmQnIGZ1bmN0aW9ucyBhbGwgcG9wdWxhdGUgdGhlIG5ldyBtZW1iZXJzIGluCisgICAg
ICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zOjppc0lkZW50aXR5KToKKyAgICAgICAgICBSZXR1cm5zIGZhbHNlIGlmZiBh
bnkgb2YgaXRzIHRyYW5zZm9ybSBvcGVyYXRpb25zICFpc0lkZW50aXR5KCkuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgICAgUmVtb3ZlZCB0
aGUgPj0gMTgwIGRlZ3JlZSByZXN0cmljdGlvbi4KKwogMjAxMi0wOC0yNCAgQW5kcmV5IEFkYWlr
aW4gIDxhYW5kcmV5QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbV2Vi
R0xdIEltcGxlbWVudCBjdXN0b20gd3JhcCBmdW5jdGlvbnMgb24gR0wgY29udGV4dApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBmOTJlOWE3Zjk1ZjY5Nzc4MGQ3N2QwZTM1NWY5ODBjMjQ3
YWU3MTI4Li42NzQ4ZDc4OTcwZTQ3ZmMyMWM4YzQ2NTM2MDEyZmUyNDQxNGYxM2NjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA4LTI0ICBJYW4gVm9s
bGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2hvdWxk
IGFjY2VsZXJhdGUgcm90YXRpb25zIG9mID49IDE4MCBkZWdyZWVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDg2MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB1bml0IHRlc3RzOgorICAg
ICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QudHJhbnNmb3JtVHlwZXNBcmVVbmlxdWUK
KyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0Lm1hdGNoVHlwZXNTYW1lTGVuZ3Ro
CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5pZGVudGl0eUFsd2F5c01hdGNo
ZXMKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmxhcmdlUm90YXRpb25zV2l0
aFNhbWVBeGlzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0
aW9uc1dpdGhTYW1lQXhpc0luRGlmZmVyZW50RGlyZWN0aW9uCisgICAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhEaWZmZXJlbnRBeGVzCisgICAgICAg
ICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFJvdGF0aW9uRnJvbUlkZW50aXR5Cisg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFRyYW5zbGF0aW9uRnJvbUlk
ZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFNjYWxlRnJv
bUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFNrZXdG
cm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUGVy
c3BlY3RpdmVGcm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0
LmJsZW5kUm90YXRpb25Ub0lkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdC5ibGVuZFRyYW5zbGF0aW9uVG9JZGVudGl0eQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvblRlc3QuYmxlbmRTY2FsZVRvSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LmJsZW5kU2tld1RvSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVUb0lkZW50aXR5CisgICAgICAgICAgQW5pbWF0
aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90
YXRpb24KKyAgICAgICAgICBBbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LmNyZWF0ZVRyYW5z
Zm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlvbkFuZEVtcHR5VHJhbnNmb3JtT3BlcmF0aW9uTGlz
dAorCisgICAgICAgICogdGVzdHMvQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybU9wZXJh
dGlvbnNUZXN0LmNwcDoKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoZ2V0SWRlbnRpdHlPcGVy
YXRpb25zKToKKwogMjAxMi0wOC0yNCAgRGFuIENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBbVjhdIFJlZmFjdG9yIGF3YXkgSXNvbGF0ZWRXb3JsZApkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMu
aAppbmRleCBhNDk3YWFhNTU0OWQzNDA5OTdiODZmODc2M2Y2ZWRkYzYxOWJkZDk2Li5lNTY1YWU3
ZThhZTI2M2RiYTAzMDdkMDBhOWZiN2Q3N2Y1MThiMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaApAQCAt
NzQsNiArNzQsOSBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFNrZXco
ZG91YmxlIHgsIGRvdWJsZSB5KTsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kUGVyc3Bl
Y3RpdmUoZG91YmxlIGRlcHRoKTsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kTWF0cml4
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IGFwcGVuZElkZW50aXR5KCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNJZGVudGl0eSgp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFu
c2Zvcm1PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKaW5kZXggMTJiZDAwYjI2ZjQ4MGQxMzli
N2MyMjY5ZTI3NzNjY2Q3NjdmYzJlNC4uZTBjMjMwODkzYjdmMTQ5YmYzYTc4ZTM0YTkzOTlkNWJj
YzZkODMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCkBAIC0yNiw4
ICsyNiwxNSBAQAogCiAjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4K
IAorI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSB7Citjb25zdCBkb3VibGUgRVBTSUxPTiA9IDFl
LTQ7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uIHsKQEAgLTM3LDExICs0NCw0MyBAQCBzdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHsK
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGUsCiAgICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvblNrZXcsCiAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZl
LAotICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25NYXRyaXgKKyAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uTWF0cml4LAorICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0
eQogICAgIH07CiAKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24oKQorICAgICAgICA6IHR5cGUo
V2ViVHJhbnNmb3JtT3BlcmF0aW9uSWRlbnRpdHkpCisgICAgeworICAgIH0KKwogICAgIFR5cGUg
dHlwZTsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisKKyAgICB1bmlvbiB7
CisgICAgICAgIGRvdWJsZSBwZXJzcGVjdGl2ZURlcHRoOworCisgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICBkb3VibGUgeCwgeTsKKyAgICAgICAgfSBza2V3OworCisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICAgZG91YmxlIHgsIHksIHo7CisgICAgICAgIH0gc2NhbGU7CisKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6OworICAgICAgICB9IHRy
YW5zbGF0ZTsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgICAgICBkb3VibGUgeCwgeSwgejsKKyAgICAgICAgICAgIH0gYXhpczsKKworICAgICAg
ICAgICAgZG91YmxlIGFuZ2xlOworICAgICAgICB9IHJvdGF0ZTsKKyAgICB9OworCisgICAgYm9v
bCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbWF0cml4LmlzSWRlbnRpdHkoKTsgfQogfTsK
IAogY2xhc3MgV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1ByaXZhdGUgewpAQCAtNTcsMTMgKzk2LDE2
NSBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBs
eSgpIGNvbnN0CiAgICAgcmV0dXJuIHRvUmV0dXJuOwogfQogCitzdGF0aWMgYm9vbCBpc0lkZW50
aXR5KGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uKQoreworICAgIHJldHVy
biAhb3BlcmF0aW9uIHx8IG9wZXJhdGlvbi0+aXNJZGVudGl0eSgpOworfQorCitzdGF0aWMgYm9v
bCBzaGFyZVNhbWVBeGlzKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3Qg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgZG91YmxlJiBheGlzWCwgZG91YmxlJiBheGlzWSwg
ZG91YmxlJiBheGlzWiwgZG91YmxlJiBhbmdsZUZyb20pCit7CisgICAgaWYgKGlzSWRlbnRpdHko
ZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChpc0lkZW50aXR5KGZyb20pICYmICFpc0lkZW50aXR5KHRvKSkgeworICAgICAgICBheGlzWCA9
IHRvLT5yb3RhdGUuYXhpcy54OworICAgICAgICBheGlzWSA9IHRvLT5yb3RhdGUuYXhpcy55Owor
ICAgICAgICBheGlzWiA9IHRvLT5yb3RhdGUuYXhpcy56OworICAgICAgICBhbmdsZUZyb20gPSAw
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWlzSWRlbnRpdHkoZnJv
bSkgJiYgaXNJZGVudGl0eSh0bykpIHsKKyAgICAgICAgYXhpc1ggPSBmcm9tLT5yb3RhdGUuYXhp
cy54OworICAgICAgICBheGlzWSA9IGZyb20tPnJvdGF0ZS5heGlzLnk7CisgICAgICAgIGF4aXNa
ID0gZnJvbS0+cm90YXRlLmF4aXMuejsKKyAgICAgICAgYW5nbGVGcm9tID0gZnJvbS0+cm90YXRl
LmFuZ2xlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgbGVuZ3Ro
MiA9IGZyb20tPnJvdGF0ZS5heGlzLnggKiBmcm9tLT5yb3RhdGUuYXhpcy54ICsgZnJvbS0+cm90
YXRlLmF4aXMueSAqIGZyb20tPnJvdGF0ZS5heGlzLnkgKyBmcm9tLT5yb3RhdGUuYXhpcy56ICog
ZnJvbS0+cm90YXRlLmF4aXMuejsKKyAgICBkb3VibGUgb3RoZXJMZW5ndGgyID0gdG8tPnJvdGF0
ZS5heGlzLnggKiB0by0+cm90YXRlLmF4aXMueCArIHRvLT5yb3RhdGUuYXhpcy55ICogdG8tPnJv
dGF0ZS5heGlzLnkgKyB0by0+cm90YXRlLmF4aXMueiAqIHRvLT5yb3RhdGUuYXhpcy56OworCisg
ICAgaWYgKGxlbmd0aDIgPD0gRVBTSUxPTiB8fCBvdGhlckxlbmd0aDIgPD0gRVBTSUxPTikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG91YmxlIGRvdCA9IHRvLT5yb3RhdGUuYXhpcy54
ICogZnJvbS0+cm90YXRlLmF4aXMueCArIHRvLT5yb3RhdGUuYXhpcy55ICogZnJvbS0+cm90YXRl
LmF4aXMueSArIHRvLT5yb3RhdGUuYXhpcy56ICogZnJvbS0+cm90YXRlLmF4aXMuejsKKyAgICBk
b3VibGUgZXJyb3IgPSBmYWJzKDEuMCAtIChkb3QgKiBkb3QpIC8gKGxlbmd0aDIgKiBvdGhlckxl
bmd0aDIpKTsKKyAgICBib29sIHJlc3VsdCA9IGVycm9yIDwgRVBTSUxPTjsKKyAgICBpZiAocmVz
dWx0KSB7CisgICAgICAgIGF4aXNYID0gdG8tPnJvdGF0ZS5heGlzLng7CisgICAgICAgIGF4aXNZ
ID0gdG8tPnJvdGF0ZS5heGlzLnk7CisgICAgICAgIGF4aXNaID0gdG8tPnJvdGF0ZS5heGlzLno7
CisgICAgICAgIC8vIElmIHRoZSBheGVzIGFyZSBwb2ludGluZyBpbiBvcHBvc2l0ZSBkaXJlY3Rp
b25zLCB3ZSBuZWVkIHRvIHJldmVyc2UKKyAgICAgICAgLy8gdGhlIGFuZ2xlLgorICAgICAgICBh
bmdsZUZyb20gPSBkb3QgPiAwID8gZnJvbS0+cm90YXRlLmFuZ2xlIDogLWZyb20tPnJvdGF0ZS5h
bmdsZTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGRvdWJsZSBibGVu
ZERvdWJsZXMoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAg
IHJldHVybiBmcm9tICogKDEgLSBwcm9ncmVzcykgKyB0byAqIHByb2dyZXNzOworfQorCitzdGF0
aWMgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmRUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
KiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRv
UmV0dXJuOworCisgICAgaWYgKGlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpCisg
ICAgICAgIHJldHVybiB0b1JldHVybjsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6VHlw
ZSBpbnRlcnBvbGF0aW9uVHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uSWRlbnRpdHk7CisgICAgaWYgKGlzSWRlbnRpdHkodG8pKQorICAgICAgICBpbnRl
cnBvbGF0aW9uVHlwZSA9IGZyb20tPnR5cGU7CisgICAgZWxzZQorICAgICAgICBpbnRlcnBvbGF0
aW9uVHlwZSA9IHRvLT50eXBlOworCisgICAgc3dpdGNoIChpbnRlcnBvbGF0aW9uVHlwZSkgewor
ICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFu
c2xhdGU6IHsKKyAgICAgICAgZG91YmxlIGZyb21YID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBm
cm9tLT50cmFuc2xhdGUueDsKKyAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9t
KSA/IDAgOiBmcm9tLT50cmFuc2xhdGUueTsKKyAgICAgICAgZG91YmxlIGZyb21aID0gaXNJZGVu
dGl0eShmcm9tKSA/IDAgOiBmcm9tLT50cmFuc2xhdGUuejsKKyAgICAgICAgZG91YmxlIHRvWCA9
IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT50cmFuc2xhdGUueDsKKyAgICAgICAgZG91YmxlIHRv
WSA9IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT50cmFuc2xhdGUueTsKKyAgICAgICAgZG91Ymxl
IHRvWiA9IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT50cmFuc2xhdGUuejsKKyAgICAgICAgdG9S
ZXR1cm4udHJhbnNsYXRlM2QoYmxlbmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dyZXNzKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21ZLCB0b1ksIHByb2dy
ZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21aLCB0
b1osIHByb2dyZXNzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRlOiB7CisgICAgICAgIGRv
dWJsZSBheGlzWCA9IDA7CisgICAgICAgIGRvdWJsZSBheGlzWSA9IDA7CisgICAgICAgIGRvdWJs
ZSBheGlzWiA9IDE7CisgICAgICAgIGRvdWJsZSBmcm9tQW5nbGUgPSAwOworICAgICAgICBkb3Vi
bGUgdG9BbmdsZSA9IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT5yb3RhdGUuYW5nbGU7CisgICAg
ICAgIGlmIChzaGFyZVNhbWVBeGlzKGZyb20sIHRvLCBheGlzWCwgYXhpc1ksIGF4aXNaLCBmcm9t
QW5nbGUpKQorICAgICAgICAgICAgdG9SZXR1cm4ucm90YXRlM2QoYXhpc1gsIGF4aXNZLCBheGlz
WiwgYmxlbmREb3VibGVzKGZyb21BbmdsZSwgdG9BbmdsZSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeDsKKyAg
ICAgICAgICAgIGlmICghaXNJZGVudGl0eSh0bykpCisgICAgICAgICAgICAgICAgdG9NYXRyaXgg
PSB0by0+bWF0cml4OworICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1h
dHJpeDsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGl0eShmcm9tKSkKKyAgICAgICAgICAgICAg
ICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0cml4OworICAgICAgICAgICAgdG9SZXR1cm4gPSB0b01h
dHJpeDsKKyAgICAgICAgICAgIHRvUmV0dXJuLmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1P
cGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNjYWxlOiB7CisgICAgICAgIGRvdWJsZSBm
cm9tWCA9IGlzSWRlbnRpdHkoZnJvbSkgPyAxIDogZnJvbS0+c2NhbGUueDsKKyAgICAgICAgZG91
YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDEgOiBmcm9tLT5zY2FsZS55OworICAgICAg
ICBkb3VibGUgZnJvbVogPSBpc0lkZW50aXR5KGZyb20pID8gMSA6IGZyb20tPnNjYWxlLno7Cisg
ICAgICAgIGRvdWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/IDEgOiB0by0+c2NhbGUueDsKKyAg
ICAgICAgZG91YmxlIHRvWSA9IGlzSWRlbnRpdHkodG8pID8gMSA6IHRvLT5zY2FsZS55OworICAg
ICAgICBkb3VibGUgdG9aID0gaXNJZGVudGl0eSh0bykgPyAxIDogdG8tPnNjYWxlLno7CisgICAg
ICAgIHRvUmV0dXJuLnNjYWxlM2QoYmxlbmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dyZXNzKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZERvdWJsZXMoZnJvbVksIHRvWSwgcHJvZ3Jl
c3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRG91Ymxlcyhmcm9tWiwgdG9aLCBw
cm9ncmVzcykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1P
cGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNrZXc6IHsKKyAgICAgICAgZG91YmxlIGZy
b21YID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT5za2V3Lng7CisgICAgICAgIGRvdWJs
ZSBmcm9tWSA9IGlzSWRlbnRpdHkoZnJvbSkgPyAwIDogZnJvbS0+c2tldy55OworICAgICAgICBk
b3VibGUgdG9YID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnNrZXcueDsKKyAgICAgICAgZG91
YmxlIHRvWSA9IGlzSWRlbnRpdHkodG8pID8gMCA6IHRvLT5za2V3Lnk7CisgICAgICAgIHRvUmV0
dXJuLnNrZXdYKGJsZW5kRG91Ymxlcyhmcm9tWCwgdG9YLCBwcm9ncmVzcykpOworICAgICAgICB0
b1JldHVybi5za2V3WShibGVuZERvdWJsZXMoZnJvbVksIHRvWSwgcHJvZ3Jlc3MpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25QZXJzcGVjdGl2ZTogeworICAgICAgICBkb3VibGUgZnJvbVBlcnNwZWN0
aXZlRGVwdGggPSBpc0lkZW50aXR5KGZyb20pID8gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4
KCkgOiBmcm9tLT5wZXJzcGVjdGl2ZURlcHRoOworICAgICAgICBkb3VibGUgdG9QZXJzcGVjdGl2
ZURlcHRoID0gaXNJZGVudGl0eSh0bykgPyBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSA6
IHRvLT5wZXJzcGVjdGl2ZURlcHRoOworICAgICAgICB0b1JldHVybi5hcHBseVBlcnNwZWN0aXZl
KGJsZW5kRG91Ymxlcyhmcm9tUGVyc3BlY3RpdmVEZXB0aCwgdG9QZXJzcGVjdGl2ZURlcHRoLCBw
cm9ncmVzcykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1P
cGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvbk1hdHJpeDogeworICAgICAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeDsKKyAgICAgICAgaWYgKCFpc0lkZW50aXR5KHRvKSkK
KyAgICAgICAgICAgIHRvTWF0cml4ID0gdG8tPm1hdHJpeDsKKyAgICAgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggZnJvbU1hdHJpeDsKKyAgICAgICAgaWYgKCFpc0lkZW50aXR5KGZyb20pKQor
ICAgICAgICAgICAgZnJvbU1hdHJpeCA9IGZyb20tPm1hdHJpeDsKKyAgICAgICAgdG9SZXR1cm4g
PSB0b01hdHJpeDsKKyAgICAgICAgdG9SZXR1cm4uYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3Mp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246
OldlYlRyYW5zZm9ybU9wZXJhdGlvbklkZW50aXR5OgorICAgICAgICAvLyBEbyBub3RoaW5nLgor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdG9SZXR1cm47Cit9CisKIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kKGNvbnN0IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKIHsKICAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1JldHVybjsKKyAgICBib29sIGZyb21JZGVudGl0
eSA9IGZyb20uaXNJZGVudGl0eSgpOworICAgIGJvb2wgdG9JZGVudGl0eSA9IGlzSWRlbnRpdHko
KTsKKyAgICBpZiAoZnJvbUlkZW50aXR5ICYmIHRvSWRlbnRpdHkpCisgICAgICAgIHJldHVybiB0
b1JldHVybjsKKwogICAgIGlmIChtYXRjaGVzVHlwZXMoZnJvbSkpIHsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kZWQgPSBtX3ByaXZhdGUtPm9w
ZXJhdGlvbnNbaV0ubWF0cml4OwotICAgICAgICAgICAgYmxlbmRlZC5ibGVuZChmcm9tLm1fcHJp
dmF0ZS0+b3BlcmF0aW9uc1tpXS5tYXRyaXgsIHByb2dyZXNzKTsKKyAgICAgICAgc2l6ZV90IG51
bU9wZXJhdGlvbnMgPSBtYXgoZnJvbUlkZW50aXR5ID8gMCA6IGZyb20ubV9wcml2YXRlLT5vcGVy
YXRpb25zLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9JZGVu
dGl0eSA/IDAgOiBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1PcGVyYXRpb25zOyArK2kpIHsKKyAgICAgICAgICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGJsZW5kZWQgPSBibGVuZFRyYW5zZm9ybU9wZXJhdGlvbnMoCisg
ICAgICAgICAgICAgICAgZnJvbUlkZW50aXR5ID8gMCA6ICZmcm9tLm1fcHJpdmF0ZS0+b3BlcmF0
aW9uc1tpXSwKKyAgICAgICAgICAgICAgICB0b0lkZW50aXR5ID8gMCA6ICZtX3ByaXZhdGUtPm9w
ZXJhdGlvbnNbaV0sCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3MpOwogICAgICAgICAgICAgdG9S
ZXR1cm4ubXVsdGlwbHkoYmxlbmRlZCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtNzYs
MTEgKzI2NywxNiBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zOjpibGVuZChjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpbwogCiBib29sIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnM6Om1hdGNoZXNUeXBlcyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBv
dGhlcikgY29uc3QKIHsKKyAgICBpZiAoaXNJZGVudGl0eSgpIHx8IG90aGVyLmlzSWRlbnRpdHko
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAobV9wcml2YXRlLT5vcGVyYXRpb25z
LnNpemUoKSAhPSBvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3Bl
cmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9wcml2YXRlLT5vcGVyYXRpb25z
W2ldLnR5cGUgIT0gb3RoZXIubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLnR5cGUpCisgICAgICAg
IGlmIChtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZSAhPSBvdGhlci5tX3ByaXZhdGUtPm9w
ZXJhdGlvbnNbaV0udHlwZQorICAgICAgICAgICAgJiYgIW1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tp
XS5pc0lkZW50aXR5KCkKKyAgICAgICAgICAgICYmICFvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlv
bnNbaV0uaXNJZGVudGl0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApA
QCAtOTIsNiArMjg4LDkgQEAgdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRUcmFu
c2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikKICAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24gdG9BZGQ7CiAgICAgdG9BZGQubWF0cml4LnRyYW5zbGF0ZTNkKHgsIHksIHopOwogICAg
IHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlv
blRyYW5zbGF0ZTsKKyAgICB0b0FkZC50cmFuc2xhdGUueCA9IHg7CisgICAgdG9BZGQudHJhbnNs
YXRlLnkgPSB5OworICAgIHRvQWRkLnRyYW5zbGF0ZS56ID0gejsKICAgICBtX3ByaXZhdGUtPm9w
ZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKIH0KIApAQCAtMTAwLDYgKzI5OSwxMCBAQCB2b2lkIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFJvdGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRv
dWJsZSB6LCBkb3VibGUgZAogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKICAgICB0
b0FkZC5tYXRyaXgucm90YXRlM2QoeCwgeSwgeiwgZGVncmVlcyk7CiAgICAgdG9BZGQudHlwZSA9
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRlOworICAg
IHRvQWRkLnJvdGF0ZS5heGlzLnggPSB4OworICAgIHRvQWRkLnJvdGF0ZS5heGlzLnkgPSB5Owor
ICAgIHRvQWRkLnJvdGF0ZS5heGlzLnogPSB6OworICAgIHRvQWRkLnJvdGF0ZS5hbmdsZSA9IGRl
Z3JlZXM7CiAgICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7CiB9CiAKQEAg
LTEwOCw2ICszMTEsOSBAQCB2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFNjYWxl
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
IHRvQWRkOwogICAgIHRvQWRkLm1hdHJpeC5zY2FsZTNkKHgsIHksIHopOwogICAgIHRvQWRkLnR5
cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNjYWxlOwor
ICAgIHRvQWRkLnNjYWxlLnggPSB4OworICAgIHRvQWRkLnNjYWxlLnkgPSB5OworICAgIHRvQWRk
LnNjYWxlLnogPSB6OwogICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwog
fQogCkBAIC0xMTcsNiArMzIzLDggQEAgdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBl
bmRTa2V3KGRvdWJsZSB4LCBkb3VibGUgeSkKICAgICB0b0FkZC5tYXRyaXguc2tld1goeCk7CiAg
ICAgdG9BZGQubWF0cml4LnNrZXdZKHkpOwogICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1P
cGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNrZXc7CisgICAgdG9BZGQuc2tldy54ID0g
eDsKKyAgICB0b0FkZC5za2V3LnkgPSB5OwogICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBl
bmQodG9BZGQpOwogfQogCkBAIC0xMjUsNiArMzMzLDcgQEAgdm9pZCBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zOjphcHBlbmRQZXJzcGVjdGl2ZShkb3VibGUgZGVwdGgpCiAgICAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uIHRvQWRkOwogICAgIHRvQWRkLm1hdHJpeC5hcHBseVBlcnNwZWN0aXZlKGRlcHRo
KTsKICAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1P
cGVyYXRpb25QZXJzcGVjdGl2ZTsKKyAgICB0b0FkZC5wZXJzcGVjdGl2ZURlcHRoID0gZGVwdGg7
CiAgICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7CiB9CiAKQEAgLTEzNiw2
ICszNDUsMjAgQEAgdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRNYXRyaXgoY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKICAgICBtX3ByaXZhdGUtPm9wZXJh
dGlvbnMuYXBwZW5kKHRvQWRkKTsKIH0KIAordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjph
cHBlbmRJZGVudGl0eSgpCit7CisgICAgbV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZChXZWJU
cmFuc2Zvcm1PcGVyYXRpb24oKSk7Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6
aXNJZGVudGl0eSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZh
dGUtPm9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3ByaXZhdGUtPm9w
ZXJhdGlvbnNbaV0uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpy
ZXNldCgpCiB7CiAgICAgbV9wcml2YXRlLnJlc2V0KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGls
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlv
blRyYW5zbGF0aW9uVXRpbC5jcHAKaW5kZXggODA2NGFlMzhlZDIwNjdmMTMwNTE1OTdmNGI2OTc5
NGZjNDJmYWQ0YS4uN2E3ZDcxN2Q3ZjRmOGZmNmExYmIzNzZhOGFmZWVlNGJlZjdhNDUyNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0
aW9uVHJhbnNsYXRpb25VdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCkBAIC0xMTMsOCArMTEz
LDEwIEBAIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRyYW5zCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6CisgICAgICAg
ICAgICB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmFwcGVuZElkZW50aXR5KCk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6Ci0gICAgICAg
ICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICAgICAgLy8gZG8gbm90aGluZy4KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9IC8vIHN3aXRjaAogICAgIH0gLy8gZm9yIGVhY2ggb3BlcmF0
aW9uCkBAIC0xNDUsNTEgKzE0Nyw5IEBAIGJvb2wgaXNSb3RhdGlvblR5cGUoVHJhbnNmb3JtT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHRyYW5zZm9ybVR5cGUpCiAgICAgICAgIHx8IHRyYW5zZm9y
bVR5cGUgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q7CiB9CiAKLWJvb2wgY2F1c2Vz
Um90YXRpb25PZkF0TGVhc3QxODBEZWdyZWVzKGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
KiB2YWx1ZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIGxhc3RWYWx1ZSkKLXsKLSAg
ICBpZiAoIWxhc3RWYWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0aW9ucyA9ICp2YWx1ZS0+dmFsdWUoKTsKLSAgICBjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBsYXN0T3BlcmF0aW9ucyA9ICpsYXN0VmFsdWUtPnZhbHVl
KCk7Ci0KLSAgICAvLyBXZSdsbCBiZSBkb2luZyBtYXRyaXggaW50ZXJwb2xhdGlvbiBpbiB0aGlz
IGNhc2UuIE5vIHJpc2sgb2YgaW5jb3JyZWN0IHJvdGF0aW9ucyBoZXJlLgotICAgIGlmIChvcGVy
YXRpb25zLnNpemUoKSAmJiBsYXN0T3BlcmF0aW9ucy5zaXplKCkgJiYgIW9wZXJhdGlvbnMub3Bl
cmF0aW9uc01hdGNoKGxhc3RPcGVyYXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgc2l6ZV90IG51bU9wZXJhdGlvbnMgPSBtYXgob3BlcmF0aW9ucy5zaXplKCksIGxhc3RPcGVy
YXRpb25zLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PcGVyYXRpb25z
OyArK2kpIHsKLSAgICAgICAgZmxvYXQgYW5nbGUgPSAwOwotICAgICAgICBpZiAoaSA8IG9wZXJh
dGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzUm90YXRpb25UeXBlKG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpW2ldLT5nZXRPcGVyYXRpb25UeXBlKCkpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHJvdGF0
aW9uID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9ucy5v
cGVyYXRpb25zKClbaV0uZ2V0KCkpOwotICAgICAgICAgICAgYW5nbGUgPSByb3RhdGlvbi0+YW5n
bGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGxhc3RBbmdsZSA9IDA7Ci0gICAgICAg
IGlmIChpIDwgbGFzdE9wZXJhdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzUm90
YXRpb25UeXBlKGxhc3RPcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtpXS0+Z2V0T3BlcmF0aW9uVHlw
ZSgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uKiBsYXN0Um90YXRpb24gPSBzdGF0aWNfY2FzdDxSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb24qPihsYXN0T3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0uZ2V0KCkpOwotICAg
ICAgICAgICAgbGFzdEFuZ2xlID0gbGFzdFJvdGF0aW9uLT5hbmdsZSgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGZhYnMoYW5nbGUgLSBsYXN0QW5nbGUpID49IDE4MCkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdGVtcGxhdGUg
PD4KIGJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zv
cm1BbmltYXRpb25WYWx1ZSwgV2ViVHJhbnNmb3JtS2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlPihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlU
aW1lLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKiBsYXN0VmFsdWUsIFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgYm94
U2l6ZSkKIHsKLSAgICBpZiAoY2F1c2VzUm90YXRpb25PZkF0TGVhc3QxODBEZWdyZWVzKHZhbHVl
LCBsYXN0VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52
YWx1ZSgpLCBib3hTaXplKTsKICAgICBpZiAob3BlcmF0aW9ucy5hcHBseSgpLmlzSW52ZXJ0aWJs
ZSgpKSB7CiAgICAgICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwg
b3BlcmF0aW9ucyksIHRpbWluZ0Z1bmN0aW9uVHlwZSk7CkBAIC0yMDEsOSArMTYxLDYgQEAgYm9v
bCBhcHBlbmRLZXlmcmFtZVdpdGhTdGFuZGFyZFRpbWluZ0Z1bmN0aW9uPFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlLCBXZWJUcmFuc2YKIHRlbXBsYXRlIDw+CiBib29sIGFwcGVuZEtleWZyYW1lV2l0
aEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBXZWJU
cmFuc2Zvcm1LZXlmcmFtZSwgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFu
aW1hdGlvblZhbHVlKiB2YWx1ZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIGxhc3RW
YWx1ZSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBjb25zdCBG
bG9hdFNpemUmIGJveFNpemUpCiB7Ci0gICAgaWYgKGNhdXNlc1JvdGF0aW9uT2ZBdExlYXN0MTgw
RGVncmVlcyh2YWx1ZSwgbGFzdFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRp
b25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7CiAgICAgaWYgKG9wZXJhdGlvbnMuYXBwbHko
KS5pc0ludmVydGlibGUoKSkgewogICAgICAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKGtleVRpbWUsIG9wZXJhdGlvbnMpLCB4MSwgeTEsIHgyLCB5Mik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbFRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9BbmltYXRpb25UcmFuc2xhdGlvblV0
aWxUZXN0LmNwcAppbmRleCA3MGRhNjVlZjY1ZThhYWIzODU1ZjQ4YWZjNWI0OWQyODIyYzM5MTQ4
Li5lYTdkZmI3YmMzYTIzOTQ3MmVmNzU1NzVlMTJhMWFkMjM3OWI0OTEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbFRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQW5pbWF0aW9uVHJhbnNsYXRp
b25VdGlsVGVzdC5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgVEVTVChBbmltYXRpb25UcmFuc2xhdGlv
blV0aWxUZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRpb24pCiAgICAg
UmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKICAgICBh
bmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKIAotICAgIEVYUEVDVF9GQUxTRShhbmlt
YXRpb25DYW5CZVRyYW5zbGF0ZWQodmFsdWVzLCBhbmltYXRpb24uZ2V0KCkpKTsKKyAgICBFWFBF
Q1RfVFJVRShhbmltYXRpb25DYW5CZVRyYW5zbGF0ZWQodmFsdWVzLCBhbmltYXRpb24uZ2V0KCkp
KTsKIH0KIAogVEVTVChBbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LCBjcmVhdGVUcmFuc2Zv
cm1BbmltYXRpb25XaXRoQmlnUm90YXRpb25BbmRFbXB0eVRyYW5zZm9ybU9wZXJhdGlvbkxpc3Qp
CkBAIC0xMTQsNyArMTE0LDcgQEAgVEVTVChBbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LCBj
cmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRpb25BbmRFbXAKICAgICBSZWZQdHI8
QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZSgpOwogICAgIGFuaW1hdGlv
bi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwogCi0gICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbkNh
bkJlVHJhbnNsYXRlZCh2YWx1ZXMsIGFuaW1hdGlvbi5nZXQoKSkpOworICAgIEVYUEVDVF9UUlVF
KGFuaW1hdGlvbkNhbkJlVHJhbnNsYXRlZCh2YWx1ZXMsIGFuaW1hdGlvbi5nZXQoKSkpOwogfQog
CiBURVNUKEFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbFRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbldpdGhSb3RhdGlvbkludm9sdmluZ05lZ2F0aXZlQW5nbGVzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0
LmNwcAppbmRleCBkZWFmN2FkNzRmNTMyOTFlZjViNDFhYWUxMDllZDI3MTgwZWYwZDllLi45ZTRm
NzVhM2NlYjhlMDkyZmY2ZWI0Nzg2ZDcwMGU4NWQ2Mzk1OGY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0
LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCit1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIAogVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCB0cmFuc2Zvcm1U
eXBlc0FyZVVuaXF1ZSkKQEAgLTQyLDE5ICs0MywxOSBAQCBURVNUKFdlYlRyYW5zZm9ybU9wZXJh
dGlvblRlc3QsIHRyYW5zZm9ybVR5cGVzQXJlVW5pcXVlKQogICAgIFZlY3RvcjxPd25QdHI8V2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucz4gPiB0cmFuc2Zvcm1zOwogCiAgICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyogdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAgIHRvQWRk
LT5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgdG9BZGQtPmFwcGVuZFRyYW5zbGF0ZSgx
LCAwLCAwKTsKICAgICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOwogCiAgICAg
dG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAgIHRvQWRkLT5hcHBlbmRS
b3RhdGUoMCwgMCwgMSwgMCk7CisgICAgdG9BZGQtPmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAyKTsK
ICAgICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOwogCiAgICAgdG9BZGQgPSBu
ZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAgIHRvQWRkLT5hcHBlbmRTY2FsZSgxLCAx
LCAxKTsKKyAgICB0b0FkZC0+YXBwZW5kU2NhbGUoMiwgMiwgMik7CiAgICAgdHJhbnNmb3Jtcy5h
cHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKIAogICAgIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMoKTsKLSAgICB0b0FkZC0+YXBwZW5kU2tldygwLCAwKTsKKyAgICB0b0FkZC0+YXBw
ZW5kU2tldygxLCAwKTsKICAgICB0cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOwog
CiAgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOwpAQCAtNzIsMTkgKzcz
LDE5IEBAIFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgdHJhbnNmb3JtVHlwZXNBcmVV
bmlxdWUpCiBURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIG1hdGNoVHlwZXNTYW1lTGVu
Z3RoKQogewogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdHJhbnNsYXRlczsKLSAgICB0cmFu
c2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKLSAgICB0cmFuc2xhdGVzLmFwcGVuZFRy
YW5zbGF0ZSgwLCAwLCAwKTsKLSAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAw
KTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICB0cmFuc2xh
dGVzLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5z
bGF0ZSgxLCAwLCAwKTsKIAogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgc2tld3M7Ci0gICAg
c2tld3MuYXBwZW5kU2tldygwLCAwKTsKLSAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOwotICAg
IHNrZXdzLmFwcGVuZFNrZXcoMCwgMCk7CisgICAgc2tld3MuYXBwZW5kU2tldygwLCAyKTsKKyAg
ICBza2V3cy5hcHBlbmRTa2V3KDAsIDIpOworICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMik7CiAK
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zbGF0ZXMyOwotICAgIHRyYW5zbGF0ZXMy
LmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKLSAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xh
dGUoMCwgMCwgMCk7Ci0gICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwor
ICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAyLCAwKTsKKyAgICB0cmFuc2xhdGVz
Mi5hcHBlbmRUcmFuc2xhdGUoMCwgMiwgMCk7CisgICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNs
YXRlKDAsIDIsIDApOwogCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2xhdGVzMyA9
IHRyYW5zbGF0ZXMyOwogCkBAIC05NiwyMiArOTcsODQgQEAgVEVTVChXZWJUcmFuc2Zvcm1PcGVy
YXRpb25UZXN0LCBtYXRjaFR5cGVzU2FtZUxlbmd0aCkKIFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdCwgbWF0Y2hUeXBlc0RpZmZlcmVudExlbmd0aCkKIHsKICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIHRyYW5zbGF0ZXM7Ci0gICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwg
MCwgMCk7Ci0gICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Ci0gICAgdHJh
bnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRU
cmFuc2xhdGUoMSwgMCwgMCk7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMSwgMCwg
MCk7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CiAKICAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIHNrZXdzOwotICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMCk7Ci0g
ICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKKyAgICBza2V3cy5hcHBlbmRTa2V3KDIsIDApOwor
ICAgIHNrZXdzLmFwcGVuZFNrZXcoMiwgMCk7CiAKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IHRyYW5zbGF0ZXMyOwotICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsK
LSAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgdHJhbnNsYXRl
czIuYXBwZW5kVHJhbnNsYXRlKDAsIDIsIDApOworICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5z
bGF0ZSgwLCAyLCAwKTsKIAogICAgIEVYUEVDVF9GQUxTRSh0cmFuc2xhdGVzLm1hdGNoZXNUeXBl
cyhza2V3cykpOwogICAgIEVYUEVDVF9GQUxTRSh0cmFuc2xhdGVzLm1hdGNoZXNUeXBlcyh0cmFu
c2xhdGVzMikpOwogfQogCit2b2lkIGdldElkZW50aXR5T3BlcmF0aW9ucyhWZWN0b3I8T3duUHRy
PFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4qIG9wZXJhdGlvbnMpCit7CisgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyogdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAg
IG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRUcmFuc2xhdGUoMCwg
MCwgMCk7CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0
b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFRy
YW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0b0FkZC0+YXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwor
ICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBu
ZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRTY2FsZSgxLCAx
LCAxKTsKKyAgICBvcGVyYXRpb25zLT5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRv
QWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kU2Nh
bGUoMSwgMSwgMSk7CisgICAgdG9BZGQtPmFwcGVuZFNjYWxlKDEsIDEsIDEpOworICAgIG9wZXJh
dGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRTa2V3KDAsIDApOworICAgIG9w
ZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRTa2V3KDAsIDApOworICAg
IHRvQWRkLT5hcHBlbmRTa2V3KDAsIDApOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0
cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOwor
ICAgIHRvQWRkLT5hcHBlbmRSb3RhdGUoMCwgMCwgMSwgMCk7CisgICAgb3BlcmF0aW9ucy0+YXBw
ZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAwKTsKKyAgICB0b0Fk
ZC0+YXBwZW5kUm90YXRlKDAsIDAsIDEsIDApOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9w
dFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygp
OworICAgIHRvQWRkLT5hcHBlbmRNYXRyaXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Cisg
ICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5l
dyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZE1hdHJpeChXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKyAgICB0b0FkZC0+YXBwZW5kTWF0cml4KFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4KCkpOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0Fk
ZCkpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGlkZW50aXR5QWx3YXlz
TWF0Y2hlcykKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4g
b3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJm9wZXJhdGlvbnMpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgb3BlcmF0aW9ucy5zaXplKCk7ICsraikKKyAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKG9wZXJhdGlvbnNbaV0tPm1hdGNoZXNUeXBlcygqb3BlcmF0aW9u
c1tqXSkpOworICAgIH0KK30KKwogVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBhcHBs
eVRyYW5zbGF0ZSkKIHsKICAgICBkb3VibGUgeCA9IDE7CkBAIC0zMzksMyArNDAyLDIzOCBAQCBU
RVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kV2hlblR5cGVzRG9Ob3RNYXRjaCkK
IAogICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlv
bnNUby5ibGVuZChvcGVyYXRpb25zRnJvbSwgcHJvZ3Jlc3MpKTsKIH0KKworVEVTVChXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LCBsYXJnZVJvdGF0aW9uc1dpdGhTYW1lQXhpcykKK3sKKyAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNGcm9tOworICAgIG9wZXJhdGlvbnNGcm9t
LmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAwKTsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uc1RvOworICAgIG9wZXJhdGlvbnNUby5hcHBlbmRSb3RhdGUoMCwgMCwgMiwgMzYw
KTsKKworICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGV4cGVjdGVkOworICAgIGV4cGVjdGVkLnJvdGF0ZTNkKDAsIDAsIDEsIDE4MCk7CisK
KyAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25z
VG8uYmxlbmQob3BlcmF0aW9uc0Zyb20sIHByb2dyZXNzKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNm
b3JtT3BlcmF0aW9uVGVzdCwgbGFyZ2VSb3RhdGlvbnNXaXRoU2FtZUF4aXNJbkRpZmZlcmVudERp
cmVjdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNGcm9tOwor
ICAgIG9wZXJhdGlvbnNGcm9tLmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAxODApOworCisgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zVG87CisgICAgb3BlcmF0aW9uc1RvLmFwcGVu
ZFJvdGF0ZSgwLCAwLCAtMSwgMTgwKTsKKworICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKwor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworCisgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9uc1RvLmJsZW5kKG9wZXJhdGlv
bnNGcm9tLCBwcm9ncmVzcykpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3Qs
IGxhcmdlUm90YXRpb25zV2l0aERpZmZlcmVudEF4ZXMpCit7CisgICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zRnJvbTsKKyAgICBvcGVyYXRpb25zRnJvbS5hcHBlbmRSb3RhdGUo
MCwgMCwgMSwgMTgwKTsKKworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc1Rv
OworICAgIG9wZXJhdGlvbnNUby5hcHBlbmRSb3RhdGUoMCwgMSwgMCwgMTgwKTsKKworICAgIGRv
dWJsZSBwcm9ncmVzcyA9IDAuNTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXhG
cm9tOworICAgIG1hdHJpeEZyb20ucm90YXRlM2QoMCwgMCwgMSwgMTgwKTsKKworICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeFRvOworICAgIG1hdHJpeFRvLnJvdGF0ZTNkKDAsIDEs
IDAsIDE4MCk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZCA9IG1hdHJp
eFRvOworICAgIGV4cGVjdGVkLmJsZW5kKG1hdHJpeEZyb20sIHByb2dyZXNzKTsKKworICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnNUby5ibGVu
ZChvcGVyYXRpb25zRnJvbSwgcHJvZ3Jlc3MpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVy
YXRpb25UZXN0LCBibGVuZFJvdGF0aW9uRnJvbUlkZW50aXR5KQoreworICAgIFZlY3RvcjxPd25Q
dHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVudGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0
SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJhdGlvbnMpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZFJvdGF0ZSgwLCAwLCAxLCAzNjApOworCisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAu
NTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAg
ZXhwZWN0ZWQucm90YXRlM2QoMCwgMCwgMSwgMTgwKTsKKworICAgICAgICBFWFBFQ1RfVFJBTlNG
T1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zLmJsZW5kKCppZGVudGl0eU9w
ZXJhdGlvbnNbaV0sIHByb2dyZXNzKSk7CisgICAgfQorfQorCitURVNUKFdlYlRyYW5zZm9ybU9w
ZXJhdGlvblRlc3QsIGJsZW5kVHJhbnNsYXRpb25Gcm9tSWRlbnRpdHkpCit7CisgICAgVmVjdG9y
PE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5T3BlcmF0aW9uczsKKyAg
ICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9ucyk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIG9wZXJhdGlv
bnMuYXBwZW5kVHJhbnNsYXRlKDIsIDIsIDIpOworCisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9
IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAg
ICAgZXhwZWN0ZWQudHJhbnNsYXRlM2QoMSwgMSwgMSk7CisKKyAgICAgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9ucy5ibGVuZCgqaWRlbnRpdHlP
cGVyYXRpb25zW2ldLCBwcm9ncmVzcykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LCBibGVuZFNjYWxlRnJvbUlkZW50aXR5KQoreworICAgIFZlY3RvcjxPd25Q
dHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVudGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0
SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJhdGlvbnMpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZFNjYWxlKDMsIDMsIDMpOworCisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKwor
ICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0
ZWQuc2NhbGUzZCgyLCAyLCAyKTsKKworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zLmJsZW5kKCppZGVudGl0eU9wZXJhdGlvbnNbaV0s
IHByb2dyZXNzKSk7CisgICAgfQorfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3Qs
IGJsZW5kU2tld0Zyb21JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0
aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRTa2V3KDIsIDIp
OworCisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0ZWQuc2tld1goMSk7CisgICAg
ICAgIGV4cGVjdGVkLnNrZXdZKDEpOworCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9N
QVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYmxlbmQoKmlkZW50aXR5T3BlcmF0aW9uc1tp
XSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVz
dCwgYmxlbmRQZXJzcGVjdGl2ZUZyb21JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50
aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRQ
ZXJzcGVjdGl2ZSgxMDAwKTsKKworICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAg
ICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVk
LmFwcGx5UGVyc3BlY3RpdmUoNTAwICsgMC41ICogbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4
KCkpOworCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQs
IG9wZXJhdGlvbnMuYmxlbmQoKmlkZW50aXR5T3BlcmF0aW9uc1tpXSwgcHJvZ3Jlc3MpKTsKKyAg
ICB9Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRSb3RhdGlvblRv
SWRlbnRpdHkpCit7CisgICAgVmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+
IGlkZW50aXR5T3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5
T3BlcmF0aW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnM7CisgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kUm90YXRlKDAsIDAsIDEsIDM2MCk7CisK
KyAgICAgICAgZG91YmxlIHByb2dyZXNzID0gMC41OworCisgICAgICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGV4cGVjdGVkOworICAgICAgICBleHBlY3RlZC5yb3RhdGUzZCgwLCAwLCAxLCAx
ODApOworCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQs
IGlkZW50aXR5T3BlcmF0aW9uc1tpXS0+YmxlbmQob3BlcmF0aW9ucywgcHJvZ3Jlc3MpKTsKKyAg
ICB9Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRUcmFuc2xhdGlv
blRvSWRlbnRpdHkpCit7CisgICAgVmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
PiA+IGlkZW50aXR5T3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50
aXR5T3BlcmF0aW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3Bl
cmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnM7CisgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKDIsIDIsIDIpOwor
CisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0ZWQudHJhbnNsYXRlM2QoMSwgMSwg
MSk7CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwg
aWRlbnRpdHlPcGVyYXRpb25zW2ldLT5ibGVuZChvcGVyYXRpb25zLCBwcm9ncmVzcykpOworICAg
IH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFNjYWxlVG9JZGVu
dGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRl
bnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVy
YXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRTY2FsZSgzLCAzLCAzKTsKKworICAgICAgICBk
b3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVkLnNjYWxlM2QoMiwgMiwgMik7CisKKyAgICAgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgaWRlbnRpdHlPcGVyYXRp
b25zW2ldLT5ibGVuZChvcGVyYXRpb25zLCBwcm9ncmVzcykpOworICAgIH0KK30KKworVEVTVChX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFNrZXdUb0lkZW50aXR5KQoreworICAgIFZl
Y3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVudGl0eU9wZXJhdGlvbnM7
CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJhdGlvbnMpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBvcGVy
YXRpb25zLmFwcGVuZFNrZXcoMiwgMik7CisKKyAgICAgICAgZG91YmxlIHByb2dyZXNzID0gMC41
OworCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgICAgICBl
eHBlY3RlZC5za2V3WCgxKTsKKyAgICAgICAgZXhwZWN0ZWQuc2tld1koMSk7CisKKyAgICAgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgaWRlbnRpdHlPcGVyYXRp
b25zW2ldLT5ibGVuZChvcGVyYXRpb25zLCBwcm9ncmVzcykpOworICAgIH0KK30KKworVEVTVChX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFBlcnNwZWN0aXZlVG9JZGVudGl0eSkKK3sK
KyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVy
YXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAg
ICAgb3BlcmF0aW9ucy5hcHBlbmRQZXJzcGVjdGl2ZSgxMDAwKTsKKworICAgICAgICBkb3VibGUg
cHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0
ZWQ7CisgICAgICAgIGV4cGVjdGVkLmFwcGx5UGVyc3BlY3RpdmUoNTAwICsgMC41ICogbnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOworCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElP
Tl9NQVRSSVhfRVEoZXhwZWN0ZWQsIGlkZW50aXR5T3BlcmF0aW9uc1tpXS0+YmxlbmQob3BlcmF0
aW9ucywgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160875</attachid>
            <date>2012-08-27 18:02:24 -0700</date>
            <delta_ts>2012-08-27 19:20:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-94860-20120827210215.patch</filename>
            <type>text/plain</type>
            <size>37433</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2Nzc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAxMzViMTUyNzI4NTcz
M2FjZTg3MmNjNThiMjBmMjk4MTlkYmJiMmIyLi4yNjE5YzgwZmM5OWU4M2UzOGU0NzViZjQyYTgy
M2M1ODkyZTI3NmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wOC0yNCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNob3VsZCBhY2NlbGVyYXRlIHJvdGF0aW9ucyBvZiA+PSAxODAgZGVncmVlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBXaGVuIGdlbmVyYWxpemluZyB0
aGUga2V5ZnJhbWUgaW50ZXJwb2xhdGlvbiwgaXQgYmVjYW1lIHVzZWZ1bCB0byBhcHBlbmQgYW4g
aWRlbnRpdHkgdHJhbnNmb3JtIG9wZXJhdGlvbiwKKyAgICAgICAgYW5kIHRvIGFzayBhIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb2JqZWN0IGlmIGl0IGlzSWRlbnRpdHkoKS4KKworICAgICAgICAq
IGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg6CisgICAgICAgIChXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zKToKKwogMjAxMi0wOC0yMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1l
c3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBXZWJMYXllclRy
ZWVWaWV3IGludGVyZmFjZSBpbnRvIHB1cmUgdmlydHVhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY1YmE2NGU2
ZmI4NmQ1YTk5NTQ5MzAxNzhmZTM2NTA4YTgzOTkxODkuLjkwNzI5MGQwNmY4Y2VkYTkzMjBhNjk0
Nzk2YmUxYjYwMDcxZDQ1MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxMi0wOC0y
NCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFNob3VsZCBhY2NlbGVyYXRlIHJvdGF0aW9ucyBvZiA+PSAxODAgZGVncmVlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb24gbm93IHN0b3JlcyBlbm91Z2ggaW5mb3JtYXRpb24gdG8gaW50ZXJwb2xhdGUKKyAgICAg
ICAgd2l0aG91dCByZXNvcnRpbmcgdG8gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmJsZW5kIHdo
aWNoIGlzIGJvdGgKKyAgICAgICAgZXhwZW5zaXZlLCBhbmQgaW4gdGhlIGNhc2Ugb2YgYmlnIHJv
dGF0aW9ucywgZXJyb3IgcHJvbmUuIEZvciBleGFtcGxlLAorICAgICAgICB3ZSBub3cgc3RvcmUg
dGhlIGF4aXMgYW5kIGFuZ2xlIGZvciByb3RhdGlvbnMsIHNvIGlmIHR3byByb3RhdGlvbnMgYXJl
CisgICAgICAgIGludGVycG9sYXRlZCwgYW5kIHRoZXkgYXJlIGFib3V0IHRoZSBzYW1lIGF4aXMs
IHdlIGNhbiBzaW1wbHkKKyAgICAgICAgaW50ZXJwb2xhdGUgdGhlIGFuZ2xlcy4KKworICAgICAg
ICBVbml0IHRlc3RzOgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QudHJhbnNm
b3JtVHlwZXNBcmVVbmlxdWUKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0Lm1h
dGNoVHlwZXNTYW1lTGVuZ3RoCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5p
ZGVudGl0eUFsd2F5c01hdGNoZXMKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0
LmxhcmdlUm90YXRpb25zV2l0aFNhbWVBeGlzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhTYW1lQXhpc0luRGlmZmVyZW50RGlyZWN0aW9uCisg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhEaWZm
ZXJlbnRBeGVzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFJvdGF0
aW9uRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVu
ZFRyYW5zbGF0aW9uRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdC5ibGVuZFNjYWxlRnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5ibGVuZFNrZXdGcm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVGcm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUm90YXRpb25Ub0lkZW50aXR5CisgICAgICAgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFRyYW5zbGF0aW9uVG9JZGVudGl0eQorICAgICAg
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYmxlbmRTY2FsZVRvSWRlbnRpdHkKKyAgICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kU2tld1RvSWRlbnRpdHkKKyAgICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVUb0lkZW50aXR5
CisgICAgICAgICAgQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcmVhdGVUcmFuc2Zvcm1B
bmltYXRpb25XaXRoQmlnUm90YXRpb24KKyAgICAgICAgICBBbmltYXRpb25UcmFuc2xhdGlvblV0
aWxUZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlvbkFuZEVtcHR5VHJh
bnNmb3JtT3BlcmF0aW9uTGlzdAorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKHN0ZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYlRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgICAgQWRkZWQgeCB5IHogYW5k
IGFuZ2xlLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb246OmlzSWRlbnRp
dHkpOgorICAgICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGlzLT5tYXRyaXguaXNJZGVudGl0eSgp
CisgICAgICAgIChXZWJLaXQ6OmlzSWRlbnRpdHkpOgorICAgICAgICAgIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgYXJndW1lbnQgaXMgbnVsbCBvciAtPmlzSWRlbnRpdHkoKQorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6c2hhcmVTYW1lQXhpcyk6CisgICAgICAgICAgQSBoZWxwZXIg
ZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIGlmIHR3byB0cmFuc2Zvcm0gb3BlcmF0aW9ucworICAg
ICAgICAgIHNoYXJlIHRoZSBzYW1lIGF4aXMuIEFsc28gcmV0dXJucyB0aGUgYXhpcyBhbmQgJ2Zy
b20nIGFuZ2xlCisgICAgICAgICAgdG8gdXNlIGluIHRoZSBpbnRlcnBvbGF0aW9uIChpbiBjYXNl
IHRoZSBheGVzIHBvaW50IGluIGRpZmZlcmVudAorICAgICAgICAgIGRpcmVjdGlvbnMpLgorICAg
ICAgICAoV2ViS2l0OjpibGVuZERvdWJsZXMpOgorICAgICAgICAgIExpbmVhcmx5IGludGVycG9s
YXRlcyBkb3VibGVzLgorICAgICAgICAoV2ViS2l0OjpibGVuZFRyYW5zZm9ybU9wZXJhdGlvbnMp
OgorICAgICAgICAgIEJsZW5kcyB0d28gV2ViVHJhbnNmb3JtT3BlcmF0aW9uIG9iamVjdHMuCisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kKToKKyAgICAgICAg
ICBCbGVuZHMgdHdvIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb2JqZWN0cywgdGFraW5nIHNwZWNp
YWwgY2FyZQorICAgICAgICAgIHdoZW4gZWl0aGVyIGlzSWRlbnRpdHkoKS4KKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6bWF0Y2hlc1R5cGVzKToKKyAgICAgICAgICBX
YXMgY2hhbmdlZCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgaWRlbnRpdHkgdHJhbnNmb3JtIG9w
ZXJhdGlvbnMKKyAgICAgICAgICBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kVHJhbnNsYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRTa2V3KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRJZGVudGl0eSk6CisgICAgICAgICAgVGhl
ICdhcHBlbmQnIGZ1bmN0aW9ucyBhbGwgcG9wdWxhdGUgdGhlIG5ldyBtZW1iZXJzIGluCisgICAg
ICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zOjppc0lkZW50aXR5KToKKyAgICAgICAgICBSZXR1cm5zIGZhbHNlIGlmZiBh
bnkgb2YgaXRzIHRyYW5zZm9ybSBvcGVyYXRpb25zICFpc0lkZW50aXR5KCkuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgICAgUmVtb3ZlZCB0
aGUgPj0gMTgwIGRlZ3JlZSByZXN0cmljdGlvbi4KKwogMjAxMi0wOC0yNyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEZvcmNlIFJlcGFpbnQg
d29yayB3aXRoIHRpbGVkIGJhY2tpbmcgc3RvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggYjdlNGQ1MDNhMDQyYTc2MGJiMDgzOTMzZTYzYTA0MmVlM2FiMzYxMi4uZWNjODY1YTAxZDk2
YmMwMTE5NDhhYTliZTI2ZWMwMTZkNTJkN2I4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzNiBAQAorMjAxMi0wOC0yNCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFNob3VsZCBhY2NlbGVyYXRlIHJvdGF0aW9u
cyBvZiA+PSAxODAgZGVncmVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTQ4NjAKKworICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4K
KworICAgICAgICBBZGRlZCBuZXcgdW5pdCB0ZXN0czoKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LnRyYW5zZm9ybVR5cGVzQXJlVW5pcXVlCisgICAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uVGVzdC5tYXRjaFR5cGVzU2FtZUxlbmd0aAorICAgICAgICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvblRlc3QuaWRlbnRpdHlBbHdheXNNYXRjaGVzCisgICAgICAgICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhTYW1lQXhpcworICAgICAgICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QubGFyZ2VSb3RhdGlvbnNXaXRoU2FtZUF4aXNJbkRp
ZmZlcmVudERpcmVjdGlvbgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QubGFy
Z2VSb3RhdGlvbnNXaXRoRGlmZmVyZW50QXhlcworICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvblRlc3QuYmxlbmRSb3RhdGlvbkZyb21JZGVudGl0eQorICAgICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvblRlc3QuYmxlbmRUcmFuc2xhdGlvbkZyb21JZGVudGl0eQorICAgICAgICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYmxlbmRTY2FsZUZyb21JZGVudGl0eQorICAgICAgICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYmxlbmRTa2V3RnJvbUlkZW50aXR5CisgICAgICAg
ICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFBlcnNwZWN0aXZlRnJvbUlkZW50aXR5
CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFJvdGF0aW9uVG9JZGVu
dGl0eQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYmxlbmRUcmFuc2xhdGlv
blRvSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kU2Nh
bGVUb0lkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFNr
ZXdUb0lkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFBl
cnNwZWN0aXZlVG9JZGVudGl0eQorICAgICAgICAgIEFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbFRl
c3QuY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uV2l0aEJpZ1JvdGF0aW9uCisgICAgICAgICAgQW5p
bWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmln
Um90YXRpb25BbmRFbXB0eVRyYW5zZm9ybU9wZXJhdGlvbkxpc3QKKworICAgICAgICAqIHRlc3Rz
L0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbFRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpURVNU
KToKKyAgICAgICAgKiB0ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5jcHA6CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKGdldElkZW50aXR5T3BlcmF0aW9ucyk6CisKIDIwMTItMDgt
MjcgIEp1c3RpbiBOb3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gSW1wbGVtZW50aW5nIGEgZ2xvYmFsIGxpbWl0IG9uIG1lbW9yeSBjb25zdW1lZCBieSBk
ZWZlcnJlZCAyRCBjYW52YXNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaAppbmRleCBhNDk3YWFhNTU0OWQzNDA5
OTdiODZmODc2M2Y2ZWRkYzYxOWJkZDk2Li5lNTY1YWU3ZThhZTI2M2RiYTAzMDdkMDBhOWZiN2Q3
N2Y1MThiMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVi
bGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaApAQCAtNzQsNiArNzQsOSBAQCBwdWJsaWM6CiAg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZFNrZXcoZG91YmxlIHgsIGRvdWJsZSB5KTsKICAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kUGVyc3BlY3RpdmUoZG91YmxlIGRlcHRoKTsKICAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZElkZW50aXR5KCk7CisKKyAg
ICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucy5jcHAKaW5kZXggMTJiZDAwYjI2ZjQ4MGQxMzliN2MyMjY5ZTI3NzNjY2Q3NjdmYzJlNC4u
ZTBjMjMwODkzYjdmMTQ5YmYzYTc4ZTM0YTkzOTlkNWJjYzZkODMxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRp
b25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dl
YlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCkBAIC0yNiw4ICsyNiwxNSBAQAogCiAjaW5jbHVkZSA8
cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KIAorI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVz
cGFjZSB7Citjb25zdCBkb3VibGUgRVBTSUxPTiA9IDFlLTQ7Cit9CisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBzdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHsKQEAgLTM3LDExICs0NCw0MyBA
QCBzdHJ1Y3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHsKICAgICAgICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uU2NhbGUsCiAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblNrZXcsCiAgICAgICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZlLAotICAgICAgICBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25NYXRyaXgKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0cml4LAorICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0eQogICAgIH07CiAKKyAgICBXZWJUcmFu
c2Zvcm1PcGVyYXRpb24oKQorICAgICAgICA6IHR5cGUoV2ViVHJhbnNmb3JtT3BlcmF0aW9uSWRl
bnRpdHkpCisgICAgeworICAgIH0KKwogICAgIFR5cGUgdHlwZTsKICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtYXRyaXg7CisKKyAgICB1bmlvbiB7CisgICAgICAgIGRvdWJsZSBwZXJzcGVj
dGl2ZURlcHRoOworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBkb3VibGUgeCwgeTsK
KyAgICAgICAgfSBza2V3OworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgZG91Ymxl
IHgsIHksIHo7CisgICAgICAgIH0gc2NhbGU7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgIGRvdWJsZSB4LCB5LCB6OworICAgICAgICB9IHRyYW5zbGF0ZTsKKworICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBkb3VibGUgeCwgeSwg
ejsKKyAgICAgICAgICAgIH0gYXhpczsKKworICAgICAgICAgICAgZG91YmxlIGFuZ2xlOworICAg
ICAgICB9IHJvdGF0ZTsKKyAgICB9OworCisgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyBy
ZXR1cm4gbWF0cml4LmlzSWRlbnRpdHkoKTsgfQogfTsKIAogY2xhc3MgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uc1ByaXZhdGUgewpAQCAtNTcsMTMgKzk2LDE2NSBAQCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBseSgpIGNvbnN0CiAgICAgcmV0dXJuIHRv
UmV0dXJuOwogfQogCitzdGF0aWMgYm9vbCBpc0lkZW50aXR5KGNvbnN0IFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbiogb3BlcmF0aW9uKQoreworICAgIHJldHVybiAhb3BlcmF0aW9uIHx8IG9wZXJhdGlv
bi0+aXNJZGVudGl0eSgpOworfQorCitzdGF0aWMgYm9vbCBzaGFyZVNhbWVBeGlzKGNvbnN0IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0
bywgZG91YmxlJiBheGlzWCwgZG91YmxlJiBheGlzWSwgZG91YmxlJiBheGlzWiwgZG91YmxlJiBh
bmdsZUZyb20pCit7CisgICAgaWYgKGlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpc0lkZW50aXR5KGZyb20pICYmICFp
c0lkZW50aXR5KHRvKSkgeworICAgICAgICBheGlzWCA9IHRvLT5yb3RhdGUuYXhpcy54OworICAg
ICAgICBheGlzWSA9IHRvLT5yb3RhdGUuYXhpcy55OworICAgICAgICBheGlzWiA9IHRvLT5yb3Rh
dGUuYXhpcy56OworICAgICAgICBhbmdsZUZyb20gPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoIWlzSWRlbnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpIHsK
KyAgICAgICAgYXhpc1ggPSBmcm9tLT5yb3RhdGUuYXhpcy54OworICAgICAgICBheGlzWSA9IGZy
b20tPnJvdGF0ZS5heGlzLnk7CisgICAgICAgIGF4aXNaID0gZnJvbS0+cm90YXRlLmF4aXMuejsK
KyAgICAgICAgYW5nbGVGcm9tID0gZnJvbS0+cm90YXRlLmFuZ2xlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgbGVuZ3RoMiA9IGZyb20tPnJvdGF0ZS5heGlzLngg
KiBmcm9tLT5yb3RhdGUuYXhpcy54ICsgZnJvbS0+cm90YXRlLmF4aXMueSAqIGZyb20tPnJvdGF0
ZS5heGlzLnkgKyBmcm9tLT5yb3RhdGUuYXhpcy56ICogZnJvbS0+cm90YXRlLmF4aXMuejsKKyAg
ICBkb3VibGUgb3RoZXJMZW5ndGgyID0gdG8tPnJvdGF0ZS5heGlzLnggKiB0by0+cm90YXRlLmF4
aXMueCArIHRvLT5yb3RhdGUuYXhpcy55ICogdG8tPnJvdGF0ZS5heGlzLnkgKyB0by0+cm90YXRl
LmF4aXMueiAqIHRvLT5yb3RhdGUuYXhpcy56OworCisgICAgaWYgKGxlbmd0aDIgPD0gRVBTSUxP
TiB8fCBvdGhlckxlbmd0aDIgPD0gRVBTSUxPTikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZG91YmxlIGRvdCA9IHRvLT5yb3RhdGUuYXhpcy54ICogZnJvbS0+cm90YXRlLmF4aXMueCAr
IHRvLT5yb3RhdGUuYXhpcy55ICogZnJvbS0+cm90YXRlLmF4aXMueSArIHRvLT5yb3RhdGUuYXhp
cy56ICogZnJvbS0+cm90YXRlLmF4aXMuejsKKyAgICBkb3VibGUgZXJyb3IgPSBmYWJzKDEuMCAt
IChkb3QgKiBkb3QpIC8gKGxlbmd0aDIgKiBvdGhlckxlbmd0aDIpKTsKKyAgICBib29sIHJlc3Vs
dCA9IGVycm9yIDwgRVBTSUxPTjsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGF4aXNYID0g
dG8tPnJvdGF0ZS5heGlzLng7CisgICAgICAgIGF4aXNZID0gdG8tPnJvdGF0ZS5heGlzLnk7Cisg
ICAgICAgIGF4aXNaID0gdG8tPnJvdGF0ZS5heGlzLno7CisgICAgICAgIC8vIElmIHRoZSBheGVz
IGFyZSBwb2ludGluZyBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zLCB3ZSBuZWVkIHRvIHJldmVyc2UK
KyAgICAgICAgLy8gdGhlIGFuZ2xlLgorICAgICAgICBhbmdsZUZyb20gPSBkb3QgPiAwID8gZnJv
bS0+cm90YXRlLmFuZ2xlIDogLWZyb20tPnJvdGF0ZS5hbmdsZTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIGRvdWJsZSBibGVuZERvdWJsZXMoZG91YmxlIGZyb20sIGRv
dWJsZSB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBmcm9tICogKDEgLSBwcm9n
cmVzcykgKyB0byAqIHByb2dyZXNzOworfQorCitzdGF0aWMgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggYmxlbmRUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiog
ZnJvbSwgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiB0bywgZG91YmxlIHByb2dyZXNzKQor
eworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuOworCisgICAgaWYgKGlzSWRl
bnRpdHkoZnJvbSkgJiYgaXNJZGVudGl0eSh0bykpCisgICAgICAgIHJldHVybiB0b1JldHVybjsK
KworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6VHlwZSBpbnRlcnBvbGF0aW9uVHlwZSA9IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uSWRlbnRpdHk7CisgICAg
aWYgKGlzSWRlbnRpdHkodG8pKQorICAgICAgICBpbnRlcnBvbGF0aW9uVHlwZSA9IGZyb20tPnR5
cGU7CisgICAgZWxzZQorICAgICAgICBpbnRlcnBvbGF0aW9uVHlwZSA9IHRvLT50eXBlOworCisg
ICAgc3dpdGNoIChpbnRlcnBvbGF0aW9uVHlwZSkgeworICAgIGNhc2UgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25UcmFuc2xhdGU6IHsKKyAgICAgICAgZG91Ymxl
IGZyb21YID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT50cmFuc2xhdGUueDsKKyAgICAg
ICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT50cmFuc2xhdGUu
eTsKKyAgICAgICAgZG91YmxlIGZyb21aID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT50
cmFuc2xhdGUuejsKKyAgICAgICAgZG91YmxlIHRvWCA9IGlzSWRlbnRpdHkodG8pID8gMCA6IHRv
LT50cmFuc2xhdGUueDsKKyAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRlbnRpdHkodG8pID8gMCA6
IHRvLT50cmFuc2xhdGUueTsKKyAgICAgICAgZG91YmxlIHRvWiA9IGlzSWRlbnRpdHkodG8pID8g
MCA6IHRvLT50cmFuc2xhdGUuejsKKyAgICAgICAgdG9SZXR1cm4udHJhbnNsYXRlM2QoYmxlbmRE
b3VibGVzKGZyb21YLCB0b1gsIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmxlbmREb3VibGVzKGZyb21ZLCB0b1ksIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmxlbmREb3VibGVzKGZyb21aLCB0b1osIHByb2dyZXNzKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9uUm90YXRlOiB7CisgICAgICAgIGRvdWJsZSBheGlzWCA9IDA7CisgICAgICAg
IGRvdWJsZSBheGlzWSA9IDA7CisgICAgICAgIGRvdWJsZSBheGlzWiA9IDE7CisgICAgICAgIGRv
dWJsZSBmcm9tQW5nbGUgPSAwOworICAgICAgICBkb3VibGUgdG9BbmdsZSA9IGlzSWRlbnRpdHko
dG8pID8gMCA6IHRvLT5yb3RhdGUuYW5nbGU7CisgICAgICAgIGlmIChzaGFyZVNhbWVBeGlzKGZy
b20sIHRvLCBheGlzWCwgYXhpc1ksIGF4aXNaLCBmcm9tQW5nbGUpKQorICAgICAgICAgICAgdG9S
ZXR1cm4ucm90YXRlM2QoYXhpc1gsIGF4aXNZLCBheGlzWiwgYmxlbmREb3VibGVzKGZyb21Bbmds
ZSwgdG9BbmdsZSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeDsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGl0
eSh0bykpCisgICAgICAgICAgICAgICAgdG9NYXRyaXggPSB0by0+bWF0cml4OworICAgICAgICAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKKyAgICAgICAgICAgIGlmICgh
aXNJZGVudGl0eShmcm9tKSkKKyAgICAgICAgICAgICAgICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0
cml4OworICAgICAgICAgICAgdG9SZXR1cm4gPSB0b01hdHJpeDsKKyAgICAgICAgICAgIHRvUmV0
dXJuLmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9w
ZXJhdGlvblNjYWxlOiB7CisgICAgICAgIGRvdWJsZSBmcm9tWCA9IGlzSWRlbnRpdHkoZnJvbSkg
PyAxIDogZnJvbS0+c2NhbGUueDsKKyAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShm
cm9tKSA/IDEgOiBmcm9tLT5zY2FsZS55OworICAgICAgICBkb3VibGUgZnJvbVogPSBpc0lkZW50
aXR5KGZyb20pID8gMSA6IGZyb20tPnNjYWxlLno7CisgICAgICAgIGRvdWJsZSB0b1ggPSBpc0lk
ZW50aXR5KHRvKSA/IDEgOiB0by0+c2NhbGUueDsKKyAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRl
bnRpdHkodG8pID8gMSA6IHRvLT5zY2FsZS55OworICAgICAgICBkb3VibGUgdG9aID0gaXNJZGVu
dGl0eSh0bykgPyAxIDogdG8tPnNjYWxlLno7CisgICAgICAgIHRvUmV0dXJuLnNjYWxlM2QoYmxl
bmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBibGVuZERvdWJsZXMoZnJvbVksIHRvWSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsZW5kRG91Ymxlcyhmcm9tWiwgdG9aLCBwcm9ncmVzcykpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9w
ZXJhdGlvblNrZXc6IHsKKyAgICAgICAgZG91YmxlIGZyb21YID0gaXNJZGVudGl0eShmcm9tKSA/
IDAgOiBmcm9tLT5za2V3Lng7CisgICAgICAgIGRvdWJsZSBmcm9tWSA9IGlzSWRlbnRpdHkoZnJv
bSkgPyAwIDogZnJvbS0+c2tldy55OworICAgICAgICBkb3VibGUgdG9YID0gaXNJZGVudGl0eSh0
bykgPyAwIDogdG8tPnNrZXcueDsKKyAgICAgICAgZG91YmxlIHRvWSA9IGlzSWRlbnRpdHkodG8p
ID8gMCA6IHRvLT5za2V3Lnk7CisgICAgICAgIHRvUmV0dXJuLnNrZXdYKGJsZW5kRG91Ymxlcyhm
cm9tWCwgdG9YLCBwcm9ncmVzcykpOworICAgICAgICB0b1JldHVybi5za2V3WShibGVuZERvdWJs
ZXMoZnJvbVksIHRvWSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25QZXJzcGVjdGl2
ZTogeworICAgICAgICBkb3VibGUgZnJvbVBlcnNwZWN0aXZlRGVwdGggPSBpc0lkZW50aXR5KGZy
b20pID8gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkgOiBmcm9tLT5wZXJzcGVjdGl2ZURl
cHRoOworICAgICAgICBkb3VibGUgdG9QZXJzcGVjdGl2ZURlcHRoID0gaXNJZGVudGl0eSh0bykg
PyBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSA6IHRvLT5wZXJzcGVjdGl2ZURlcHRoOwor
ICAgICAgICB0b1JldHVybi5hcHBseVBlcnNwZWN0aXZlKGJsZW5kRG91Ymxlcyhmcm9tUGVyc3Bl
Y3RpdmVEZXB0aCwgdG9QZXJzcGVjdGl2ZURlcHRoLCBwcm9ncmVzcykpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbk1hdHJpeDogeworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJp
eDsKKyAgICAgICAgaWYgKCFpc0lkZW50aXR5KHRvKSkKKyAgICAgICAgICAgIHRvTWF0cml4ID0g
dG8tPm1hdHJpeDsKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsK
KyAgICAgICAgaWYgKCFpc0lkZW50aXR5KGZyb20pKQorICAgICAgICAgICAgZnJvbU1hdHJpeCA9
IGZyb20tPm1hdHJpeDsKKyAgICAgICAgdG9SZXR1cm4gPSB0b01hdHJpeDsKKyAgICAgICAgdG9S
ZXR1cm4uYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvbklk
ZW50aXR5OgorICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gdG9SZXR1cm47Cit9CisKIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIGZy
b20sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKIHsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0b1JldHVybjsKKyAgICBib29sIGZyb21JZGVudGl0eSA9IGZyb20uaXNJZGVudGl0eSgpOwor
ICAgIGJvb2wgdG9JZGVudGl0eSA9IGlzSWRlbnRpdHkoKTsKKyAgICBpZiAoZnJvbUlkZW50aXR5
ICYmIHRvSWRlbnRpdHkpCisgICAgICAgIHJldHVybiB0b1JldHVybjsKKwogICAgIGlmIChtYXRj
aGVzVHlwZXMoZnJvbSkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZh
dGUtPm9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGJsZW5kZWQgPSBtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0ubWF0cml4OwotICAg
ICAgICAgICAgYmxlbmRlZC5ibGVuZChmcm9tLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5tYXRy
aXgsIHByb2dyZXNzKTsKKyAgICAgICAgc2l6ZV90IG51bU9wZXJhdGlvbnMgPSBtYXgoZnJvbUlk
ZW50aXR5ID8gMCA6IGZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9JZGVudGl0eSA/IDAgOiBtX3ByaXZhdGUtPm9w
ZXJhdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PcGVy
YXRpb25zOyArK2kpIHsKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGJsZW5k
ZWQgPSBibGVuZFRyYW5zZm9ybU9wZXJhdGlvbnMoCisgICAgICAgICAgICAgICAgZnJvbUlkZW50
aXR5ID8gMCA6ICZmcm9tLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXSwKKyAgICAgICAgICAgICAg
ICB0b0lkZW50aXR5ID8gMCA6ICZtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0sCisgICAgICAgICAg
ICAgICAgcHJvZ3Jlc3MpOwogICAgICAgICAgICAgdG9SZXR1cm4ubXVsdGlwbHkoYmxlbmRlZCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtNzYsMTEgKzI2NywxNiBAQCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZChjb25zdCBXZWJUcmFu
c2Zvcm1PcGVyYXRpbwogCiBib29sIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6Om1hdGNoZXNUeXBl
cyhjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdGhlcikgY29uc3QKIHsKKyAgICBpZiAo
aXNJZGVudGl0eSgpIHx8IG90aGVyLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKICAgICBpZiAobV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKSAhPSBvdGhlci5tX3ByaXZh
dGUtPm9wZXJhdGlvbnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewot
ICAgICAgICBpZiAobV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLnR5cGUgIT0gb3RoZXIubV9wcml2
YXRlLT5vcGVyYXRpb25zW2ldLnR5cGUpCisgICAgICAgIGlmIChtX3ByaXZhdGUtPm9wZXJhdGlv
bnNbaV0udHlwZSAhPSBvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZQorICAgICAg
ICAgICAgJiYgIW1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50aXR5KCkKKyAgICAgICAg
ICAgICYmICFvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0uaXNJZGVudGl0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtOTIsNiArMjg4LDkgQEAgdm9pZCBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRUcmFuc2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgeikKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7CiAgICAgdG9BZGQu
bWF0cml4LnRyYW5zbGF0ZTNkKHgsIHksIHopOwogICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zv
cm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblRyYW5zbGF0ZTsKKyAgICB0b0FkZC50
cmFuc2xhdGUueCA9IHg7CisgICAgdG9BZGQudHJhbnNsYXRlLnkgPSB5OworICAgIHRvQWRkLnRy
YW5zbGF0ZS56ID0gejsKICAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsK
IH0KIApAQCAtMTAwLDYgKzI5OSwxMCBAQCB2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFw
cGVuZFJvdGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgZAogICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKICAgICB0b0FkZC5tYXRyaXgucm90YXRlM2QoeCwg
eSwgeiwgZGVncmVlcyk7CiAgICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9uUm90YXRlOworICAgIHRvQWRkLnJvdGF0ZS5heGlzLnggPSB4
OworICAgIHRvQWRkLnJvdGF0ZS5heGlzLnkgPSB5OworICAgIHRvQWRkLnJvdGF0ZS5heGlzLnog
PSB6OworICAgIHRvQWRkLnJvdGF0ZS5hbmdsZSA9IGRlZ3JlZXM7CiAgICAgbV9wcml2YXRlLT5v
cGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7CiB9CiAKQEAgLTEwOCw2ICszMTEsOSBAQCB2b2lkIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFNjYWxlKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91
YmxlIHopCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOwogICAgIHRvQWRkLm1hdHJp
eC5zY2FsZTNkKHgsIHksIHopOwogICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRp
b246OldlYlRyYW5zZm9ybU9wZXJhdGlvblNjYWxlOworICAgIHRvQWRkLnNjYWxlLnggPSB4Owor
ICAgIHRvQWRkLnNjYWxlLnkgPSB5OworICAgIHRvQWRkLnNjYWxlLnogPSB6OwogICAgIG1fcHJp
dmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwogfQogCkBAIC0xMTcsNiArMzIzLDggQEAg
dm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRTa2V3KGRvdWJsZSB4LCBkb3VibGUg
eSkKICAgICB0b0FkZC5tYXRyaXguc2tld1goeCk7CiAgICAgdG9BZGQubWF0cml4LnNrZXdZKHkp
OwogICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9w
ZXJhdGlvblNrZXc7CisgICAgdG9BZGQuc2tldy54ID0geDsKKyAgICB0b0FkZC5za2V3LnkgPSB5
OwogICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwogfQogCkBAIC0xMjUs
NiArMzMzLDcgQEAgdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRQZXJzcGVjdGl2
ZShkb3VibGUgZGVwdGgpCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uIHRvQWRkOwogICAgIHRv
QWRkLm1hdHJpeC5hcHBseVBlcnNwZWN0aXZlKGRlcHRoKTsKICAgICB0b0FkZC50eXBlID0gV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25QZXJzcGVjdGl2ZTsKKyAg
ICB0b0FkZC5wZXJzcGVjdGl2ZURlcHRoID0gZGVwdGg7CiAgICAgbV9wcml2YXRlLT5vcGVyYXRp
b25zLmFwcGVuZCh0b0FkZCk7CiB9CiAKQEAgLTEzNiw2ICszNDUsMjAgQEAgdm9pZCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zOjphcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCkKICAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRkKTsKIH0K
IAordm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBlbmRJZGVudGl0eSgpCit7CisgICAg
bV9wcml2YXRlLT5vcGVyYXRpb25zLmFwcGVuZChXZWJUcmFuc2Zvcm1PcGVyYXRpb24oKSk7Cit9
CisKK2Jvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6aXNJZGVudGl0eSgpIGNvbnN0Cit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKCFtX3ByaXZhdGUtPm9wZXJhdGlvbnNbaV0uaXNJZGVudGl0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwogdm9pZCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpyZXNldCgpCiB7CiAgICAgbV9wcml2YXRl
LnJlc2V0KDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAKaW5k
ZXggNWI0Zjk5N2YzYjBiYzMxZjk1MjA3NDk5NTA1M2U3NWFjYjY5NmQ3NC4uYWU4ZjkwMDdiNTg4
ODE3YjEwYjNiYmEzNTc1MTdlZDlhNTMzMWMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25U
cmFuc2xhdGlvblV0aWwuY3BwCkBAIC0xMTMsNiArMTEzLDggQEAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYg
dHJhbnMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpJREVOVElUWToKKyAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMuYXBwZW5kSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCiAgICAg
ICAgICAgICBicmVhazsKQEAgLTE0NSw1MSArMTQ3LDkgQEAgYm9vbCBpc1JvdGF0aW9uVHlwZShU
cmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHJhbnNmb3JtVHlwZSkKICAgICAgICAg
fHwgdHJhbnNmb3JtVHlwZSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDsKIH0KIAot
Ym9vbCBjYXVzZXNSb3RhdGlvbk9mQXRMZWFzdDE4MERlZ3JlZXMoY29uc3QgVHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZh
bHVlKQotewotICAgIGlmICghbGFzdFZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvcGVyYXRpb25zID0gKnZhbHVlLT52YWx1ZSgp
OwotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGxhc3RPcGVyYXRpb25zID0gKmxhc3RW
YWx1ZS0+dmFsdWUoKTsKLQotICAgIC8vIFdlJ2xsIGJlIGRvaW5nIG1hdHJpeCBpbnRlcnBvbGF0
aW9uIGluIHRoaXMgY2FzZS4gTm8gcmlzayBvZiBpbmNvcnJlY3Qgcm90YXRpb25zIGhlcmUuCi0g
ICAgaWYgKG9wZXJhdGlvbnMuc2l6ZSgpICYmIGxhc3RPcGVyYXRpb25zLnNpemUoKSAmJiAhb3Bl
cmF0aW9ucy5vcGVyYXRpb25zTWF0Y2gobGFzdE9wZXJhdGlvbnMpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBzaXplX3QgbnVtT3BlcmF0aW9ucyA9IG1heChvcGVyYXRpb25zLnNpemUo
KSwgbGFzdE9wZXJhdGlvbnMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bU9wZXJhdGlvbnM7ICsraSkgewotICAgICAgICBmbG9hdCBhbmdsZSA9IDA7Ci0gICAgICAgIGlm
IChpIDwgb3BlcmF0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAgIGlmICghaXNSb3RhdGlvblR5
cGUob3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0tPmdldE9wZXJhdGlvblR5cGUoKSkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbiogcm90YXRpb24gPSBzdGF0aWNfY2FzdDxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihv
cGVyYXRpb25zLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSk7Ci0gICAgICAgICAgICBhbmdsZSA9IHJv
dGF0aW9uLT5hbmdsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgbGFzdEFuZ2xlID0g
MDsKLSAgICAgICAgaWYgKGkgPCBsYXN0T3BlcmF0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAg
IGlmICghaXNSb3RhdGlvblR5cGUobGFzdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2ldLT5nZXRP
cGVyYXRpb25UeXBlKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGxhc3RSb3RhdGlvbiA9IHN0YXRpY19jYXN0PFJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KGxhc3RPcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtpXS5n
ZXQoKSk7Ci0gICAgICAgICAgICBsYXN0QW5nbGUgPSBsYXN0Um90YXRpb24tPmFuZ2xlKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZmFicyhhbmdsZSAtIGxhc3RBbmdsZSkgPj0gMTgwKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiB0ZW1wbGF0ZSA8PgogYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhTdGFuZGFyZFRpbWluZ0Z1bmN0
aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSwgV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU+KFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSwg
ZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgY29u
c3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIGxhc3RWYWx1ZSwgV2ViS2l0OjpXZWJBbmltYXRp
b25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlIHRpbWluZ0Z1bmN0aW9uVHlwZSwgY29uc3QgRmxv
YXRTaXplJiBib3hTaXplKQogewotICAgIGlmIChjYXVzZXNSb3RhdGlvbk9mQXRMZWFzdDE4MERl
Z3JlZXModmFsdWUsIGxhc3RWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cygqdmFsdWUtPnZhbHVlKCksIGJveFNpemUpOwogICAgIGlmIChvcGVyYXRpb25zLmFwcGx5KCku
aXNJbnZlcnRpYmxlKCkpIHsKICAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgdGltaW5nRnVuY3Rpb25UeXBlKTsKQEAgLTIwMSw5ICsx
NjEsNiBAQCBib29sIGFwcGVuZEtleWZyYW1lV2l0aFN0YW5kYXJkVGltaW5nRnVuY3Rpb248VHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZgogdGVtcGxhdGUgPD4KIGJvb2wgYXBwZW5k
S2V5ZnJhbWVXaXRoQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4o
V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3Qg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25W
YWx1ZSogbGFzdFZhbHVlLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUg
eTIsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKIHsKLSAgICBpZiAoY2F1c2VzUm90YXRpb25P
ZkF0TGVhc3QxODBEZWdyZWVzKHZhbHVlLCBsYXN0VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKTsKICAgICBpZiAob3BlcmF0
aW9ucy5hcHBseSgpLmlzSW52ZXJ0aWJsZSgpKSB7CiAgICAgICAgIGN1cnZlLT5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwgb3BlcmF0aW9ucyksIHgxLCB5MSwgeDIsIHkyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQW5pbWF0aW9uVHJhbnNsYXRp
b25VdGlsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0FuaW1hdGlvblRy
YW5zbGF0aW9uVXRpbFRlc3QuY3BwCmluZGV4IDdmNjNlMWY3M2QyZTY3OWY0MDgwOWEyZmRmNGI1
MzdhNzEzZmIxNTIuLjU2MmY3ODUyMDJhNWQzZDY2ZDYxOThjNzk4ZWNmZjQ1MjMwZDAzYzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQW5pbWF0aW9uVHJhbnNsYXRp
b25VdGlsVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9BbmltYXRp
b25UcmFuc2xhdGlvblV0aWxUZXN0LmNwcApAQCAtOTYsNyArOTYsNyBAQCBURVNUKEFuaW1hdGlv
blRyYW5zbGF0aW9uVXRpbFRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3Rh
dGlvbikKICAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0
ZSgpOwogICAgIGFuaW1hdGlvbi0+c2V0RHVyYXRpb24oZHVyYXRpb24pOwogCi0gICAgRVhQRUNU
X0ZBTFNFKGFuaW1hdGlvbkNhbkJlVHJhbnNsYXRlZCh2YWx1ZXMsIGFuaW1hdGlvbi5nZXQoKSkp
OworICAgIEVYUEVDVF9UUlVFKGFuaW1hdGlvbkNhbkJlVHJhbnNsYXRlZCh2YWx1ZXMsIGFuaW1h
dGlvbi5nZXQoKSkpOwogfQogCiBURVNUKEFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbFRlc3QsIGNy
ZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlvbkFuZEVtcHR5VHJhbnNmb3JtT3Bl
cmF0aW9uTGlzdCkKQEAgLTExNCw3ICsxMTQsNyBAQCBURVNUKEFuaW1hdGlvblRyYW5zbGF0aW9u
VXRpbFRlc3QsIGNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbldpdGhCaWdSb3RhdGlvbkFuZEVtcAog
ICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CiAg
ICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CiAKLSAgICBFWFBFQ1RfRkFMU0Uo
YW5pbWF0aW9uQ2FuQmVUcmFuc2xhdGVkKHZhbHVlcywgYW5pbWF0aW9uLmdldCgpKSk7CisgICAg
RVhQRUNUX1RSVUUoYW5pbWF0aW9uQ2FuQmVUcmFuc2xhdGVkKHZhbHVlcywgYW5pbWF0aW9uLmdl
dCgpKSk7CiB9CiAKIFRFU1QoQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdCwgY3JlYXRlVHJh
bnNmb3JtQW5pbWF0aW9uV2l0aFJvdGF0aW9uSW52b2x2aW5nTmVnYXRpdmVBbmdsZXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlv
bnNUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uc1Rlc3QuY3BwCmluZGV4IGRlYWY3YWQ3NGY1MzI5MWVmNWI0MWFhZTEwOWVkMjcxODBl
ZjBkOWUuLjllNGY3NWEzY2ViOGUwOTJmZjZlYjQ3ODZkNzAwZTg1ZDYzOTU4ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uc1Rlc3QuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3Qs
IHRyYW5zZm9ybVR5cGVzQXJlVW5pcXVlKQpAQCAtNDIsMTkgKzQzLDE5IEBAIFRFU1QoV2ViVHJh
bnNmb3JtT3BlcmF0aW9uVGVzdCwgdHJhbnNmb3JtVHlwZXNBcmVVbmlxdWUpCiAgICAgVmVjdG9y
PE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IHRyYW5zZm9ybXM7CiAKICAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zKiB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7
Ci0gICAgdG9BZGQtPmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0b0FkZC0+YXBwZW5k
VHJhbnNsYXRlKDEsIDAsIDApOwogICAgIHRyYW5zZm9ybXMuYXBwZW5kKGFkb3B0UHRyKHRvQWRk
KSk7CiAKICAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7Ci0gICAgdG9B
ZGQtPmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAwKTsKKyAgICB0b0FkZC0+YXBwZW5kUm90YXRlKDAs
IDAsIDEsIDIpOwogICAgIHRyYW5zZm9ybXMuYXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CiAKICAg
ICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7Ci0gICAgdG9BZGQtPmFwcGVu
ZFNjYWxlKDEsIDEsIDEpOworICAgIHRvQWRkLT5hcHBlbmRTY2FsZSgyLCAyLCAyKTsKICAgICB0
cmFuc2Zvcm1zLmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOwogCiAgICAgdG9BZGQgPSBuZXcgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucygpOwotICAgIHRvQWRkLT5hcHBlbmRTa2V3KDAsIDApOworICAg
IHRvQWRkLT5hcHBlbmRTa2V3KDEsIDApOwogICAgIHRyYW5zZm9ybXMuYXBwZW5kKGFkb3B0UHRy
KHRvQWRkKSk7CiAKICAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CkBA
IC03MiwxOSArNzMsMTkgQEAgVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCB0cmFuc2Zv
cm1UeXBlc0FyZVVuaXF1ZSkKIFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgbWF0Y2hU
eXBlc1NhbWVMZW5ndGgpCiB7CiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2xhdGVz
OwotICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwotICAgIHRyYW5zbGF0
ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwotICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNs
YXRlKDAsIDAsIDApOworICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOwor
ICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIHRyYW5zbGF0ZXMu
YXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOwogCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBz
a2V3czsKLSAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOwotICAgIHNrZXdzLmFwcGVuZFNrZXco
MCwgMCk7Ci0gICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKKyAgICBza2V3cy5hcHBlbmRTa2V3
KDAsIDIpOworICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMik7CisgICAgc2tld3MuYXBwZW5kU2tl
dygwLCAyKTsKIAogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdHJhbnNsYXRlczI7Ci0gICAg
dHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwotICAgIHRyYW5zbGF0ZXMyLmFw
cGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKLSAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUo
MCwgMCwgMCk7CisgICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDIsIDApOworICAg
IHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAyLCAwKTsKKyAgICB0cmFuc2xhdGVzMi5h
cHBlbmRUcmFuc2xhdGUoMCwgMiwgMCk7CiAKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRy
YW5zbGF0ZXMzID0gdHJhbnNsYXRlczI7CiAKQEAgLTk2LDIyICs5Nyw4NCBAQCBURVNUKFdlYlRy
YW5zZm9ybU9wZXJhdGlvblRlc3QsIG1hdGNoVHlwZXNTYW1lTGVuZ3RoKQogVEVTVChXZWJUcmFu
c2Zvcm1PcGVyYXRpb25UZXN0LCBtYXRjaFR5cGVzRGlmZmVyZW50TGVuZ3RoKQogewogICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgdHJhbnNsYXRlczsKLSAgICB0cmFuc2xhdGVzLmFwcGVuZFRy
YW5zbGF0ZSgwLCAwLCAwKTsKLSAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAw
KTsKLSAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0cmFuc2xh
dGVzLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5z
bGF0ZSgxLCAwLCAwKTsKKyAgICB0cmFuc2xhdGVzLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsK
IAogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgc2tld3M7Ci0gICAgc2tld3MuYXBwZW5kU2tl
dygwLCAwKTsKLSAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOworICAgIHNrZXdzLmFwcGVuZFNr
ZXcoMiwgMCk7CisgICAgc2tld3MuYXBwZW5kU2tldygyLCAwKTsKIAogICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgdHJhbnNsYXRlczI7Ci0gICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRl
KDAsIDAsIDApOwotICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAg
ICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMiwgMCk7CisgICAgdHJhbnNsYXRlczIu
YXBwZW5kVHJhbnNsYXRlKDAsIDIsIDApOwogCiAgICAgRVhQRUNUX0ZBTFNFKHRyYW5zbGF0ZXMu
bWF0Y2hlc1R5cGVzKHNrZXdzKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHRyYW5zbGF0ZXMubWF0Y2hl
c1R5cGVzKHRyYW5zbGF0ZXMyKSk7CiB9CiAKK3ZvaWQgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKFZl
Y3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiogb3BlcmF0aW9ucykKK3sKKyAg
ICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKiB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zKCk7CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0
b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFRy
YW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBvcGVyYXRpb25zLT5hcHBlbmQoYWRvcHRQdHIodG9BZGQp
KTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0Fk
ZC0+YXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRvQWRkLT5hcHBlbmRUcmFuc2xhdGUo
MCwgMCwgMCk7CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAg
ICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVu
ZFNjYWxlKDEsIDEsIDEpOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkp
OworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRk
LT5hcHBlbmRTY2FsZSgxLCAxLCAxKTsKKyAgICB0b0FkZC0+YXBwZW5kU2NhbGUoMSwgMSwgMSk7
CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9
IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFNrZXcoMCwg
MCk7CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0Fk
ZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFNrZXco
MCwgMCk7CisgICAgdG9BZGQtPmFwcGVuZFNrZXcoMCwgMCk7CisgICAgb3BlcmF0aW9ucy0+YXBw
ZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAwKTsKKyAgICBvcGVy
YXRpb25zLT5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kUm90YXRlKDAsIDAsIDEsIDAp
OworICAgIHRvQWRkLT5hcHBlbmRSb3RhdGUoMCwgMCwgMSwgMCk7CisgICAgb3BlcmF0aW9ucy0+
YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgpKTsKKyAgICBvcGVyYXRpb25zLT5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAg
IHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5k
TWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworICAgIHRvQWRkLT5hcHBlbmRNYXRy
aXgoV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFk
b3B0UHRyKHRvQWRkKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgaWRl
bnRpdHlBbHdheXNNYXRjaGVzKQoreworICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucz4gPiBvcGVyYXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0aW9ucygmb3BlcmF0
aW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBvcGVyYXRpb25zLnNpemUoKTsg
KytqKQorICAgICAgICAgICAgRVhQRUNUX1RSVUUob3BlcmF0aW9uc1tpXS0+bWF0Y2hlc1R5cGVz
KCpvcGVyYXRpb25zW2pdKSk7CisgICAgfQorfQorCiBURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlv
blRlc3QsIGFwcGx5VHJhbnNsYXRlKQogewogICAgIGRvdWJsZSB4ID0gMTsKQEAgLTMzOSwzICs0
MDIsMjM4IEBAIFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRXaGVuVHlwZXNE
b05vdE1hdGNoKQogCiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3Rl
ZCwgb3BlcmF0aW9uc1RvLmJsZW5kKG9wZXJhdGlvbnNGcm9tLCBwcm9ncmVzcykpOwogfQorCitU
RVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGxhcmdlUm90YXRpb25zV2l0aFNhbWVBeGlz
KQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc0Zyb207CisgICAgb3Bl
cmF0aW9uc0Zyb20uYXBwZW5kUm90YXRlKDAsIDAsIDEsIDApOworCisgICAgV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zVG87CisgICAgb3BlcmF0aW9uc1RvLmFwcGVuZFJvdGF0ZSgw
LCAwLCAyLCAzNjApOworCisgICAgZG91YmxlIHByb2dyZXNzID0gMC41OworCisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgZXhwZWN0ZWQucm90YXRlM2QoMCwgMCwg
MSwgMTgwKTsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQs
IG9wZXJhdGlvbnNUby5ibGVuZChvcGVyYXRpb25zRnJvbSwgcHJvZ3Jlc3MpKTsKK30KKworVEVT
VChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBsYXJnZVJvdGF0aW9uc1dpdGhTYW1lQXhpc0lu
RGlmZmVyZW50RGlyZWN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uc0Zyb207CisgICAgb3BlcmF0aW9uc0Zyb20uYXBwZW5kUm90YXRlKDAsIDAsIDEsIDE4MCk7
CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNUbzsKKyAgICBvcGVyYXRp
b25zVG8uYXBwZW5kUm90YXRlKDAsIDAsIC0xLCAxODApOworCisgICAgZG91YmxlIHByb2dyZXNz
ID0gMC41OworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisKKyAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zVG8uYmxl
bmQob3BlcmF0aW9uc0Zyb20sIHByb2dyZXNzKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uVGVzdCwgbGFyZ2VSb3RhdGlvbnNXaXRoRGlmZmVyZW50QXhlcykKK3sKKyAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNGcm9tOworICAgIG9wZXJhdGlvbnNGcm9tLmFw
cGVuZFJvdGF0ZSgwLCAwLCAxLCAxODApOworCisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zVG87CisgICAgb3BlcmF0aW9uc1RvLmFwcGVuZFJvdGF0ZSgwLCAxLCAwLCAxODAp
OworCisgICAgZG91YmxlIHByb2dyZXNzID0gMC41OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeEZyb207CisgICAgbWF0cml4RnJvbS5yb3RhdGUzZCgwLCAwLCAxLCAxODApOwor
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4VG87CisgICAgbWF0cml4VG8ucm90
YXRlM2QoMCwgMSwgMCwgMTgwKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkID0gbWF0cml4VG87CisgICAgZXhwZWN0ZWQuYmxlbmQobWF0cml4RnJvbSwgcHJvZ3Jlc3Mp
OworCisgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0
aW9uc1RvLmJsZW5kKG9wZXJhdGlvbnNGcm9tLCBwcm9ncmVzcykpOworfQorCitURVNUKFdlYlRy
YW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kUm90YXRpb25Gcm9tSWRlbnRpdHkpCit7CisgICAg
VmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5T3BlcmF0aW9u
czsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9ucyk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXplKCk7ICsraSkg
eworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kUm90YXRlKDAsIDAsIDEsIDM2MCk7CisKKyAgICAgICAgZG91YmxlIHBy
b2dyZXNzID0gMC41OworCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVk
OworICAgICAgICBleHBlY3RlZC5yb3RhdGUzZCgwLCAwLCAxLCAxODApOworCisgICAgICAgIEVY
UEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYmxlbmQo
KmlkZW50aXR5T3BlcmF0aW9uc1tpXSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1QoV2Vi
VHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRUcmFuc2xhdGlvbkZyb21JZGVudGl0eSkKK3sK
KyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVy
YXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAg
ICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoMiwgMiwgMik7CisKKyAgICAgICAgZG91Ymxl
IHByb2dyZXNzID0gMC41OworCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkOworICAgICAgICBleHBlY3RlZC50cmFuc2xhdGUzZCgxLCAxLCAxKTsKKworICAgICAgICBF
WFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zLmJsZW5k
KCppZGVudGl0eU9wZXJhdGlvbnNbaV0sIHByb2dyZXNzKSk7CisgICAgfQorfQorCitURVNUKFdl
YlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kU2NhbGVGcm9tSWRlbnRpdHkpCit7CisgICAg
VmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5T3BlcmF0aW9u
czsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9ucyk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXplKCk7ICsraSkg
eworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kU2NhbGUoMywgMywgMyk7CisKKyAgICAgICAgZG91YmxlIHByb2dyZXNz
ID0gMC41OworCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAg
ICAgICBleHBlY3RlZC5zY2FsZTNkKDIsIDIsIDIpOworCisgICAgICAgIEVYUEVDVF9UUkFOU0ZP
Uk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYmxlbmQoKmlkZW50aXR5T3Bl
cmF0aW9uc1tpXSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uVGVzdCwgYmxlbmRTa2V3RnJvbUlkZW50aXR5KQoreworICAgIFZlY3RvcjxPd25QdHI8
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVudGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0SWRl
bnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJhdGlvbnMpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBvcGVyYXRpb25zLmFwcGVu
ZFNrZXcoMiwgMik7CisKKyAgICAgICAgZG91YmxlIHByb2dyZXNzID0gMC41OworCisgICAgICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgICAgICBleHBlY3RlZC5za2V3
WCgxKTsKKyAgICAgICAgZXhwZWN0ZWQuc2tld1koMSk7CisKKyAgICAgICAgRVhQRUNUX1RSQU5T
Rk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9ucy5ibGVuZCgqaWRlbnRpdHlP
cGVyYXRpb25zW2ldLCBwcm9ncmVzcykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1P
cGVyYXRpb25UZXN0LCBibGVuZFBlcnNwZWN0aXZlRnJvbUlkZW50aXR5KQoreworICAgIFZlY3Rv
cjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVudGl0eU9wZXJhdGlvbnM7Cisg
ICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJhdGlvbnMpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBvcGVyYXRp
b25zLmFwcGVuZFBlcnNwZWN0aXZlKDEwMDApOworCisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9
IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAg
ICAgZXhwZWN0ZWQuYXBwbHlQZXJzcGVjdGl2ZSg1MDAgKyAwLjUgKiBudW1lcmljX2xpbWl0czxk
b3VibGU+OjptYXgoKSk7CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZCwgb3BlcmF0aW9ucy5ibGVuZCgqaWRlbnRpdHlPcGVyYXRpb25zW2ldLCBwcm9n
cmVzcykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVu
ZFJvdGF0aW9uVG9JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0aW9u
cygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRl
bnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRSb3RhdGUoMCwgMCwg
MSwgMzYwKTsKKworICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVkLnJvdGF0ZTNk
KDAsIDAsIDEsIDE4MCk7CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZCwgaWRlbnRpdHlPcGVyYXRpb25zW2ldLT5ibGVuZChvcGVyYXRpb25zLCBwcm9n
cmVzcykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVu
ZFRyYW5zbGF0aW9uVG9JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50aXR5T3BlcmF0
aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUo
MiwgMiwgMik7CisKKyAgICAgICAgZG91YmxlIHByb2dyZXNzID0gMC41OworCisgICAgICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgICAgICBleHBlY3RlZC50cmFuc2xh
dGUzZCgxLCAxLCAxKTsKKworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VR
KGV4cGVjdGVkLCBpZGVudGl0eU9wZXJhdGlvbnNbaV0tPmJsZW5kKG9wZXJhdGlvbnMsIHByb2dy
ZXNzKSk7CisgICAgfQorfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5k
U2NhbGVUb0lkZW50aXR5KQoreworICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucz4gPiBpZGVudGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZp
ZGVudGl0eU9wZXJhdGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0
eU9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zOworICAgICAgICBvcGVyYXRpb25zLmFwcGVuZFNjYWxlKDMsIDMsIDMpOwor
CisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0ZWQuc2NhbGUzZCgyLCAyLCAyKTsK
KworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBpZGVu
dGl0eU9wZXJhdGlvbnNbaV0tPmJsZW5kKG9wZXJhdGlvbnMsIHByb2dyZXNzKSk7CisgICAgfQor
fQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kU2tld1RvSWRlbnRpdHkp
Cit7CisgICAgVmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5
T3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9u
cyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Cisg
ICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kU2tldygyLCAyKTsKKworICAgICAgICBkb3VibGUgcHJv
Z3Jlc3MgPSAwLjU7CisKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7
CisgICAgICAgIGV4cGVjdGVkLnNrZXdYKDEpOworICAgICAgICBleHBlY3RlZC5za2V3WSgxKTsK
KworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBpZGVu
dGl0eU9wZXJhdGlvbnNbaV0tPmJsZW5kKG9wZXJhdGlvbnMsIHByb2dyZXNzKSk7CisgICAgfQor
fQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kUGVyc3BlY3RpdmVUb0lk
ZW50aXR5KQoreworICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBp
ZGVudGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9w
ZXJhdGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlv
bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zOworICAgICAgICBvcGVyYXRpb25zLmFwcGVuZFBlcnNwZWN0aXZlKDEwMDApOworCisgICAg
ICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0ZWQuYXBwbHlQZXJzcGVjdGl2ZSg1MDAgKyAw
LjUgKiBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CisKKyAgICAgICAgRVhQRUNUX1RS
QU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgaWRlbnRpdHlPcGVyYXRpb25zW2ldLT5i
bGVuZChvcGVyYXRpb25zLCBwcm9ncmVzcykpOworICAgIH0KK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160884</attachid>
            <date>2012-08-27 19:20:22 -0700</date>
            <delta_ts>2012-08-27 20:38:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94860-20120827222013.patch</filename>
            <type>text/plain</type>
            <size>37417</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2ODM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBkOGZmN2I5NjI3ODlj
YzI1NGZhM2VhMTc4MmNkMzRkN2Q2ZTFhYmU5Li4zOGUxMTY4NDRjMzllMjdkNmI0ZDQ3MTkxM2Q0
MDMxMTQyZjYyNjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wOC0yNCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFNob3VsZCBhY2NlbGVyYXRlIHJvdGF0aW9ucyBvZiA+PSAxODAgZGVncmVlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQ4NjAKKworICAgICAgICBS
ZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBXaGVuIGdlbmVyYWxpemluZyB0
aGUga2V5ZnJhbWUgaW50ZXJwb2xhdGlvbiwgaXQgYmVjYW1lIHVzZWZ1bCB0byBhcHBlbmQgYW4g
aWRlbnRpdHkgdHJhbnNmb3JtIG9wZXJhdGlvbiwKKyAgICAgICAgYW5kIHRvIGFzayBhIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb2JqZWN0IGlmIGl0IGlzSWRlbnRpdHkoKS4KKworICAgICAgICAq
IGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg6CisgICAgICAgIChXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zKToKKwogMjAxMi0wOC0yNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1l
c3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ2xlYW4gdXAgZGVwZW5kZW5j
aWVzIG9mIFdlYlNjcm9sbGJhciBhbmQgV2ViU2Nyb2xsYmFyTGF5ZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0
Nzg0NDhiYjhmMjk3ZTI1MmUwNjA0ODkzZDBkNDE3NGRkNWRlZTFkLi5iODMzMjQzNTU4OTdiYTMy
MTg2YWU0OTY2OTZkNGEwNTQwN2MwYzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcgQEAKKzIw
MTItMDgtMjQgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBTaG91bGQgYWNjZWxlcmF0ZSByb3RhdGlvbnMgb2YgPj0gMTgwIGRlZ3JlZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0ODYwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uIG5vdyBzdG9yZXMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGludGVycG9sYXRl
CisgICAgICAgIHdpdGhvdXQgcmVzb3J0aW5nIHRvIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpi
bGVuZCB3aGljaCBpcyBib3RoCisgICAgICAgIGV4cGVuc2l2ZSwgYW5kIGluIHRoZSBjYXNlIG9m
IGJpZyByb3RhdGlvbnMsIGVycm9yIHByb25lLiBGb3IgZXhhbXBsZSwKKyAgICAgICAgd2Ugbm93
IHN0b3JlIHRoZSBheGlzIGFuZCBhbmdsZSBmb3Igcm90YXRpb25zLCBzbyBpZiB0d28gcm90YXRp
b25zIGFyZQorICAgICAgICBpbnRlcnBvbGF0ZWQsIGFuZCB0aGV5IGFyZSBhYm91dCB0aGUgc2Ft
ZSBheGlzLCB3ZSBjYW4gc2ltcGx5CisgICAgICAgIGludGVycG9sYXRlIHRoZSBhbmdsZXMuCisK
KyAgICAgICAgVW5pdCB0ZXN0czoKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0
LnRyYW5zZm9ybVR5cGVzQXJlVW5pcXVlCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdC5tYXRjaFR5cGVzU2FtZUxlbmd0aAorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
blRlc3QuaWRlbnRpdHlBbHdheXNNYXRjaGVzCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhTYW1lQXhpcworICAgICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvblRlc3QubGFyZ2VSb3RhdGlvbnNXaXRoU2FtZUF4aXNJbkRpZmZlcmVudERpcmVj
dGlvbgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QubGFyZ2VSb3RhdGlvbnNX
aXRoRGlmZmVyZW50QXhlcworICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYmxl
bmRSb3RhdGlvbkZyb21JZGVudGl0eQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRl
c3QuYmxlbmRUcmFuc2xhdGlvbkZyb21JZGVudGl0eQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvblRlc3QuYmxlbmRTY2FsZUZyb21JZGVudGl0eQorICAgICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvblRlc3QuYmxlbmRTa2V3RnJvbUlkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uVGVzdC5ibGVuZFBlcnNwZWN0aXZlRnJvbUlkZW50aXR5CisgICAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFJvdGF0aW9uVG9JZGVudGl0eQorICAgICAg
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QuYmxlbmRUcmFuc2xhdGlvblRvSWRlbnRpdHkK
KyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kU2NhbGVUb0lkZW50aXR5
CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFNrZXdUb0lkZW50aXR5
CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFBlcnNwZWN0aXZlVG9J
ZGVudGl0eQorICAgICAgICAgIEFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbFRlc3QuY3JlYXRlVHJh
bnNmb3JtQW5pbWF0aW9uV2l0aEJpZ1JvdGF0aW9uCisgICAgICAgICAgQW5pbWF0aW9uVHJhbnNs
YXRpb25VdGlsVGVzdC5jcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRpb25BbmRF
bXB0eVRyYW5zZm9ybU9wZXJhdGlvbkxpc3QKKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChzdGQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlv
bik6CisgICAgICAgIChXZWJUcmFuc2Zvcm1PcGVyYXRpb24pOgorICAgICAgICAgIEFkZGVkIHgg
eSB6IGFuZCBhbmdsZS4KKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpp
c0lkZW50aXR5KToKKyAgICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhpcy0+bWF0cml4LmlzSWRl
bnRpdHkoKQorICAgICAgICAoV2ViS2l0Ojppc0lkZW50aXR5KToKKyAgICAgICAgICBSZXR1cm5z
IHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIG51bGwgb3IgLT5pc0lkZW50aXR5KCkKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OnNoYXJlU2FtZUF4aXMpOgorICAgICAgICAgIEEg
aGVscGVyIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiB0d28gdHJhbnNmb3JtIG9wZXJhdGlv
bnMKKyAgICAgICAgICBzaGFyZSB0aGUgc2FtZSBheGlzLiBBbHNvIHJldHVybnMgdGhlIGF4aXMg
YW5kICdmcm9tJyBhbmdsZQorICAgICAgICAgIHRvIHVzZSBpbiB0aGUgaW50ZXJwb2xhdGlvbiAo
aW4gY2FzZSB0aGUgYXhlcyBwb2ludCBpbiBkaWZmZXJlbnQKKyAgICAgICAgICBkaXJlY3Rpb25z
KS4KKyAgICAgICAgKFdlYktpdDo6YmxlbmREb3VibGVzKToKKyAgICAgICAgICBMaW5lYXJseSBp
bnRlcnBvbGF0ZXMgZG91Ymxlcy4KKyAgICAgICAgKFdlYktpdDo6YmxlbmRUcmFuc2Zvcm1PcGVy
YXRpb25zKToKKyAgICAgICAgICBCbGVuZHMgdHdvIFdlYlRyYW5zZm9ybU9wZXJhdGlvbiBvYmpl
Y3RzLgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zOjpibGVuZCk6Cisg
ICAgICAgICAgQmxlbmRzIHR3byBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9iamVjdHMsIHRha2lu
ZyBzcGVjaWFsIGNhcmUKKyAgICAgICAgICB3aGVuIGVpdGhlciBpc0lkZW50aXR5KCkuCisgICAg
ICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6Om1hdGNoZXNUeXBlcyk6CisgICAg
ICAgICAgV2FzIGNoYW5nZWQgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IGlkZW50aXR5IHRyYW5z
Zm9ybSBvcGVyYXRpb25zCisgICAgICAgICAgbWF0Y2ggYW55dGhpbmcuCisgICAgICAgIChXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFRyYW5zbGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFJvdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFNjYWxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kU2tldyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFBlcnNwZWN0aXZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kSWRlbnRpdHkpOgorICAgICAg
ICAgIFRoZSAnYXBwZW5kJyBmdW5jdGlvbnMgYWxsIHBvcHVsYXRlIHRoZSBuZXcgbWVtYmVycyBp
bgorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uczo6aXNJZGVudGl0eSk6CisgICAgICAgICAgUmV0dXJucyBmYWxz
ZSBpZmYgYW55IG9mIGl0cyB0cmFuc2Zvcm0gb3BlcmF0aW9ucyAhaXNJZGVudGl0eSgpLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRp
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAgIFJl
bW92ZWQgdGhlID49IDE4MCBkZWdyZWUgcmVzdHJpY3Rpb24uCisKIDIwMTItMDgtMjcgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFN0
b3AgdGV4dHVyZSB1cGRhdGVzIHdoZW4gY29udGV4dCBpcyBsb3N0LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCAzNjE3Y2VkMTE1Yjc3NjE0YWU2MGQwOGE5NDI1MDkxYzBlYzhmMTJkLi5j
NjQ1NWJiMWRkYzNkOGZjZjEzM2Y2MGM4NDQ1YWQ2ZWJhYjk2ODYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA4LTI0ICBJYW4gVm9sbGljayAgPHZv
bGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2hvdWxkIGFjY2VsZXJh
dGUgcm90YXRpb25zIG9mID49IDE4MCBkZWdyZWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDg2MAorCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVz
IFJvYmluc29uLgorCisgICAgICAgIEFkZGVkIG5ldyB1bml0IHRlc3RzOgorICAgICAgICAgIFdl
YlRyYW5zZm9ybU9wZXJhdGlvblRlc3QudHJhbnNmb3JtVHlwZXNBcmVVbmlxdWUKKyAgICAgICAg
ICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0Lm1hdGNoVHlwZXNTYW1lTGVuZ3RoCisgICAgICAg
ICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5pZGVudGl0eUFsd2F5c01hdGNoZXMKKyAgICAg
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmxhcmdlUm90YXRpb25zV2l0aFNhbWVBeGlz
CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhT
YW1lQXhpc0luRGlmZmVyZW50RGlyZWN0aW9uCisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdC5sYXJnZVJvdGF0aW9uc1dpdGhEaWZmZXJlbnRBeGVzCisgICAgICAgICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFJvdGF0aW9uRnJvbUlkZW50aXR5CisgICAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFRyYW5zbGF0aW9uRnJvbUlkZW50aXR5Cisg
ICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFNjYWxlRnJvbUlkZW50aXR5
CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVuZFNrZXdGcm9tSWRlbnRp
dHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUGVyc3BlY3RpdmVG
cm9tSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LmJsZW5kUm90
YXRpb25Ub0lkZW50aXR5CisgICAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdC5ibGVu
ZFRyYW5zbGF0aW9uVG9JZGVudGl0eQorICAgICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvblRl
c3QuYmxlbmRTY2FsZVRvSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25U
ZXN0LmJsZW5kU2tld1RvSWRlbnRpdHkKKyAgICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25U
ZXN0LmJsZW5kUGVyc3BlY3RpdmVUb0lkZW50aXR5CisgICAgICAgICAgQW5pbWF0aW9uVHJhbnNs
YXRpb25VdGlsVGVzdC5jcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25XaXRoQmlnUm90YXRpb24KKyAg
ICAgICAgICBBbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LmNyZWF0ZVRyYW5zZm9ybUFuaW1h
dGlvbldpdGhCaWdSb3RhdGlvbkFuZEVtcHR5VHJhbnNmb3JtT3BlcmF0aW9uTGlzdAorCisgICAg
ICAgICogdGVzdHMvQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0
LmNwcDoKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoZ2V0SWRlbnRpdHlPcGVyYXRpb25zKToK
KwogMjAxMi0wOC0yNyAgRGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtDaHJvbWl1bV0gU3RvcCB0ZXh0dXJlIHVwZGF0ZXMgd2hlbiBjb250ZXh0IGlzIGxv
c3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucy5oCmluZGV4IGE0OTdhYWE1NTQ5ZDM0MDk5N2I4NmY4NzYzZjZlZGRj
NjE5YmRkOTYuLmU1NjVhZTdlOGFlMjYzZGJhMDMwN2QwMGE5ZmI3ZDc3ZjUxOGIwMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucy5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oCkBAIC03NCw2ICs3NCw5IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgYXBwZW5kU2tldyhkb3VibGUgeCwgZG91YmxlIHkpOwogICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBhcHBlbmRQZXJzcGVjdGl2ZShkb3VibGUgZGVwdGgpOwogICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBhcHBlbmRNYXRyaXgoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kSWRlbnRpdHkoKTsKKworICAgIFdFQktJVF9FWFBPUlQg
Ym9vbCBpc0lkZW50aXR5KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHJlc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAppbmRleCAx
MmJkMDBiMjZmNDgwZDEzOWI3YzIyNjllMjc3M2NjZDc2N2ZjMmU0Li5lMGMyMzA4OTNiN2YxNDli
ZjNhNzhlMzRhOTM5OWQ1YmNjNmQ4MzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucy5jcHAKQEAgLTI2LDggKzI2LDE1IEBACiAKICNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucy5oPgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIHsKK2NvbnN0IGRv
dWJsZSBFUFNJTE9OID0gMWUtNDsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb24gewpAQCAtMzcsMTEgKzQ0LDQzIEBAIHN0cnVjdCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb24gewogICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25TY2FsZSwKICAg
ICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldywKICAgICAgICAgV2ViVHJhbnNmb3JtT3Bl
cmF0aW9uUGVyc3BlY3RpdmUsCi0gICAgICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbk1hdHJpeAor
ICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25NYXRyaXgsCisgICAgICAgIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbklkZW50aXR5CiAgICAgfTsKIAorICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbigp
CisgICAgICAgIDogdHlwZShXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0eSkKKyAgICB7Cisg
ICAgfQorCiAgICAgVHlwZSB0eXBlOwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eDsKKworICAgIHVuaW9uIHsKKyAgICAgICAgZG91YmxlIHBlcnNwZWN0aXZlRGVwdGg7CisKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGRvdWJsZSB4LCB5OworICAgICAgICB9IHNrZXc7
CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICBkb3VibGUgeCwgeSwgejsKKyAgICAg
ICAgfSBzY2FsZTsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgZG91YmxlIHgsIHks
IHo7CisgICAgICAgIH0gdHJhbnNsYXRlOworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6OworICAgICAgICAgICAg
fSBheGlzOworCisgICAgICAgICAgICBkb3VibGUgYW5nbGU7CisgICAgICAgIH0gcm90YXRlOwor
ICAgIH07CisKKyAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtYXRyaXguaXNJ
ZGVudGl0eSgpOyB9CiB9OwogCiBjbGFzcyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zUHJpdmF0ZSB7
CkBAIC01NywxMyArOTYsMTY1IEBAIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnM6OmFwcGx5KCkgY29uc3QKICAgICByZXR1cm4gdG9SZXR1cm47CiB9CiAKK3N0
YXRpYyBib29sIGlzSWRlbnRpdHkoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBvcGVyYXRp
b24pCit7CisgICAgcmV0dXJuICFvcGVyYXRpb24gfHwgb3BlcmF0aW9uLT5pc0lkZW50aXR5KCk7
Cit9CisKK3N0YXRpYyBib29sIHNoYXJlU2FtZUF4aXMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uKiBmcm9tLCBjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb24qIHRvLCBkb3VibGUmIGF4aXNY
LCBkb3VibGUmIGF4aXNZLCBkb3VibGUmIGF4aXNaLCBkb3VibGUmIGFuZ2xlRnJvbSkKK3sKKyAg
ICBpZiAoaXNJZGVudGl0eShmcm9tKSAmJiBpc0lkZW50aXR5KHRvKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGlzSWRlbnRpdHkoZnJvbSkgJiYgIWlzSWRlbnRpdHkodG8pKSB7
CisgICAgICAgIGF4aXNYID0gdG8tPnJvdGF0ZS5heGlzLng7CisgICAgICAgIGF4aXNZID0gdG8t
PnJvdGF0ZS5heGlzLnk7CisgICAgICAgIGF4aXNaID0gdG8tPnJvdGF0ZS5heGlzLno7CisgICAg
ICAgIGFuZ2xlRnJvbSA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
ICghaXNJZGVudGl0eShmcm9tKSAmJiBpc0lkZW50aXR5KHRvKSkgeworICAgICAgICBheGlzWCA9
IGZyb20tPnJvdGF0ZS5heGlzLng7CisgICAgICAgIGF4aXNZID0gZnJvbS0+cm90YXRlLmF4aXMu
eTsKKyAgICAgICAgYXhpc1ogPSBmcm9tLT5yb3RhdGUuYXhpcy56OworICAgICAgICBhbmdsZUZy
b20gPSBmcm9tLT5yb3RhdGUuYW5nbGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGRvdWJsZSBsZW5ndGgyID0gZnJvbS0+cm90YXRlLmF4aXMueCAqIGZyb20tPnJvdGF0ZS5h
eGlzLnggKyBmcm9tLT5yb3RhdGUuYXhpcy55ICogZnJvbS0+cm90YXRlLmF4aXMueSArIGZyb20t
PnJvdGF0ZS5heGlzLnogKiBmcm9tLT5yb3RhdGUuYXhpcy56OworICAgIGRvdWJsZSBvdGhlckxl
bmd0aDIgPSB0by0+cm90YXRlLmF4aXMueCAqIHRvLT5yb3RhdGUuYXhpcy54ICsgdG8tPnJvdGF0
ZS5heGlzLnkgKiB0by0+cm90YXRlLmF4aXMueSArIHRvLT5yb3RhdGUuYXhpcy56ICogdG8tPnJv
dGF0ZS5heGlzLno7CisKKyAgICBpZiAobGVuZ3RoMiA8PSBFUFNJTE9OIHx8IG90aGVyTGVuZ3Ro
MiA8PSBFUFNJTE9OKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkb3VibGUgZG90ID0g
dG8tPnJvdGF0ZS5heGlzLnggKiBmcm9tLT5yb3RhdGUuYXhpcy54ICsgdG8tPnJvdGF0ZS5heGlz
LnkgKiBmcm9tLT5yb3RhdGUuYXhpcy55ICsgdG8tPnJvdGF0ZS5heGlzLnogKiBmcm9tLT5yb3Rh
dGUuYXhpcy56OworICAgIGRvdWJsZSBlcnJvciA9IGZhYnMoMS4wIC0gKGRvdCAqIGRvdCkgLyAo
bGVuZ3RoMiAqIG90aGVyTGVuZ3RoMikpOworICAgIGJvb2wgcmVzdWx0ID0gZXJyb3IgPCBFUFNJ
TE9OOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgYXhpc1ggPSB0by0+cm90YXRlLmF4aXMu
eDsKKyAgICAgICAgYXhpc1kgPSB0by0+cm90YXRlLmF4aXMueTsKKyAgICAgICAgYXhpc1ogPSB0
by0+cm90YXRlLmF4aXMuejsKKyAgICAgICAgLy8gSWYgdGhlIGF4ZXMgYXJlIHBvaW50aW5nIGlu
IG9wcG9zaXRlIGRpcmVjdGlvbnMsIHdlIG5lZWQgdG8gcmV2ZXJzZQorICAgICAgICAvLyB0aGUg
YW5nbGUuCisgICAgICAgIGFuZ2xlRnJvbSA9IGRvdCA+IDAgPyBmcm9tLT5yb3RhdGUuYW5nbGUg
OiAtZnJvbS0+cm90YXRlLmFuZ2xlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgZG91YmxlIGJsZW5kRG91Ymxlcyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIGZyb20gKiAoMSAtIHByb2dyZXNzKSArIHRvICogcHJv
Z3Jlc3M7Cit9CisKK3N0YXRpYyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBibGVuZFRyYW5zZm9y
bU9wZXJhdGlvbnMoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBjb25zdCBXZWJU
cmFuc2Zvcm1PcGVyYXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggdG9SZXR1cm47CisKKyAgICBpZiAoaXNJZGVudGl0eShmcm9tKSAmJiBp
c0lkZW50aXR5KHRvKSkKKyAgICAgICAgcmV0dXJuIHRvUmV0dXJuOworCisgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9uOjpUeXBlIGludGVycG9sYXRpb25UeXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0
aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25JZGVudGl0eTsKKyAgICBpZiAoaXNJZGVudGl0eSh0
bykpCisgICAgICAgIGludGVycG9sYXRpb25UeXBlID0gZnJvbS0+dHlwZTsKKyAgICBlbHNlCisg
ICAgICAgIGludGVycG9sYXRpb25UeXBlID0gdG8tPnR5cGU7CisKKyAgICBzd2l0Y2ggKGludGVy
cG9sYXRpb25UeXBlKSB7CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1PcGVyYXRpb246OldlYlRyYW5z
Zm9ybU9wZXJhdGlvblRyYW5zbGF0ZTogeworICAgICAgICBkb3VibGUgZnJvbVggPSBpc0lkZW50
aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0ZS54OworICAgICAgICBkb3VibGUgZnJvbVkg
PSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0ZS55OworICAgICAgICBkb3Vi
bGUgZnJvbVogPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnRyYW5zbGF0ZS56OworICAg
ICAgICBkb3VibGUgdG9YID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnRyYW5zbGF0ZS54Owor
ICAgICAgICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnRyYW5zbGF0ZS55
OworICAgICAgICBkb3VibGUgdG9aID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnRyYW5zbGF0
ZS56OworICAgICAgICB0b1JldHVybi50cmFuc2xhdGUzZChibGVuZERvdWJsZXMoZnJvbVgsIHRv
WCwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZERvdWJsZXMo
ZnJvbVksIHRvWSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVu
ZERvdWJsZXMoZnJvbVosIHRvWiwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25Sb3Rh
dGU6IHsKKyAgICAgICAgZG91YmxlIGF4aXNYID0gMDsKKyAgICAgICAgZG91YmxlIGF4aXNZID0g
MDsKKyAgICAgICAgZG91YmxlIGF4aXNaID0gMTsKKyAgICAgICAgZG91YmxlIGZyb21BbmdsZSA9
IDA7CisgICAgICAgIGRvdWJsZSB0b0FuZ2xlID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnJv
dGF0ZS5hbmdsZTsKKyAgICAgICAgaWYgKHNoYXJlU2FtZUF4aXMoZnJvbSwgdG8sIGF4aXNYLCBh
eGlzWSwgYXhpc1osIGZyb21BbmdsZSkpCisgICAgICAgICAgICB0b1JldHVybi5yb3RhdGUzZChh
eGlzWCwgYXhpc1ksIGF4aXNaLCBibGVuZERvdWJsZXMoZnJvbUFuZ2xlLCB0b0FuZ2xlLCBwcm9n
cmVzcykpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRvTWF0cml4OworICAgICAgICAgICAgaWYgKCFpc0lkZW50aXR5KHRvKSkKKyAgICAgICAg
ICAgICAgICB0b01hdHJpeCA9IHRvLT5tYXRyaXg7CisgICAgICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBmcm9tTWF0cml4OworICAgICAgICAgICAgaWYgKCFpc0lkZW50aXR5KGZyb20p
KQorICAgICAgICAgICAgICAgIGZyb21NYXRyaXggPSBmcm9tLT5tYXRyaXg7CisgICAgICAgICAg
ICB0b1JldHVybiA9IHRvTWF0cml4OworICAgICAgICAgICAgdG9SZXR1cm4uYmxlbmQoZnJvbU1h
dHJpeCwgcHJvZ3Jlc3MpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2NhbGU6IHsK
KyAgICAgICAgZG91YmxlIGZyb21YID0gaXNJZGVudGl0eShmcm9tKSA/IDEgOiBmcm9tLT5zY2Fs
ZS54OworICAgICAgICBkb3VibGUgZnJvbVkgPSBpc0lkZW50aXR5KGZyb20pID8gMSA6IGZyb20t
PnNjYWxlLnk7CisgICAgICAgIGRvdWJsZSBmcm9tWiA9IGlzSWRlbnRpdHkoZnJvbSkgPyAxIDog
ZnJvbS0+c2NhbGUuejsKKyAgICAgICAgZG91YmxlIHRvWCA9IGlzSWRlbnRpdHkodG8pID8gMSA6
IHRvLT5zY2FsZS54OworICAgICAgICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAxIDog
dG8tPnNjYWxlLnk7CisgICAgICAgIGRvdWJsZSB0b1ogPSBpc0lkZW50aXR5KHRvKSA/IDEgOiB0
by0+c2NhbGUuejsKKyAgICAgICAgdG9SZXR1cm4uc2NhbGUzZChibGVuZERvdWJsZXMoZnJvbVgs
IHRvWCwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRG91Ymxlcyhm
cm9tWSwgdG9ZLCBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmREb3Vi
bGVzKGZyb21aLCB0b1osIHByb2dyZXNzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldzogewor
ICAgICAgICBkb3VibGUgZnJvbVggPSBpc0lkZW50aXR5KGZyb20pID8gMCA6IGZyb20tPnNrZXcu
eDsKKyAgICAgICAgZG91YmxlIGZyb21ZID0gaXNJZGVudGl0eShmcm9tKSA/IDAgOiBmcm9tLT5z
a2V3Lnk7CisgICAgICAgIGRvdWJsZSB0b1ggPSBpc0lkZW50aXR5KHRvKSA/IDAgOiB0by0+c2tl
dy54OworICAgICAgICBkb3VibGUgdG9ZID0gaXNJZGVudGl0eSh0bykgPyAwIDogdG8tPnNrZXcu
eTsKKyAgICAgICAgdG9SZXR1cm4uc2tld1goYmxlbmREb3VibGVzKGZyb21YLCB0b1gsIHByb2dy
ZXNzKSk7CisgICAgICAgIHRvUmV0dXJuLnNrZXdZKGJsZW5kRG91Ymxlcyhmcm9tWSwgdG9ZLCBw
cm9ncmVzcykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJUcmFuc2Zvcm1P
cGVyYXRpb246OldlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZlOiB7CisgICAgICAgIGRv
dWJsZSBmcm9tUGVyc3BlY3RpdmVEZXB0aCA9IGlzSWRlbnRpdHkoZnJvbSkgPyBudW1lcmljX2xp
bWl0czxkb3VibGU+OjptYXgoKSA6IGZyb20tPnBlcnNwZWN0aXZlRGVwdGg7CisgICAgICAgIGRv
dWJsZSB0b1BlcnNwZWN0aXZlRGVwdGggPSBpc0lkZW50aXR5KHRvKSA/IG51bWVyaWNfbGltaXRz
PGRvdWJsZT46Om1heCgpIDogdG8tPnBlcnNwZWN0aXZlRGVwdGg7CisgICAgICAgIHRvUmV0dXJu
LmFwcGx5UGVyc3BlY3RpdmUoYmxlbmREb3VibGVzKGZyb21QZXJzcGVjdGl2ZURlcHRoLCB0b1Bl
cnNwZWN0aXZlRGVwdGgsIHByb2dyZXNzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uTWF0cml4OiB7
CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvTWF0cml4OworICAgICAgICBpZiAo
IWlzSWRlbnRpdHkodG8pKQorICAgICAgICAgICAgdG9NYXRyaXggPSB0by0+bWF0cml4OworICAg
ICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0cml4OworICAgICAgICBpZiAoIWlz
SWRlbnRpdHkoZnJvbSkpCisgICAgICAgICAgICBmcm9tTWF0cml4ID0gZnJvbS0+bWF0cml4Owor
ICAgICAgICB0b1JldHVybiA9IHRvTWF0cml4OworICAgICAgICB0b1JldHVybi5ibGVuZChmcm9t
TWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uSWRlbnRpdHk6CisgICAgICAg
IC8vIERvIG5vdGhpbmcuCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0b1Jl
dHVybjsKK30KKwogV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNmb3JtT3BlcmF0aW9u
czo6YmxlbmQoY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgZG91YmxlIHByb2dy
ZXNzKSBjb25zdAogewogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRvUmV0dXJuOworICAg
IGJvb2wgZnJvbUlkZW50aXR5ID0gZnJvbS5pc0lkZW50aXR5KCk7CisgICAgYm9vbCB0b0lkZW50
aXR5ID0gaXNJZGVudGl0eSgpOworICAgIGlmIChmcm9tSWRlbnRpdHkgJiYgdG9JZGVudGl0eSkK
KyAgICAgICAgcmV0dXJuIHRvUmV0dXJuOworCiAgICAgaWYgKG1hdGNoZXNUeXBlcyhmcm9tKSkg
ewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmRl
ZCA9IG1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5tYXRyaXg7Ci0gICAgICAgICAgICBibGVuZGVk
LmJsZW5kKGZyb20ubV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLm1hdHJpeCwgcHJvZ3Jlc3MpOwor
ICAgICAgICBzaXplX3QgbnVtT3BlcmF0aW9ucyA9IG1heChmcm9tSWRlbnRpdHkgPyAwIDogZnJv
bS5tX3ByaXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b0lkZW50aXR5ID8gMCA6IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCkp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9wZXJhdGlvbnM7ICsraSkgewor
ICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggYmxlbmRlZCA9IGJsZW5kVHJhbnNm
b3JtT3BlcmF0aW9ucygKKyAgICAgICAgICAgICAgICBmcm9tSWRlbnRpdHkgPyAwIDogJmZyb20u
bV9wcml2YXRlLT5vcGVyYXRpb25zW2ldLAorICAgICAgICAgICAgICAgIHRvSWRlbnRpdHkgPyAw
IDogJm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXSwKKyAgICAgICAgICAgICAgICBwcm9ncmVzcyk7
CiAgICAgICAgICAgICB0b1JldHVybi5tdWx0aXBseShibGVuZGVkKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CkBAIC03NiwxMSArMjY3LDE2IEBAIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM6OmJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvCiAK
IGJvb2wgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6bWF0Y2hlc1R5cGVzKGNvbnN0IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG90aGVyKSBjb25zdAogeworICAgIGlmIChpc0lkZW50aXR5KCkgfHwg
b3RoZXIuaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChtX3By
aXZhdGUtPm9wZXJhdGlvbnMuc2l6ZSgpICE9IG90aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5z
aXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9wcml2YXRlLT5vcGVyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3By
aXZhdGUtPm9wZXJhdGlvbnNbaV0udHlwZSAhPSBvdGhlci5tX3ByaXZhdGUtPm9wZXJhdGlvbnNb
aV0udHlwZSkKKyAgICAgICAgaWYgKG1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS50eXBlICE9IG90
aGVyLm1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS50eXBlCisgICAgICAgICAgICAmJiAhbV9wcml2
YXRlLT5vcGVyYXRpb25zW2ldLmlzSWRlbnRpdHkoKQorICAgICAgICAgICAgJiYgIW90aGVyLm1f
cHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50aXR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC05Miw2ICsyODgsOSBAQCB2b2lkIFdlYlRyYW5zZm9ybU9wZXJh
dGlvbnM6OmFwcGVuZFRyYW5zbGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KQogICAg
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbiB0b0FkZDsKICAgICB0b0FkZC5tYXRyaXgudHJhbnNsYXRl
M2QoeCwgeSwgeik7CiAgICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9uVHJhbnNsYXRlOworICAgIHRvQWRkLnRyYW5zbGF0ZS54ID0geDsK
KyAgICB0b0FkZC50cmFuc2xhdGUueSA9IHk7CisgICAgdG9BZGQudHJhbnNsYXRlLnogPSB6Owog
ICAgIG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwogfQogCkBAIC0xMDAsNiAr
Mjk5LDEwIEBAIHZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwZW5kUm90YXRlKGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSBkCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uIHRvQWRkOwogICAgIHRvQWRkLm1hdHJpeC5yb3RhdGUzZCh4LCB5LCB6LCBkZWdyZWVzKTsK
ICAgICB0b0FkZC50eXBlID0gV2ViVHJhbnNmb3JtT3BlcmF0aW9uOjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25Sb3RhdGU7CisgICAgdG9BZGQucm90YXRlLmF4aXMueCA9IHg7CisgICAgdG9BZGQucm90
YXRlLmF4aXMueSA9IHk7CisgICAgdG9BZGQucm90YXRlLmF4aXMueiA9IHo7CisgICAgdG9BZGQu
cm90YXRlLmFuZ2xlID0gZGVncmVlczsKICAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5k
KHRvQWRkKTsKIH0KIApAQCAtMTA4LDYgKzMxMSw5IEBAIHZvaWQgV2ViVHJhbnNmb3JtT3BlcmF0
aW9uczo6YXBwZW5kU2NhbGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeikKICAgICBXZWJU
cmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7CiAgICAgdG9BZGQubWF0cml4LnNjYWxlM2QoeCwgeSwg
eik7CiAgICAgdG9BZGQudHlwZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9uU2NhbGU7CisgICAgdG9BZGQuc2NhbGUueCA9IHg7CisgICAgdG9BZGQuc2NhbGUu
eSA9IHk7CisgICAgdG9BZGQuc2NhbGUueiA9IHo7CiAgICAgbV9wcml2YXRlLT5vcGVyYXRpb25z
LmFwcGVuZCh0b0FkZCk7CiB9CiAKQEAgLTExNyw2ICszMjMsOCBAQCB2b2lkIFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnM6OmFwcGVuZFNrZXcoZG91YmxlIHgsIGRvdWJsZSB5KQogICAgIHRvQWRkLm1h
dHJpeC5za2V3WCh4KTsKICAgICB0b0FkZC5tYXRyaXguc2tld1koeSk7CiAgICAgdG9BZGQudHlw
ZSA9IFdlYlRyYW5zZm9ybU9wZXJhdGlvbjo6V2ViVHJhbnNmb3JtT3BlcmF0aW9uU2tldzsKKyAg
ICB0b0FkZC5za2V3LnggPSB4OworICAgIHRvQWRkLnNrZXcueSA9IHk7CiAgICAgbV9wcml2YXRl
LT5vcGVyYXRpb25zLmFwcGVuZCh0b0FkZCk7CiB9CiAKQEAgLTEyNSw2ICszMzMsNyBAQCB2b2lk
IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6OmFwcGVuZFBlcnNwZWN0aXZlKGRvdWJsZSBkZXB0aCkK
ICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb24gdG9BZGQ7CiAgICAgdG9BZGQubWF0cml4LmFwcGx5
UGVyc3BlY3RpdmUoZGVwdGgpOwogICAgIHRvQWRkLnR5cGUgPSBXZWJUcmFuc2Zvcm1PcGVyYXRp
b246OldlYlRyYW5zZm9ybU9wZXJhdGlvblBlcnNwZWN0aXZlOworICAgIHRvQWRkLnBlcnNwZWN0
aXZlRGVwdGggPSBkZXB0aDsKICAgICBtX3ByaXZhdGUtPm9wZXJhdGlvbnMuYXBwZW5kKHRvQWRk
KTsKIH0KIApAQCAtMTM2LDYgKzM0NSwyMCBAQCB2b2lkIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM6
OmFwcGVuZE1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQogICAg
IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5hcHBlbmQodG9BZGQpOwogfQogCit2b2lkIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM6OmFwcGVuZElkZW50aXR5KCkKK3sKKyAgICBtX3ByaXZhdGUtPm9wZXJh
dGlvbnMuYXBwZW5kKFdlYlRyYW5zZm9ybU9wZXJhdGlvbigpKTsKK30KKworYm9vbCBXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zOjppc0lkZW50aXR5KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcHJpdmF0ZS0+b3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAoIW1fcHJpdmF0ZS0+b3BlcmF0aW9uc1tpXS5pc0lkZW50aXR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM6OnJlc2V0KCkKIHsKICAgICBtX3ByaXZhdGUucmVzZXQoMCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRp
b25UcmFuc2xhdGlvblV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcAppbmRleCA1YjRmOTk3ZjNiMGJj
MzFmOTUyMDc0OTk1MDUzZTc1YWNiNjk2ZDc0Li5hZThmOTAwN2I1ODg4MTdiMTBiM2JiYTM1NzUx
N2VkOWE1MzMxYzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5j
cHAKQEAgLTExMyw2ICsxMTMsOCBAQCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRvV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFucwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklE
RU5USVRZOgorICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5hcHBlbmRJZGVudGl0
eSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpOT05FOgogICAgICAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTQ1LDUxICsxNDcsOSBAQCBib29sIGlzUm90YXRpb25UeXBlKFRyYW5zZm9ybU9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlKQogICAgICAgICB8fCB0cmFuc2Zvcm1UeXBl
ID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOwogfQogCi1ib29sIGNhdXNlc1JvdGF0
aW9uT2ZBdExlYXN0MTgwRGVncmVlcyhjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdmFs
dWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBsYXN0VmFsdWUpCi17Ci0gICAgaWYg
KCFsYXN0VmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbnMmIG9wZXJhdGlvbnMgPSAqdmFsdWUtPnZhbHVlKCk7Ci0gICAgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyYgbGFzdE9wZXJhdGlvbnMgPSAqbGFzdFZhbHVlLT52YWx1ZSgpOwot
Ci0gICAgLy8gV2UnbGwgYmUgZG9pbmcgbWF0cml4IGludGVycG9sYXRpb24gaW4gdGhpcyBjYXNl
LiBObyByaXNrIG9mIGluY29ycmVjdCByb3RhdGlvbnMgaGVyZS4KLSAgICBpZiAob3BlcmF0aW9u
cy5zaXplKCkgJiYgbGFzdE9wZXJhdGlvbnMuc2l6ZSgpICYmICFvcGVyYXRpb25zLm9wZXJhdGlv
bnNNYXRjaChsYXN0T3BlcmF0aW9ucykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNp
emVfdCBudW1PcGVyYXRpb25zID0gbWF4KG9wZXJhdGlvbnMuc2l6ZSgpLCBsYXN0T3BlcmF0aW9u
cy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT3BlcmF0aW9uczsgKytp
KSB7Ci0gICAgICAgIGZsb2F0IGFuZ2xlID0gMDsKLSAgICAgICAgaWYgKGkgPCBvcGVyYXRpb25z
LnNpemUoKSkgewotICAgICAgICAgICAgaWYgKCFpc1JvdGF0aW9uVHlwZShvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKVtpXS0+Z2V0T3BlcmF0aW9uVHlwZSgpKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiByb3RhdGlvbiA9
IHN0YXRpY19jYXN0PFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpW2ldLmdldCgpKTsKLSAgICAgICAgICAgIGFuZ2xlID0gcm90YXRpb24tPmFuZ2xlKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmbG9hdCBsYXN0QW5nbGUgPSAwOwotICAgICAgICBpZiAo
aSA8IGxhc3RPcGVyYXRpb25zLnNpemUoKSkgewotICAgICAgICAgICAgaWYgKCFpc1JvdGF0aW9u
VHlwZShsYXN0T3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0tPmdldE9wZXJhdGlvblR5cGUoKSkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbiogbGFzdFJvdGF0aW9uID0gc3RhdGljX2Nhc3Q8Um90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uKj4obGFzdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2ldLmdldCgpKTsKLSAgICAgICAg
ICAgIGxhc3RBbmdsZSA9IGxhc3RSb3RhdGlvbi0+YW5nbGUoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChmYWJzKGFuZ2xlIC0gbGFzdEFuZ2xlKSA+PSAxODApCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHRlbXBsYXRlIDw+CiBi
b29sIGFwcGVuZEtleWZyYW1lV2l0aFN0YW5kYXJkVGltaW5nRnVuY3Rpb248VHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlLCBkb3VibGUga2V5VGltZSwg
Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1Bbmlt
YXRpb25WYWx1ZSogbGFzdFZhbHVlLCBXZWJLaXQ6OldlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGUgdGltaW5nRnVuY3Rpb25UeXBlLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUp
CiB7Ci0gICAgaWYgKGNhdXNlc1JvdGF0aW9uT2ZBdExlYXN0MTgwRGVncmVlcyh2YWx1ZSwgbGFz
dFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUo
KSwgYm94U2l6ZSk7CiAgICAgaWYgKG9wZXJhdGlvbnMuYXBwbHkoKS5pc0ludmVydGlibGUoKSkg
ewogICAgICAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKGtleVRpbWUsIG9wZXJh
dGlvbnMpLCB0aW1pbmdGdW5jdGlvblR5cGUpOwpAQCAtMjAxLDkgKzE2MSw2IEBAIGJvb2wgYXBw
ZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25W
YWx1ZSwgV2ViVHJhbnNmCiB0ZW1wbGF0ZSA8PgogYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhDdXN0
b21CZXppZXJUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgV2ViVHJhbnNm
b3JtS2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBsYXN0VmFsdWUs
IGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgRmxvYXRT
aXplJiBib3hTaXplKQogewotICAgIGlmIChjYXVzZXNSb3RhdGlvbk9mQXRMZWFzdDE4MERlZ3Jl
ZXModmFsdWUsIGxhc3RWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9ucyA9IHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygq
dmFsdWUtPnZhbHVlKCksIGJveFNpemUpOwogICAgIGlmIChvcGVyYXRpb25zLmFwcGx5KCkuaXNJ
bnZlcnRpYmxlKCkpIHsKICAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShr
ZXlUaW1lLCBvcGVyYXRpb25zKSwgeDEsIHkxLCB4MiwgeTIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9BbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVz
dC5jcHAKaW5kZXggN2Y2M2UxZjczZDJlNjc5ZjQwODA5YTJmZGY0YjUzN2E3MTNmYjE1Mi4uNTYy
Zjc4NTIwMmE1ZDNkNjZkNjE5OGM3OThlY2ZmNDUyMzBkMDNjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9BbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRp
bFRlc3QuY3BwCkBAIC05Niw3ICs5Niw3IEBAIFRFU1QoQW5pbWF0aW9uVHJhbnNsYXRpb25VdGls
VGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uV2l0aEJpZ1JvdGF0aW9uKQogICAgIFJlZlB0
cjxBbmltYXRpb24+IGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7CiAgICAgYW5pbWF0
aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7CiAKLSAgICBFWFBFQ1RfRkFMU0UoYW5pbWF0aW9u
Q2FuQmVUcmFuc2xhdGVkKHZhbHVlcywgYW5pbWF0aW9uLmdldCgpKSk7CisgICAgRVhQRUNUX1RS
VUUoYW5pbWF0aW9uQ2FuQmVUcmFuc2xhdGVkKHZhbHVlcywgYW5pbWF0aW9uLmdldCgpKSk7CiB9
CiAKIFRFU1QoQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdCwgY3JlYXRlVHJhbnNmb3JtQW5p
bWF0aW9uV2l0aEJpZ1JvdGF0aW9uQW5kRW1wdHlUcmFuc2Zvcm1PcGVyYXRpb25MaXN0KQpAQCAt
MTE0LDcgKzExNCw3IEBAIFRFU1QoQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsVGVzdCwgY3JlYXRl
VHJhbnNmb3JtQW5pbWF0aW9uV2l0aEJpZ1JvdGF0aW9uQW5kRW1wCiAgICAgUmVmUHRyPEFuaW1h
dGlvbj4gYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKICAgICBhbmltYXRpb24tPnNl
dER1cmF0aW9uKGR1cmF0aW9uKTsKIAotICAgIEVYUEVDVF9GQUxTRShhbmltYXRpb25DYW5CZVRy
YW5zbGF0ZWQodmFsdWVzLCBhbmltYXRpb24uZ2V0KCkpKTsKKyAgICBFWFBFQ1RfVFJVRShhbmlt
YXRpb25DYW5CZVRyYW5zbGF0ZWQodmFsdWVzLCBhbmltYXRpb24uZ2V0KCkpKTsKIH0KIAogVEVT
VChBbmltYXRpb25UcmFuc2xhdGlvblV0aWxUZXN0LCBjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25X
aXRoUm90YXRpb25JbnZvbHZpbmdOZWdhdGl2ZUFuZ2xlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5jcHAK
aW5kZXggZGVhZjdhZDc0ZjUzMjkxZWY1YjQxYWFlMTA5ZWQyNzE4MGVmMGQ5ZS4uOWU0Zjc1YTNj
ZWI4ZTA5MmZmNmViNDc4NmQ3MDBlODVkNjM5NThmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5jcHAK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKIFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgdHJhbnNmb3JtVHlwZXNB
cmVVbmlxdWUpCkBAIC00MiwxOSArNDMsMTkgQEAgVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25U
ZXN0LCB0cmFuc2Zvcm1UeXBlc0FyZVVuaXF1ZSkKICAgICBWZWN0b3I8T3duUHRyPFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnM+ID4gdHJhbnNmb3JtczsKIAogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMqIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKLSAgICB0b0FkZC0+YXBw
ZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRvQWRkLT5hcHBlbmRUcmFuc2xhdGUoMSwgMCwg
MCk7CiAgICAgdHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKIAogICAgIHRvQWRk
ID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKLSAgICB0b0FkZC0+YXBwZW5kUm90YXRl
KDAsIDAsIDEsIDApOworICAgIHRvQWRkLT5hcHBlbmRSb3RhdGUoMCwgMCwgMSwgMik7CiAgICAg
dHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKIAogICAgIHRvQWRkID0gbmV3IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKLSAgICB0b0FkZC0+YXBwZW5kU2NhbGUoMSwgMSwgMSk7
CisgICAgdG9BZGQtPmFwcGVuZFNjYWxlKDIsIDIsIDIpOwogICAgIHRyYW5zZm9ybXMuYXBwZW5k
KGFkb3B0UHRyKHRvQWRkKSk7CiAKICAgICB0b0FkZCA9IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zKCk7Ci0gICAgdG9BZGQtPmFwcGVuZFNrZXcoMCwgMCk7CisgICAgdG9BZGQtPmFwcGVuZFNr
ZXcoMSwgMCk7CiAgICAgdHJhbnNmb3Jtcy5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKIAogICAg
IHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKQEAgLTcyLDE5ICs3MywxOSBA
QCBURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIHRyYW5zZm9ybVR5cGVzQXJlVW5pcXVl
KQogVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBtYXRjaFR5cGVzU2FtZUxlbmd0aCkK
IHsKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zbGF0ZXM7Ci0gICAgdHJhbnNsYXRl
cy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Ci0gICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xh
dGUoMCwgMCwgMCk7Ci0gICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Cisg
ICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgdHJhbnNsYXRlcy5h
cHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgdHJhbnNsYXRlcy5hcHBlbmRUcmFuc2xhdGUo
MSwgMCwgMCk7CiAKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHNrZXdzOwotICAgIHNrZXdz
LmFwcGVuZFNrZXcoMCwgMCk7Ci0gICAgc2tld3MuYXBwZW5kU2tldygwLCAwKTsKLSAgICBza2V3
cy5hcHBlbmRTa2V3KDAsIDApOworICAgIHNrZXdzLmFwcGVuZFNrZXcoMCwgMik7CisgICAgc2tl
d3MuYXBwZW5kU2tldygwLCAyKTsKKyAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDIpOwogCiAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2xhdGVzMjsKLSAgICB0cmFuc2xhdGVzMi5hcHBl
bmRUcmFuc2xhdGUoMCwgMCwgMCk7Ci0gICAgdHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAs
IDAsIDApOwotICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICB0
cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMiwgMCk7CisgICAgdHJhbnNsYXRlczIuYXBw
ZW5kVHJhbnNsYXRlKDAsIDIsIDApOworICAgIHRyYW5zbGF0ZXMyLmFwcGVuZFRyYW5zbGF0ZSgw
LCAyLCAwKTsKIAogICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdHJhbnNsYXRlczMgPSB0cmFu
c2xhdGVzMjsKIApAQCAtOTYsMjIgKzk3LDg0IEBAIFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdCwgbWF0Y2hUeXBlc1NhbWVMZW5ndGgpCiBURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRl
c3QsIG1hdGNoVHlwZXNEaWZmZXJlbnRMZW5ndGgpCiB7CiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyB0cmFuc2xhdGVzOwotICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDAp
OwotICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwotICAgIHRyYW5zbGF0
ZXMuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNs
YXRlKDEsIDAsIDApOworICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOwor
ICAgIHRyYW5zbGF0ZXMuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOwogCiAgICAgV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBza2V3czsKLSAgICBza2V3cy5hcHBlbmRTa2V3KDAsIDApOwotICAgIHNr
ZXdzLmFwcGVuZFNrZXcoMCwgMCk7CisgICAgc2tld3MuYXBwZW5kU2tldygyLCAwKTsKKyAgICBz
a2V3cy5hcHBlbmRTa2V3KDIsIDApOwogCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFu
c2xhdGVzMjsKLSAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Ci0gICAg
dHJhbnNsYXRlczIuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIHRyYW5zbGF0ZXMyLmFw
cGVuZFRyYW5zbGF0ZSgwLCAyLCAwKTsKKyAgICB0cmFuc2xhdGVzMi5hcHBlbmRUcmFuc2xhdGUo
MCwgMiwgMCk7CiAKICAgICBFWFBFQ1RfRkFMU0UodHJhbnNsYXRlcy5tYXRjaGVzVHlwZXMoc2tl
d3MpKTsKICAgICBFWFBFQ1RfRkFMU0UodHJhbnNsYXRlcy5tYXRjaGVzVHlwZXModHJhbnNsYXRl
czIpKTsKIH0KIAordm9pZCBnZXRJZGVudGl0eU9wZXJhdGlvbnMoVmVjdG9yPE93blB0cjxXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zPiA+KiBvcGVyYXRpb25zKQoreworICAgIFdlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMqIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICBvcGVy
YXRpb25zLT5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kVHJhbnNsYXRlKDAsIDAsIDAp
OworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQg
PSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRUcmFuc2xh
dGUoMCwgMCwgMCk7CisgICAgdG9BZGQtPmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBv
cGVyYXRpb25zLT5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kU2NhbGUoMSwgMSwgMSk7
CisgICAgb3BlcmF0aW9ucy0+YXBwZW5kKGFkb3B0UHRyKHRvQWRkKSk7CisKKyAgICB0b0FkZCA9
IG5ldyBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCk7CisgICAgdG9BZGQtPmFwcGVuZFNjYWxlKDEs
IDEsIDEpOworICAgIHRvQWRkLT5hcHBlbmRTY2FsZSgxLCAxLCAxKTsKKyAgICBvcGVyYXRpb25z
LT5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9y
bU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kU2tldygwLCAwKTsKKyAgICBvcGVyYXRp
b25zLT5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0b0FkZC0+YXBwZW5kU2tldygwLCAwKTsKKyAgICB0b0Fk
ZC0+YXBwZW5kU2tldygwLCAwKTsKKyAgICBvcGVyYXRpb25zLT5hcHBlbmQoYWRvcHRQdHIodG9B
ZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAgICB0
b0FkZC0+YXBwZW5kUm90YXRlKDAsIDAsIDEsIDApOworICAgIG9wZXJhdGlvbnMtPmFwcGVuZChh
ZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2ViVHJhbnNmb3JtT3BlcmF0aW9u
cygpOworICAgIHRvQWRkLT5hcHBlbmRSb3RhdGUoMCwgMCwgMSwgMCk7CisgICAgdG9BZGQtPmFw
cGVuZFJvdGF0ZSgwLCAwLCAxLCAwKTsKKyAgICBvcGVyYXRpb25zLT5hcHBlbmQoYWRvcHRQdHIo
dG9BZGQpKTsKKworICAgIHRvQWRkID0gbmV3IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKTsKKyAg
ICB0b0FkZC0+YXBwZW5kTWF0cml4KFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworICAgIG9w
ZXJhdGlvbnMtPmFwcGVuZChhZG9wdFB0cih0b0FkZCkpOworCisgICAgdG9BZGQgPSBuZXcgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucygpOworICAgIHRvQWRkLT5hcHBlbmRNYXRyaXgoV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSk7CisgICAgdG9BZGQtPmFwcGVuZE1hdHJpeChXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpKTsKKyAgICBvcGVyYXRpb25zLT5hcHBlbmQoYWRvcHRQdHIodG9BZGQpKTsK
K30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBpZGVudGl0eUFsd2F5c01hdGNo
ZXMpCit7CisgICAgVmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IG9wZXJh
dGlvbnM7CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZvcGVyYXRpb25zKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IG9wZXJhdGlvbnMuc2l6ZSgpOyArK2opCisgICAgICAgICAg
ICBFWFBFQ1RfVFJVRShvcGVyYXRpb25zW2ldLT5tYXRjaGVzVHlwZXMoKm9wZXJhdGlvbnNbal0p
KTsKKyAgICB9Cit9CisKIFRFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYXBwbHlUcmFu
c2xhdGUpCiB7CiAgICAgZG91YmxlIHggPSAxOwpAQCAtMzM5LDMgKzQwMiwyMzggQEAgVEVTVChX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVuZFdoZW5UeXBlc0RvTm90TWF0Y2gpCiAKICAg
ICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zVG8u
YmxlbmQob3BlcmF0aW9uc0Zyb20sIHByb2dyZXNzKSk7CiB9CisKK1RFU1QoV2ViVHJhbnNmb3Jt
T3BlcmF0aW9uVGVzdCwgbGFyZ2VSb3RhdGlvbnNXaXRoU2FtZUF4aXMpCit7CisgICAgV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zRnJvbTsKKyAgICBvcGVyYXRpb25zRnJvbS5hcHBl
bmRSb3RhdGUoMCwgMCwgMSwgMCk7CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnNUbzsKKyAgICBvcGVyYXRpb25zVG8uYXBwZW5kUm90YXRlKDAsIDAsIDIsIDM2MCk7CisK
KyAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBleHBlY3RlZDsKKyAgICBleHBlY3RlZC5yb3RhdGUzZCgwLCAwLCAxLCAxODApOworCisgICAg
RVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9uc1RvLmJs
ZW5kKG9wZXJhdGlvbnNGcm9tLCBwcm9ncmVzcykpOworfQorCitURVNUKFdlYlRyYW5zZm9ybU9w
ZXJhdGlvblRlc3QsIGxhcmdlUm90YXRpb25zV2l0aFNhbWVBeGlzSW5EaWZmZXJlbnREaXJlY3Rp
b24pCit7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zRnJvbTsKKyAgICBv
cGVyYXRpb25zRnJvbS5hcHBlbmRSb3RhdGUoMCwgMCwgMSwgMTgwKTsKKworICAgIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uc1RvOworICAgIG9wZXJhdGlvbnNUby5hcHBlbmRSb3Rh
dGUoMCwgMCwgLTEsIDE4MCk7CisKKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKworICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnNUby5ibGVuZChvcGVyYXRpb25zRnJv
bSwgcHJvZ3Jlc3MpKTsKK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBsYXJn
ZVJvdGF0aW9uc1dpdGhEaWZmZXJlbnRBeGVzKQoreworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uc0Zyb207CisgICAgb3BlcmF0aW9uc0Zyb20uYXBwZW5kUm90YXRlKDAsIDAs
IDEsIDE4MCk7CisKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnNUbzsKKyAg
ICBvcGVyYXRpb25zVG8uYXBwZW5kUm90YXRlKDAsIDEsIDAsIDE4MCk7CisKKyAgICBkb3VibGUg
cHJvZ3Jlc3MgPSAwLjU7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4RnJvbTsK
KyAgICBtYXRyaXhGcm9tLnJvdGF0ZTNkKDAsIDAsIDEsIDE4MCk7CisKKyAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtYXRyaXhUbzsKKyAgICBtYXRyaXhUby5yb3RhdGUzZCgwLCAxLCAwLCAx
ODApOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQgPSBtYXRyaXhUbzsK
KyAgICBleHBlY3RlZC5ibGVuZChtYXRyaXhGcm9tLCBwcm9ncmVzcyk7CisKKyAgICBFWFBFQ1Rf
VFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zVG8uYmxlbmQob3Bl
cmF0aW9uc0Zyb20sIHByb2dyZXNzKSk7Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9u
VGVzdCwgYmxlbmRSb3RhdGlvbkZyb21JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50
aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRS
b3RhdGUoMCwgMCwgMSwgMzYwKTsKKworICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisK
KyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVj
dGVkLnJvdGF0ZTNkKDAsIDAsIDEsIDE4MCk7CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFU
SU9OX01BVFJJWF9FUShleHBlY3RlZCwgb3BlcmF0aW9ucy5ibGVuZCgqaWRlbnRpdHlPcGVyYXRp
b25zW2ldLCBwcm9ncmVzcykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRp
b25UZXN0LCBibGVuZFRyYW5zbGF0aW9uRnJvbUlkZW50aXR5KQoreworICAgIFZlY3RvcjxPd25Q
dHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVudGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0
SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJhdGlvbnMpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZFRyYW5zbGF0ZSgyLCAyLCAyKTsKKworICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7
CisKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4
cGVjdGVkLnRyYW5zbGF0ZTNkKDEsIDEsIDEpOworCisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIG9wZXJhdGlvbnMuYmxlbmQoKmlkZW50aXR5T3BlcmF0
aW9uc1tpXSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0
aW9uVGVzdCwgYmxlbmRTY2FsZUZyb21JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8T3duUHRyPFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAgIGdldElkZW50
aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmRT
Y2FsZSgzLCAzLCAzKTsKKworICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVkLnNj
YWxlM2QoMiwgMiwgMik7CisKKyAgICAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZCwgb3BlcmF0aW9ucy5ibGVuZCgqaWRlbnRpdHlPcGVyYXRpb25zW2ldLCBwcm9n
cmVzcykpOworICAgIH0KK30KKworVEVTVChXZWJUcmFuc2Zvcm1PcGVyYXRpb25UZXN0LCBibGVu
ZFNrZXdGcm9tSWRlbnRpdHkpCit7CisgICAgVmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zPiA+IGlkZW50aXR5T3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMo
JmlkZW50aXR5T3BlcmF0aW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50
aXR5T3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnM7CisgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kU2tldygyLCAyKTsKKwor
ICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVkLnNrZXdYKDEpOworICAgICAgICBl
eHBlY3RlZC5za2V3WSgxKTsKKworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGV4cGVjdGVkLCBvcGVyYXRpb25zLmJsZW5kKCppZGVudGl0eU9wZXJhdGlvbnNbaV0sIHBy
b2dyZXNzKSk7CisgICAgfQorfQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJs
ZW5kUGVyc3BlY3RpdmVGcm9tSWRlbnRpdHkpCit7CisgICAgVmVjdG9yPE93blB0cjxXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5T3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9w
ZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9ucyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kUGVyc3Bl
Y3RpdmUoMTAwMCk7CisKKyAgICAgICAgZG91YmxlIHByb2dyZXNzID0gMC41OworCisgICAgICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOworICAgICAgICBleHBlY3RlZC5hcHBs
eVBlcnNwZWN0aXZlKDUwMCArIDAuNSAqIG51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsK
KworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBvcGVy
YXRpb25zLmJsZW5kKCppZGVudGl0eU9wZXJhdGlvbnNbaV0sIHByb2dyZXNzKSk7CisgICAgfQor
fQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kUm90YXRpb25Ub0lkZW50
aXR5KQoreworICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBpZGVu
dGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9wZXJh
dGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlvbnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
OworICAgICAgICBvcGVyYXRpb25zLmFwcGVuZFJvdGF0ZSgwLCAwLCAxLCAzNjApOworCisgICAg
ICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0ZWQucm90YXRlM2QoMCwgMCwgMSwgMTgwKTsK
KworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklYX0VRKGV4cGVjdGVkLCBpZGVu
dGl0eU9wZXJhdGlvbnNbaV0tPmJsZW5kKG9wZXJhdGlvbnMsIHByb2dyZXNzKSk7CisgICAgfQor
fQorCitURVNUKFdlYlRyYW5zZm9ybU9wZXJhdGlvblRlc3QsIGJsZW5kVHJhbnNsYXRpb25Ub0lk
ZW50aXR5KQoreworICAgIFZlY3RvcjxPd25QdHI8V2ViVHJhbnNmb3JtT3BlcmF0aW9ucz4gPiBp
ZGVudGl0eU9wZXJhdGlvbnM7CisgICAgZ2V0SWRlbnRpdHlPcGVyYXRpb25zKCZpZGVudGl0eU9w
ZXJhdGlvbnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZGVudGl0eU9wZXJhdGlv
bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zOworICAgICAgICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZSgyLCAyLCAyKTsKKworICAg
ICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwLjU7CisKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggZXhwZWN0ZWQ7CisgICAgICAgIGV4cGVjdGVkLnRyYW5zbGF0ZTNkKDEsIDEsIDEpOwor
CisgICAgICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIGlkZW50
aXR5T3BlcmF0aW9uc1tpXS0+YmxlbmQob3BlcmF0aW9ucywgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9
CisKK1RFU1QoV2ViVHJhbnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRTY2FsZVRvSWRlbnRpdHkp
Cit7CisgICAgVmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5
T3BlcmF0aW9uczsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9u
cyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Cisg
ICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kU2NhbGUoMywgMywgMyk7CisKKyAgICAgICAgZG91Ymxl
IHByb2dyZXNzID0gMC41OworCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVj
dGVkOworICAgICAgICBleHBlY3RlZC5zY2FsZTNkKDIsIDIsIDIpOworCisgICAgICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIGlkZW50aXR5T3BlcmF0aW9uc1tp
XS0+YmxlbmQob3BlcmF0aW9ucywgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1QoV2ViVHJh
bnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRTa2V3VG9JZGVudGl0eSkKK3sKKyAgICBWZWN0b3I8
T3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+ID4gaWRlbnRpdHlPcGVyYXRpb25zOworICAg
IGdldElkZW50aXR5T3BlcmF0aW9ucygmaWRlbnRpdHlPcGVyYXRpb25zKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaWRlbnRpdHlPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgb3BlcmF0aW9u
cy5hcHBlbmRTa2V3KDIsIDIpOworCisgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDAuNTsKKwor
ICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3RlZDsKKyAgICAgICAgZXhwZWN0
ZWQuc2tld1goMSk7CisgICAgICAgIGV4cGVjdGVkLnNrZXdZKDEpOworCisgICAgICAgIEVYUEVD
VF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEoZXhwZWN0ZWQsIGlkZW50aXR5T3BlcmF0aW9uc1tp
XS0+YmxlbmQob3BlcmF0aW9ucywgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9CisKK1RFU1QoV2ViVHJh
bnNmb3JtT3BlcmF0aW9uVGVzdCwgYmxlbmRQZXJzcGVjdGl2ZVRvSWRlbnRpdHkpCit7CisgICAg
VmVjdG9yPE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiA+IGlkZW50aXR5T3BlcmF0aW9u
czsKKyAgICBnZXRJZGVudGl0eU9wZXJhdGlvbnMoJmlkZW50aXR5T3BlcmF0aW9ucyk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlkZW50aXR5T3BlcmF0aW9ucy5zaXplKCk7ICsraSkg
eworICAgICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kUGVyc3BlY3RpdmUoMTAwMCk7CisKKyAgICAgICAgZG91YmxlIHByb2dy
ZXNzID0gMC41OworCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkOwor
ICAgICAgICBleHBlY3RlZC5hcHBseVBlcnNwZWN0aXZlKDUwMCArIDAuNSAqIG51bWVyaWNfbGlt
aXRzPGRvdWJsZT46Om1heCgpKTsKKworICAgICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFU
UklYX0VRKGV4cGVjdGVkLCBpZGVudGl0eU9wZXJhdGlvbnNbaV0tPmJsZW5kKG9wZXJhdGlvbnMs
IHByb2dyZXNzKSk7CisgICAgfQorfQorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>