<?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>138856</bug_id>
          
          <creation_ts>2014-11-18 17:40:18 -0800</creation_ts>
          <short_desc>Add an optional entry transition (from selection highlight) to TextIndicator</short_desc>
          <delta_ts>2014-11-20 00:31:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>conrad_shultz</cc>
    
    <cc>mitz</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1049678</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-18 17:40:18 -0800</bug_when>
    <thetext>Add an optional entry transition (from selection highlight) to TextIndicator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049679</commentid>
    <comment_count>1</comment_count>
      <attachid>241840</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-18 17:41:07 -0800</bug_when>
    <thetext>Created attachment 241840
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049680</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-18 17:42:48 -0800</bug_when>
    <thetext>Attachment 241840 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:300:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049682</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-18 17:43:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/18840128&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049701</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-18 19:36:39 -0800</bug_when>
    <thetext>Need to turn on the transition for the DDChangedUI case, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049751</commentid>
    <comment_count>5</comment_count>
      <attachid>241852</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-19 02:27:33 -0800</bug_when>
    <thetext>Created attachment 241852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049811</commentid>
    <comment_count>6</comment_count>
      <attachid>241852</attachid>
    <who name="">mitz</who>
    <bug_when>2014-11-19 09:53:56 -0800</bug_when>
    <thetext>Comment on attachment 241852
Patch

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

&gt; Source/WebKit2/Shared/TextIndicator.cpp:120
&gt; +// FIXME: Ideally the FrameSnapshotting functions would be more flexible and we
&gt; +// wouldn&apos;t have to implement this here.

Can you please file a bug about doing this?

&gt; Source/WebKit2/Shared/TextIndicator.h:71
&gt; +    static PassRefPtr&lt;TextIndicator&gt; createWithSelectionInFrame(const WebFrame&amp;, bool transitionFromSelectionColor = false);
&gt; +    static PassRefPtr&lt;TextIndicator&gt; createWithRange(const WebCore::Range&amp;, bool transitionFromSelectionColor = false);

I don’t think transitionFromSelectionColor best captures what this does. The transition is not from a color but rather from a snapshot of the selection (which typically includes the selection highlight, the foreground color of the selection, and any replaced elements). Declaring this as a boolean is also bad, which is evident from call sites below that pass &quot;true&quot;. A TextIndicator::Transition parameter with values like FadeIn and Dissolve or whatever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049813</commentid>
    <comment_count>7</comment_count>
      <attachid>241852</attachid>
    <who name="">mitz</who>
    <bug_when>2014-11-19 09:54:49 -0800</bug_when>
    <thetext>Comment on attachment 241852
Patch

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

&gt;&gt; Source/WebKit2/Shared/TextIndicator.h:71
&gt;&gt; +    static PassRefPtr&lt;TextIndicator&gt; createWithRange(const WebCore::Range&amp;, bool transitionFromSelectionColor = false);
&gt; 
&gt; I don’t think transitionFromSelectionColor best captures what this does. The transition is not from a color but rather from a snapshot of the selection (which typically includes the selection highlight, the foreground color of the selection, and any replaced elements). Declaring this as a boolean is also bad, which is evident from call sites below that pass &quot;true&quot;. A TextIndicator::Transition parameter with values like FadeIn and Dissolve or whatever.

…might be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049819</commentid>
    <comment_count>8</comment_count>
      <attachid>241852</attachid>
    <who name="">mitz</who>
    <bug_when>2014-11-19 10:16:23 -0800</bug_when>
    <thetext>Comment on attachment 241852
Patch

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

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:40
&gt; +const double bounceAnimationDuration = 0.12;
&gt; +const double bounceWithTransitionAnimationDuration = 0.25;
&gt; +const double timeBeforeFadeStarts = bounceAnimationDuration + 0.2;
&gt; +const double fadeOutAnimationDuration = 0.3;

Why aren’t these CFTimeInterval?

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:69
&gt; +    bool _transitionFromSelectionColor;

Not BOOL? The name seems wrong for the reasons I stated above.

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:72
&gt; +- (id)_initWithFrame:(NSRect)frame textIndicator:(PassRefPtr&lt;WebKit::TextIndicator&gt;)textIndicator margin:(CGSize)margin;

Why the underscore?

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:75
&gt; +- (void)bounceWithCompletionHandler:(void(^)(void))completionHandler;
&gt; +- (void)fadeOutWithCompletionHandler:(void(^)(void))completionHandler;

Now that multiple appearance transitions are supported, perhaps these names should be more generic (-appearWithCompletionHandler:, -disappearWithCompletionHandler: or similar).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049827</commentid>
    <comment_count>9</comment_count>
      <attachid>241852</attachid>
    <who name="">mitz</who>
    <bug_when>2014-11-19 10:28:55 -0800</bug_when>
    <thetext>Comment on attachment 241852
Patch

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

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:83
&gt; -    if ((self = [super initWithFrame:NSZeroRect]))
&gt; +    if ((self = [super initWithFrame:frame])) {

Please make this an early return on the reverse condition.

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:86
&gt; +        _transitionFromSelectionColor = _textIndicator-&gt;data().contentImageWithHighlight;

When this is a BOOL, remember to !!

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:122
&gt; +            // FIXME: Ideally we wouldn&apos;t remove the margin in this case, but we need to to ensure
&gt; +            // that the yellow highlight and contentImageWithHighlight overlap precisely.

Can you file a bug about fixing this?

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:138
&gt; +            [bounceLayer setValue:dropShadowLayer.get() forKey:@&quot;dropShadowLayer&quot;];

Better to define an NSString * const for this

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:152
&gt; +            [bounceLayer setValue:rimShadowLayer.get() forKey:@&quot;rimShadowLayer&quot;];

…and this

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:174
&gt; +            [bounceLayer setValue:textLayer.get() forKey:@&quot;textLayer&quot;];

…and this!

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:190
&gt; +        [NSValue valueWithCATransform3D:CATransform3DMakeScale(1, 1, 1)],

CATransform3DIdentity

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:192
&gt; +        [NSValue valueWithCATransform3D:CATransform3DMakeScale(1, 1, 1)]

CATransform3DIdentity

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:201
&gt; +        [transitionAnimation setToValue:(id)contentsImage.get()];

.toVaue =

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:204
&gt; +        [transitionAnimation setFillMode:kCAFillModeForwards];
&gt; +        [transitionAnimation setRemovedOnCompletion:NO];
&gt; +        [transitionAnimation setDuration:animationDuration];

. . .

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:211
&gt; +        [fadeShadowInAnimation setFromValue:@0];
&gt; +        [fadeShadowInAnimation setToValue:@1];
&gt; +        [fadeShadowInAnimation setFillMode:kCAFillModeForwards];
&gt; +        [fadeShadowInAnimation setRemovedOnCompletion:NO];
&gt; +        [fadeShadowInAnimation setDuration:animationDuration];

. . . . .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049855</commentid>
    <comment_count>10</comment_count>
      <attachid>241852</attachid>
    <who name="">mitz</who>
    <bug_when>2014-11-19 11:46:13 -0800</bug_when>
    <thetext>Comment on attachment 241852
Patch

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

&gt; Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:81
&gt; +- (id)_initWithFrame:(NSRect)frame textIndicator:(PassRefPtr&lt;WebKit::TextIndicator&gt;)textIndicator margin:(CGSize)margin

Weird mix of NS and CG geometry types here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049940</commentid>
    <comment_count>11</comment_count>
      <attachid>241896</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-19 15:30:29 -0800</bug_when>
    <thetext>Created attachment 241896
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049943</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-19 15:31:59 -0800</bug_when>
    <thetext>Attachment 241896 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/TextIndicatorWindow.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/mac/WKViewInternal.h:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/API/mac/WKView.mm:3072:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm:270:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049975</commentid>
    <comment_count>13</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-19 16:11:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/176363</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049999</commentid>
    <comment_count>14</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-19 17:16:45 -0800</bug_when>
    <thetext>Build fix http://trac.webkit.org/changeset/176370</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050023</commentid>
    <comment_count>15</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-11-19 17:56:32 -0800</bug_when>
    <thetext>Build fix http://trac.webkit.org/changeset/176374</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050069</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-20 00:30:13 -0800</bug_when>
    <thetext>EFL buildfix - https://trac.webkit.org/changeset/176375</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050070</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-20 00:31:04 -0800</bug_when>
    <thetext>GTK buildfix - https://trac.webkit.org/changeset/176385</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241840</attachid>
            <date>2014-11-18 17:41:07 -0800</date>
            <delta_ts>2014-11-19 02:27:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138856-20141118174120.patch</filename>
            <type>text/plain</type>
            <size>45200</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRmMDRlZWNkOWNhODI1
MjVlNzJhMmE0NzgzYjhmZjE2OWFiNWI2ZS4uYjgzNzQxZjRkMzBkNGY0YzQwOGFlMzgzNTE5ODc4
MGRiNmZmNWEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTExLTE4ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBvcHRp
b25hbCBlbnRyeSB0cmFuc2l0aW9uIChmcm9tIHNlbGVjdGlvbiBoaWdobGlnaHQpIHRvIFRleHRJ
bmRpY2F0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzODg1NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg4NDAxMjg+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAg
ICAgICAgRXhwb3J0IHNuYXBzaG90RnJhbWVSZWN0LgorCisgICAgICAgICogcGxhdGZvcm0vc3Bp
L2NvY29hL1F1YXJ0ekNvcmVTUEkuaDoKKyAgICAgICAgQWRkIGEgc21hbGwgcGllY2Ugb2YgQ0Eg
U1BJLgorCiAyMDE0LTExLTE3ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBhIHNtYWxsIGluZGVudGF0aW9uIG1pc3Rha2UgaW4gU2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZU50aEZpbHRlclRlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1MDM4YWU5
YTFmMjViM2E1NTg4MGMwMjUwNzlkMGFmNDZmYzYxZDQzLi5lYjI2ZjI1NTM3ZmU1Mzc1YzQ0MWYy
ZGQyNzc3ZjkzZjI4NTg1NDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTQtMTEt
MTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IGFuIG9wdGlvbmFsIGVudHJ5IHRyYW5zaXRpb24gKGZyb20gc2VsZWN0aW9uIGhpZ2hsaWdodCkg
dG8gVGV4dEluZGljYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM4ODU2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xODg0MDEyOD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9UZXh0
SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6b3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1
ZGluZ1NoYWRvdyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhS
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OnNuYXBzaG90U2VsZWN0aW9uV2l0aEhpZ2hsaWdodCk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6VGV4dEluZGljYXRvcjo6ZnJhbWVSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dEluZGljYXRvcjo6RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dEluZGljYXRvcjo6RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgUmVtb3ZlIFRleHRJbmRp
Y2F0b3I6OmRyYXcgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zOyBkcmF3aW5nIGlzIGhhbmRsZWQgZW50
aXJlbHkKKyAgICAgICAgYnkgdGhlIFRleHRJbmRpY2F0b3JXaW5kb3cgbm93LCBhbmQgVGV4dElu
ZGljYXRvciBqdXN0IHN0b3JlcyB0aGUgcmVxdWlyZWQgZGF0YS4KKworICAgICAgICBVbmlmeSBv
dXRzZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93LgorCisgICAgICAgIEFkZCBhbiBhcmd1
bWVudCB0byBjcmVhdGVXaXRoUmFuZ2UvY3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUgdG8gaW5k
aWNhdGUKKyAgICAgICAgaWYgdGhlIFRleHRJbmRpY2F0b3Igc2hvdWxkIHRyYW5zaXRpb24gZnJv
bSB0aGUgc2VsZWN0aW9uIGhpZ2hsaWdodCB0bworICAgICAgICB0aGUgeWVsbG93IGJ1YmJsZS4K
KworICAgICAgICBJZiB3ZSdyZSBkb2luZyB0aGUgdHJhbnNpdGlvbiwgcGFpbnQgdGhlIHNlbGVj
dGlvbiBpbnRvIGEgc2Vjb25kIGJpdG1hcCwKKyAgICAgICAgd2l0aG91dCBmb3JjaW5nIHRoZSB0
ZXh0IHRvIGJsYWNrIGFuZCB3aXRob3V0IGhpZGluZyB0aGUgYmx1ZSBoaWdobGlnaHQuCisKKyAg
ICAgICAgRW5jb2RlL2RlY29kZSB0aGUgc2Vjb25kIGJpdG1hcCBhbmQgdHJhbnNpdGlvbkZyb21T
ZWxlY3Rpb25Db2xvci4KKworICAgICAgICAqIFNoYXJlZC9UZXh0SW5kaWNhdG9yLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tOgorICAgICAgICAoLVtXS1RleHRJbmRp
Y2F0b3JWaWV3IF9pbml0V2l0aEZyYW1lOnRleHRJbmRpY2F0b3I6bWFyZ2luOnRyYW5zaXRpb25G
cm9tU2VsZWN0aW9uQ29sb3I6XSk6CisgICAgICAgICgtW1dLVGV4dEluZGljYXRvclZpZXcgYm91
bmNlV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1RleHRJbmRpY2F0b3JW
aWV3IGZhZGVPdXRXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLVGV4dElu
ZGljYXRvclZpZXcgaXNGbGlwcGVkXSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRJbmRpY2F0b3JX
aW5kb3c6OlRleHRJbmRpY2F0b3JXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpUZXh0SW5kaWNh
dG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKToKKyAgICAgICAgKFdlYktpdDo6VGV4dEluZGlj
YXRvcldpbmRvdzo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpUZXh0SW5kaWNhdG9y
V2luZG93OjpzdGFydEZhZGVPdXRUaW1lckZpcmVkKToKKyAgICAgICAgKC1bV0tUZXh0SW5kaWNh
dG9yVmlldyBfaW5pdFdpdGhUZXh0SW5kaWNhdG9yOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtX
S1RleHRJbmRpY2F0b3JWaWV3IGRyYXdSZWN0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Rl
eHRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24gX2luaXRXaXRoVGV4dEluZGljYXRvcldpbmRvdzph
bmltYXRpb25EdXJhdGlvbjphbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrOmFuaW1hdGlvbkRpZEVu
ZENhbGxiYWNrOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1RleHRJbmRpY2F0b3JXaW5kb3dB
bmltYXRpb24gc2V0Q3VycmVudFByb2dyZXNzOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1Rl
eHRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24gYW5pbWF0aW9uRGlkRW5kOl0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpUZXh0SW5kaWNhdG9yV2luZG93OjpmYWRlT3V0QW5pbWF0aW9uQ2Fs
bGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpUZXh0SW5kaWNhdG9yV2luZG93Ojpm
YWRlT3V0QW5pbWF0aW9uRGlkRW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6VGV4dElu
ZGljYXRvcldpbmRvdzo6Ym91bmNlQW5pbWF0aW9uQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpUZXh0SW5kaWNhdG9yV2luZG93Ojpib3VuY2VBbmltYXRpb25EaWRFbmQpOiBE
ZWxldGVkLgorICAgICAgICBSZS1pbXBsZW1lbnQgdGhlIGJvdW5jZSBhbmltYXRpb24gdXNpbmcg
Q29yZUFuaW1hdGlvbiBpbnN0ZWFkIG9mCisgICAgICAgIHRoZSBXS1NJLWJhc2VkIFdLV2luZG93
Qm91bmNlQW5pbWF0aW9uKi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZD
dXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JSYW5nZSk6CisgICAgICAgIFVzZSB0aGUgYWZvcmVtZW50aW9uZWQgdHJh
bnNpdGlvbiBhbmltYXRpb24gZm9yIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2Vs
ZWN0aW9uLgorCiAyMDE0LTExLTE3ICBDb25yYWQgU2h1bHR6ICA8Y29ucmFkX3NodWx0ekBhcHBs
ZS5jb20+CiAKICAgICAgICAgUGFnZSBwcmV2aWV3cyBzaG91bGQgYmUgbG9hZGVkIHNvb25lcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgppbmRleCBmMzE1MjAzNmFkNzQ3Y2UwZTkzOTMxMzhiNWI4MmI1NTFi
ODU5MTA0Li4wZDhkMjcyNDYzOTliYzJmNDk2ZWU4YmU0MzhhOTQ5ZWE5YjU5M2VlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgpAQCAtNzg4LDYgKzc4OCw3IEBAIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VE
aWRDaGFuZ2VFdgogX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmlu
Z0VSaQogX19aTjdXZWJDb3JlMTdzUkdCQ29sb3JTcGFjZVJlZkV2CiBfX1pON1dlYkNvcmUxN3Nl
dENvb2tpZXNGcm9tRE9NRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJMRVM1
X1JLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTdzbmFwc2hvdEZyYW1lUmVjdEVSTlNfNUZy
YW1lRVJLTlNfN0ludFJlY3RFagogX19aTjdXZWJDb3JlMTdzbmFwc2hvdFNlbGVjdGlvbkVSTlNf
NUZyYW1lRWoKIF9fWk43V2ViQ29yZTE3dXNlclZpc2libGVTdHJpbmdFUDVOU1VSTAogX19aTjdX
ZWJDb3JlMThET01XaW5kb3dFeHRlbnNpb25DMUVQTlNfNUZyYW1lRVJOU18xNURPTVdyYXBwZXJX
b3JsZEUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9RdWFy
dHpDb3JlU1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY29jb2EvUXVhcnR6Q29y
ZVNQSS5oCmluZGV4IGFjNTU5ZTg4N2I2MjA4YzczZmU3Y2JkOGQ4M2MzZWIzZDZkZTg4NmMuLjli
NjY1YmQ4ZjQwZDZiNDcwNjdhMTg5OTE2MDA3Y2Q2MjQyYWFjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaApAQCAtNzIsNiArNzIs
NyBAQCBleHRlcm4gIkMiIHsKIEBwcm9wZXJ0eSBCT09MIGNhbkRyYXdDb25jdXJyZW50bHk7CiBA
cHJvcGVydHkgQk9PTCBjb250ZW50c09wYXF1ZTsKIEBwcm9wZXJ0eSBCT09MIG5lZWRzTGF5b3V0
T25HZW9tZXRyeUNoYW5nZTsKK0Bwcm9wZXJ0eSBCT09MIHNoYWRvd1BhdGhJc0JvdW5kczsKIEBl
bmQKIAogQGludGVyZmFjZSBDQVRpbGVkTGF5ZXIgKERldGFpbHMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvVGV4dEluZGljYXRvci5jcHAKaW5kZXggNDJkODM2M2YxN2Y3ZWMxMDdiOTJkY2Y1Y2MzOTY1
ODJmNTAzNGJhYS4uYmUyMzg2NGM0YWFkY2Q5OGJkOWJiY2MyMmYzMjYxZjFlMDNhYWY1NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMzksOTEgKzM5LDM3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZVNuYXBzaG90dGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
R3JhZGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1BhdGguaD4KIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTAwMAotI2RlZmluZSBFTkFCTEVfTEVHQUNZ
X1RFWFRfSU5ESUNBVE9SX1NUWUxFIDEKLSNlbHNlCi0jZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVY
VF9JTkRJQ0FUT1JfU1RZTEUgMAotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CisvLyBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlcyBpbiBUZXh0SW5kaWNhdG9yV2luZG93
LgorLy8gRklYTUU6IElkZWFsbHkgdGhlc2Ugd291bGQgb25seSBiZSBpbiBvbmUgcGxhY2UuCiAj
aWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKLXN0YXRpYyBjb25zdCBmbG9h
dCBjb3JuZXJSYWRpdXMgPSAzLjA7Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBzaGFkb3dPZmZzZXRY
ID0gMC4wOwotc3RhdGljIGNvbnN0IGZsb2F0IHNoYWRvd09mZnNldFkgPSAxLjA7Ci1zdGF0aWMg
Y29uc3QgZmxvYXQgc2hhZG93Qmx1clJhZGl1cyA9IDMuMDsKLQotc3RhdGljIGNvbnN0IGludCBz
aGFkb3dSZWQgPSAwOwotc3RhdGljIGNvbnN0IGludCBzaGFkb3dHcmVlbiA9IDA7Ci1zdGF0aWMg
Y29uc3QgaW50IHNoYWRvd0JsdWUgPSAwOwotc3RhdGljIGNvbnN0IGludCBzaGFkb3dBbHBoYSA9
IDIwNDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IGxpZ2h0Qm9yZGVyVGhpY2tuZXNzID0gMS4wOwot
c3RhdGljIGNvbnN0IGZsb2F0IGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIgPSAz
LjA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIg
PSAxLjA7Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBob3Jpem9udGFsQm9yZGVySW5zaWRlU2hhZG93
ID0gbGlnaHRCb3JkZXJUaGlja25lc3MgKyBob3Jpem9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9y
ZGVyOwotc3RhdGljIGNvbnN0IGZsb2F0IHZlcnRpY2FsQm9yZGVySW5zaWRlU2hhZG93ID0gbGln
aHRCb3JkZXJUaGlja25lc3MgKyB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlcjsKLQot
c3RhdGljIGNvbnN0IGZsb2F0IGxlZnRCb3JkZXJUaGlja25lc3MgPSBob3Jpem9udGFsQm9yZGVy
SW5zaWRlU2hhZG93ICsgc2hhZG93T2Zmc2V0WCArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7Ci1z
dGF0aWMgY29uc3QgZmxvYXQgdG9wQm9yZGVyVGhpY2tuZXNzID0gdmVydGljYWxCb3JkZXJJbnNp
ZGVTaGFkb3cgLSBzaGFkb3dPZmZzZXRZICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKLXN0YXRp
YyBjb25zdCBmbG9hdCByaWdodEJvcmRlclRoaWNrbmVzcyA9IGhvcml6b250YWxCb3JkZXJJbnNp
ZGVTaGFkb3cgLSBzaGFkb3dPZmZzZXRYICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKLXN0YXRp
YyBjb25zdCBmbG9hdCBib3R0b21Cb3JkZXJUaGlja25lc3MgPSB2ZXJ0aWNhbEJvcmRlckluc2lk
ZVNoYWRvdyArIHNoYWRvd09mZnNldFkgKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOwotCi1zdGF0
aWMgY29uc3QgZmxvYXQgaG9yaXpvbnRhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciA9IGhv
cml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cgLSBsaWdodEJvcmRlclRoaWNrbmVzcyAvIDIuMDsK
LXN0YXRpYyBjb25zdCBmbG9hdCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciA9
IHZlcnRpY2FsQm9yZGVySW5zaWRlU2hhZG93IC0gbGlnaHRCb3JkZXJUaGlja25lc3MgLyAyLjA7
Ci0KLXN0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJSZWQgPSAyNDU7Ci1zdGF0aWMgY29uc3Qg
aW50IGxpZ2h0Qm9yZGVyR3JlZW4gPSAyMzA7Ci1zdGF0aWMgY29uc3QgaW50IGxpZ2h0Qm9yZGVy
Qmx1ZSA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IGxpZ2h0Qm9yZGVyQWxwaGEgPSAyNTU7Ci0KLXN0
YXRpYyBjb25zdCBpbnQgZ3JhZGllbnREYXJrUmVkID0gMjM3Owotc3RhdGljIGNvbnN0IGludCBn
cmFkaWVudERhcmtHcmVlbiA9IDIwNDsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnREYXJrQmx1
ZSA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRpZW50RGFya0FscGhhID0gMjU1OwotCi1zdGF0
aWMgY29uc3QgaW50IGdyYWRpZW50TGlnaHRSZWQgPSAyNDI7Ci1zdGF0aWMgY29uc3QgaW50IGdy
YWRpZW50TGlnaHRHcmVlbiA9IDIzOTsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEJs
dWUgPSAwOwotc3RhdGljIGNvbnN0IGludCBncmFkaWVudExpZ2h0QWxwaGEgPSAyNTU7Citjb25z
dCBDR0Zsb2F0IGhvcml6b250YWxCb3JkZXIgPSAzOworY29uc3QgQ0dGbG9hdCB2ZXJ0aWNhbEJv
cmRlciA9IDE7Citjb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dCbHVyUmFkaXVzID0gMS41OwogI2Vs
c2UKLWNvbnN0IGZsb2F0IGZsYXRTdHlsZUhvcml6b250YWxCb3JkZXIgPSAyOwotY29uc3QgZmxv
YXQgZmxhdFN0eWxlVmVydGljYWxCb3JkZXIgPSAxOwotY29uc3QgZmxvYXQgZmxhdFNoYWRvd09m
ZnNldFggPSAwOwotY29uc3QgZmxvYXQgZmxhdFNoYWRvd09mZnNldFkgPSA1OwotY29uc3QgZmxv
YXQgZmxhdFNoYWRvd0JsdXJSYWRpdXMgPSAyNTsKLWNvbnN0IGZsb2F0IGZsYXRSaW1TaGFkb3dC
bHVyUmFkaXVzID0gMjsKK2NvbnN0IENHRmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDI7Citjb25z
dCBDR0Zsb2F0IHZlcnRpY2FsQm9yZGVyID0gMTsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd0Js
dXJSYWRpdXMgPSAxMjsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIEZs
b2F0UmVjdCBpbmZsYXRlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGluZmxhdGVY
LCBmbG9hdCBpbmZsYXRlWSkKLXsKLSAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcmVjdDsK
LSAgICBpbmZsYXRlZFJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGluZmxhdGVkUmVjdC5p
bmZsYXRlWShpbmZsYXRlWSk7Ci0gICAgcmV0dXJuIGluZmxhdGVkUmVjdDsKLX0KLQogc3RhdGlj
IEZsb2F0UmVjdCBvdXRzZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93KGNvbnN0IEZsb2F0
UmVjdCByZWN0KQogewotI2lmIEVOQUJMRShMRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUpCiAg
ICAgRmxvYXRSZWN0IG91dHNldFJlY3QgPSByZWN0OwotICAgIG91dHNldFJlY3QubW92ZSgtbGVm
dEJvcmRlclRoaWNrbmVzcywgLXRvcEJvcmRlclRoaWNrbmVzcyk7Ci0gICAgb3V0c2V0UmVjdC5l
eHBhbmQobGVmdEJvcmRlclRoaWNrbmVzcyArIHJpZ2h0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3Jk
ZXJUaGlja25lc3MgKyBib3R0b21Cb3JkZXJUaGlja25lc3MpOworICAgIG91dHNldFJlY3QuaW5m
bGF0ZVgoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKyBob3Jpem9udGFsQm9yZGVyKTsKKyAgICBvdXRz
ZXRSZWN0LmluZmxhdGVZKGRyb3BTaGFkb3dCbHVyUmFkaXVzICsgdmVydGljYWxCb3JkZXIpOwog
ICAgIHJldHVybiBvdXRzZXRSZWN0OwotI2Vsc2UKLSAgICByZXR1cm4gaW5mbGF0ZVJlY3QocmVj
dCwgZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0
U2hhZG93Qmx1clJhZGl1cyArIGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVyKTsKLSNlbmRpZgogfQog
CiBzdGF0aWMgYm9vbCB0ZXh0SW5kaWNhdG9yc0ZvclRleHRSZWN0c092ZXJsYXAoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHRleHRSZWN0cykKQEAgLTE1NSw3ICsxMDEsNyBAQCBQYXNzUmVmUHRy
PFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9y
OjpEYXRhJiBkYXRhKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dEluZGljYXRvcihkYXRh
KSk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRl
V2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSkKK1Bhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4g
VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCB0
cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yKQogewogICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdl
LnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKIApAQCAtMTY1LDE0ICsxMTEs
NDYgQEAgUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRo
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQogICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0
aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24oJnJhbmdlKTsKIAotICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBp
bmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZSgqV2Vi
RnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKSk7CisgICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+
IGluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKCpX
ZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpLCB0cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNv
bG9yKTsKIAogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
KTsKICAgICAKICAgICByZXR1cm4gaW5kaWNhdG9yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0
cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFt
ZShjb25zdCBXZWJGcmFtZSYgZnJhbWUpCisvLyBGSVhNRTogSWRlYWxseSB0aGUgRnJhbWVTbmFw
c2hvdHRpbmcgZnVuY3Rpb25zIHdvdWxkIGJlIG1vcmUgZmxleGlibGUgYW5kIHdlCisvLyB3b3Vs
ZG4ndCBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGhlcmUuCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IHNuYXBzaG90U2VsZWN0aW9uV2l0aEhpZ2hsaWdodChGcmFtZSYgZnJhbWUp
Cit7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CisKKyAgICBpZiAo
IXNlbGVjdGlvbi5pc1JhbmdlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgRmxv
YXRSZWN0IHNlbGVjdGlvbkJvdW5kcyA9IHNlbGVjdGlvbi5zZWxlY3Rpb25Cb3VuZHMoKTsKKwor
ICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgc2VsZWN0aW9uIGJvdW5kcyB0byBiZSBlbXB0
eTsgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjY0NS4KKyAg
ICBpZiAoc2VsZWN0aW9uQm91bmRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90ID0gc25hcHNob3RG
cmFtZVJlY3QoZnJhbWUsIGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uQm91bmRzKSwgMCk7CisK
KyAgICBpZiAoIXNuYXBzaG90KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVTaGFyZWFibGUoc25hcHNob3QtPmludGVybmFsU2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1
cHBvcnRzQWxwaGEpOworICAgIGlmICghc2hhcmVkU25hcHNob3QpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBzaGFyZWRTbmFwc2hvdC0+Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBmcmFt
ZS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAg
Z3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoc25hcHNob3QuZ2V0KCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIEZsb2F0UG9pbnQoKSk7CisKKyAgICByZXR1cm4gc2hhcmVkU25hcHNob3Qu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6
OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKGNvbnN0IFdlYkZyYW1lJiBmcmFtZSwgYm9vbCB0
cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yKQogewogICAgIEZyYW1lJiBjb3JlRnJhbWUgPSAq
ZnJhbWUuY29yZUZyYW1lKCk7CiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChjb3JlRnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCkpOwpAQCAtMTgw
LDYgKzE1OCwxMCBAQCBQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKGNvbnN0IFdlYkZyYQogICAgIGlmICghaW5kaWNhdG9y
Qml0bWFwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGluZGljYXRvckJpdG1hcFdpdGhIaWdobGlnaHQ7CisgICAgaWYgKHRyYW5zaXRpb25G
cm9tU2VsZWN0aW9uQ29sb3IpCisgICAgICAgIGluZGljYXRvckJpdG1hcFdpdGhIaWdobGlnaHQg
PSBzbmFwc2hvdFNlbGVjdGlvbldpdGhIaWdobGlnaHQoY29yZUZyYW1lKTsKKwogICAgIC8vIFN0
b3JlIHRoZSBzZWxlY3Rpb24gcmVjdCBpbiB3aW5kb3cgY29vcmRpbmF0ZXMsIHRvIGJlIHVzZWQg
c3Vic2VxdWVudGx5CiAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbmRpY2F0b3IgYW5kIHNl
bGVjdGlvbiBzdGlsbCBwcmVjaXNlbHkgb3ZlcmxhcC4KICAgICBJbnRSZWN0IHNlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzID0gY29yZUZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhzZWxlY3Rpb25SZWN0KTsKQEAgLTIxMCw2ICsxOTIsOCBAQCBQYXNzUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKGNvbnN0IFdl
YkZyYQogICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IHRleHRS
ZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7CiAgICAgZGF0YS5jb250ZW50SW1hZ2VTY2Fs
ZUZhY3RvciA9IGZyYW1lLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBkYXRhLmNv
bnRlbnRJbWFnZSA9IGluZGljYXRvckJpdG1hcDsKKyAgICBkYXRhLmNvbnRlbnRJbWFnZVdpdGhI
aWdobGlnaHQgPSBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxpZ2h0OworICAgIGRhdGEudHJhbnNp
dGlvbkZyb21TZWxlY3Rpb25Db2xvciA9IHRyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3I7CiAK
ICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwogfQpAQCAtMjMxLDExOCAr
MjE1LDcgQEAgVGV4dEluZGljYXRvcjo6flRleHRJbmRpY2F0b3IoKQogCiBGbG9hdFJlY3QgVGV4
dEluZGljYXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gb3V0c2V0SW5kaWNh
dG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhtX2RhdGEudGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMpOwotfQotCi0jaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkK
LXN0YXRpYyBpbmxpbmUgQ29sb3IgbGlnaHRCb3JkZXJDb2xvcigpCi17Ci0gICAgcmV0dXJuIENv
bG9yKGxpZ2h0Qm9yZGVyUmVkLCBsaWdodEJvcmRlckdyZWVuLCBsaWdodEJvcmRlckJsdWUsIGxp
Z2h0Qm9yZGVyQWxwaGEpOwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIHNoYWRvd0NvbG9yKCkK
LXsKLSAgICByZXR1cm4gQ29sb3Ioc2hhZG93UmVkLCBzaGFkb3dHcmVlbiwgc2hhZG93Qmx1ZSwg
c2hhZG93QWxwaGEpOwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGdyYWRpZW50TGlnaHRDb2xv
cigpCi17Ci0gICAgcmV0dXJuIENvbG9yKGdyYWRpZW50TGlnaHRSZWQsIGdyYWRpZW50TGlnaHRH
cmVlbiwgZ3JhZGllbnRMaWdodEJsdWUsIGdyYWRpZW50TGlnaHRBbHBoYSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgQ29sb3IgZ3JhZGllbnREYXJrQ29sb3IoKQotewotICAgIHJldHVybiBDb2xvcihn
cmFkaWVudERhcmtSZWQsIGdyYWRpZW50RGFya0dyZWVuLCBncmFkaWVudERhcmtCbHVlLCBncmFk
aWVudERhcmtBbHBoYSk7Ci19Ci0KLXN0YXRpYyBQYXRoIHBhdGhXaXRoUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiBwYXRoUmVjdCwgZmxvYXQgcmFkaXVzKQotewotICAgIFBhdGggcGF0aDsK
LSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHBhdGhSZWN0LCBGbG9hdFNpemUocmFkaXVzLCByYWRp
dXMpKTsKLQotICAgIHJldHVybiBwYXRoOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgQ29sb3Ig
ZmxhdEhpZ2hsaWdodENvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDAsIDI1
NSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ29sb3IgZmxhdFJpbVNoYWRvd0NvbG9yKCkKLXsKLSAg
ICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMzgpOwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGZs
YXREcm9wU2hhZG93Q29sb3IoKQotewotICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCA1MSk7Ci19
Ci0jZW5kaWYKLQotdm9pZCBUZXh0SW5kaWNhdG9yOjpkcmF3Q29udGVudEltYWdlKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdGV4
dFJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHRleHRSZWN0OwotICAgIGltYWdl
UmVjdC5tb3ZlKG1fZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcy5sb2Nh
dGlvbigpIC0gbV9kYXRhLnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLmxvY2F0aW9u
KCkpOwotICAgIG1fZGF0YS5jb250ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgbV9k
YXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBlbmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KS5s
b2NhdGlvbigpLCBlbmNsb3NpbmdJbnRSZWN0KGltYWdlUmVjdCkpOwotfQotCi12b2lkIFRleHRJ
bmRpY2F0b3I6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IElu
dFJlY3QmIC8qZGlydHlSZWN0Ki8pCi17Ci0jaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRP
Ul9TVFlMRSkKLSAgICBmb3IgKGF1dG8mIHRleHRSZWN0IDogbV9kYXRhLnRleHRSZWN0c0luQm91
bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJvcmRlcmVkVGV4dFJl
Y3QgPSB0ZXh0UmVjdDsKLSAgICAgICAgYm9yZGVyZWRUZXh0UmVjdC5tb3ZlKGxlZnRCb3JkZXJU
aGlja25lc3MsIHRvcEJvcmRlclRoaWNrbmVzcyk7Ci0KLSAgICAgICAgRmxvYXRSZWN0IG91dGVy
UGF0aFJlY3QgPSBpbmZsYXRlUmVjdChib3JkZXJlZFRleHRSZWN0LCBob3Jpem9udGFsT3V0c2V0
VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRl
cik7Ci0gICAgICAgIEZsb2F0UmVjdCBpbm5lclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QoYm9yZGVy
ZWRUZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciwgdmVydGljYWxQ
YWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwg
c2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKCksIENvbG9yU3Bh
Y2VTUkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobGlnaHRC
b3JkZXJDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5maWxsUGF0aChwYXRoV2l0aFJvdW5kZWRSZWN0KG91dGVyUGF0aFJlY3QsIGNvcm5l
clJhZGl1cykpOwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuY2xpcChwYXRoV2l0aFJvdW5kZWRSZWN0KGlubmVyUGF0aFJlY3Qs
IGNvcm5lclJhZGl1cykpOwotICAgICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRo
UmVjdC55KCkpLCBGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0Lm1h
eFkoKSkpOwotICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLCBncmFkaWVudExp
Z2h0Q29sb3IoKSk7Ci0gICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDEsIGdyYWRp
ZW50RGFya0NvbG9yKCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFk
aWVudChncmFkaWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5maWxsUmVjdChvdXRlclBhdGhSZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0Nv
bnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShGbG9hdFNpemUo
cm91bmRmKGxlZnRCb3JkZXJUaGlja25lc3MpLCByb3VuZGYodG9wQm9yZGVyVGhpY2tuZXNzKSkp
OwotCi0gICAgICAgICAgICBkcmF3Q29udGVudEltYWdlKGdyYXBoaWNzQ29udGV4dCwgdGV4dFJl
Y3QpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBmb3IgKGF1dG8mIHRleHRSZWN0IDog
bV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKLSAgICAgICAgRmxv
YXRSZWN0IGJsdXJSZWN0ID0gdGV4dFJlY3Q7Ci0gICAgICAgIGJsdXJSZWN0Lm1vdmUoZmxhdFNo
YWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1
clJhZGl1cyArIGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVyKTsKLSAgICAgICAgRmxvYXRSZWN0IG91
dGVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdChibHVyUmVjdCwgZmxhdFN0eWxlSG9yaXpvbnRhbEJv
cmRlciwgZmxhdFN0eWxlVmVydGljYWxCb3JkZXIpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwot
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoKSwgZmxhdFJp
bVNoYWRvd0JsdXJSYWRpdXMsIGZsYXRSaW1TaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7
Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGZsYXRIaWdobGlnaHRD
b2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmls
bFJlY3Qob3V0ZXJQYXRoUmVjdCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hh
ZG93KEZsb2F0U2l6ZShmbGF0U2hhZG93T2Zmc2V0WCwgZmxhdFNoYWRvd09mZnNldFkpLCBmbGF0
U2hhZG93Qmx1clJhZGl1cywgZmxhdERyb3BTaGFkb3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7
Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC50cmFuc2xhdGUoRmxvYXRTaXplKGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxl
SG9yaXpvbnRhbEJvcmRlciwgZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVWZXJ0aWNh
bEJvcmRlcikpOwotCi0gICAgICAgICAgICBkcmF3Q29udGVudEltYWdlKGdyYXBoaWNzQ29udGV4
dCwgdGV4dFJlY3QpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisgICAgcmV0dXJuIG1fZGF0
YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsKIH0KIAogdm9pZCBUZXh0SW5k
aWNhdG9yOjpEYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkBAIC0zNTYsNiArMjI5LDEzIEBAIHZvaWQgVGV4dEluZGljYXRvcjo6RGF0YTo6ZW5jb2RlKElQ
Qzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGlmIChjb250ZW50SW1hZ2Up
CiAgICAgICAgIGNvbnRlbnRJbWFnZS0+Y3JlYXRlSGFuZGxlKGNvbnRlbnRJbWFnZUhhbmRsZSwg
U2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CiAgICAgZW5jb2RlciA8PCBjb250ZW50SW1hZ2VIYW5k
bGU7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VXaXRoSGlnaGxp
Z2h0SGFuZGxlOworICAgIGlmIChjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KQorICAgICAgICBj
b250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0LT5jcmVhdGVIYW5kbGUoY29udGVudEltYWdlV2l0aEhp
Z2hsaWdodEhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8PCBj
b250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlOworCisgICAgZW5jb2RlciA8PCB0cmFuc2l0
aW9uRnJvbVNlbGVjdGlvbkNvbG9yOwogfQogCiBib29sIFRleHRJbmRpY2F0b3I6OkRhdGE6OmRl
Y29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVGV4dEluZGljYXRvcjo6RGF0YSYg
dGV4dEluZGljYXRvckRhdGEpCkBAIC0zNzksNiArMjU5LDE2IEBAIGJvb2wgVGV4dEluZGljYXRv
cjo6RGF0YTo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBUZXh0SW5kaWNh
dG9yOjpECiAgICAgaWYgKCFjb250ZW50SW1hZ2VIYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgIHRl
eHRJbmRpY2F0b3JEYXRhLmNvbnRlbnRJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNv
bnRlbnRJbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CiAKKyAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhh
bmRsZS5pc051bGwoKSkKKyAgICAgICAgdGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlV2l0
aEhpZ2hsaWdodCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZVdpdGhIaWdo
bGlnaHRIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh0ZXh0SW5kaWNhdG9yRGF0YS50cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvVGV4dEluZGljYXRvci5oCmluZGV4IDcyYzU2ZDVhNTEyODM4YTdkOTEwM2E4YmI4
OTdhN2VmNjAyNjdlNDguLmYyNGY0N2ZlMmRjOTI5ODY0M2NkMmFjMGViZmM2M2JiOWM5YWU1Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuaApAQCAtMzIsNiArMzIsMTIgQEAK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAor
I2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEw
MTAwMAorI2RlZmluZSBFTkFCTEVfTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFIDEKKyNlbHNl
CisjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUgMAorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFJhbmdl
OwpAQCAtNTMsMTUgKzU5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IHRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOwogICAgICAgICBWZWN0b3I8V2Vi
Q29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwogICAg
ICAgICBmbG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsKKyAgICAgICAgUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gY29udGVudEltYWdlV2l0aEhpZ2hsaWdodDsKICAgICAgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdlOworICAgICAgICBib29sIHRyYW5zaXRpb25Gcm9t
U2VsZWN0aW9uQ29sb3I7CiAKICAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29k
ZXImKSBjb25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNv
ZGVyJiwgRGF0YSYpOwogICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0SW5kaWNh
dG9yPiBjcmVhdGUoY29uc3QgVGV4dEluZGljYXRvcjo6RGF0YSYpOwotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKGNvbnN0IFdl
YkZyYW1lJik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0
aFJhbmdlKGNvbnN0IFdlYkNvcmU6OlJhbmdlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4
dEluZGljYXRvcj4gY3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoY29uc3QgV2ViRnJhbWUmLCBi
b29sIHRyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IgPSBmYWxzZSk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFdlYkNvcmU6OlJh
bmdlJiwgYm9vbCB0cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yID0gZmFsc2UpOwogCiAgICAg
flRleHRJbmRpY2F0b3IoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9UZXh0SW5kaWNhdG9yV2luZG93LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1RleHRJbmRpY2F0b3JXaW5kb3cuaAppbmRleCA3MDU5NDBlMTg5MzhhNDg2YzcyNjFkMDE0NTEy
NzVkODI3YTdjOGJiLi4zNjE1MWNhODFmOTU4ZjliZTU0NzA2ZTQ1ZjhhYWI2ZDI4YjBhZjA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5k
b3cuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5k
b3cuaApAQCAtMjgsMTQgKzI4LDEzIEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKLSNpbXBvcnQg
IldlYktpdFN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCA8ZnVuY3Rpb25hbD4KICNpbXBvcnQg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAotQGNsYXNzIFdLVGV4dElu
ZGljYXRvcldpbmRvd0FuaW1hdGlvbjsKK0BjbGFzcyBXS1RleHRJbmRpY2F0b3JWaWV3OwogQGNs
YXNzIFdLVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01NiwyMSArNTUsMTIgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgc3RhcnRGYWRlT3V0VGltZXJGaXJlZCgpOwogCi0gICAgdm9pZCBm
YWRlT3V0QW5pbWF0aW9uQ2FsbGJhY2soZG91YmxlKTsKLSAgICB2b2lkIGZhZGVPdXRBbmltYXRp
b25EaWRFbmQoKTsKLQotICAgIHZvaWQgYm91bmNlQW5pbWF0aW9uQ2FsbGJhY2soZG91YmxlKTsK
LSAgICB2b2lkIGJvdW5jZUFuaW1hdGlvbkRpZEVuZCgpOwotCiAgICAgV0tWaWV3KiBtX3drVmll
dzsKICAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gbV90ZXh0SW5kaWNhdG9yOwogICAgIFJldGFp
blB0cjxOU1dpbmRvdz4gbV90ZXh0SW5kaWNhdG9yV2luZG93OwotCi0gICAgV0tXaW5kb3dCb3Vu
Y2VBbmltYXRpb25Db250ZXh0UmVmIG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dDsKLSAgICBSZXRh
aW5QdHI8V0tUZXh0SW5kaWNhdG9yV2luZG93QW5pbWF0aW9uPiBtX2JvdW5jZUFuaW1hdGlvbjsK
KyAgICBSZXRhaW5QdHI8V0tUZXh0SW5kaWNhdG9yVmlldz4gbV90ZXh0SW5kaWNhdG9yVmlldzsK
IAogICAgIFJ1bkxvb3A6OlRpbWVyPFRleHRJbmRpY2F0b3JXaW5kb3c+IG1fc3RhcnRGYWRlT3V0
VGltZXI7Ci0gICAgUmV0YWluUHRyPFdLVGV4dEluZGljYXRvcldpbmRvd0FuaW1hdGlvbj4gbV9m
YWRlT3V0QW5pbWF0aW9uOwogCiAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX2JvdW5jZUFu
aW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRleCA4MmE0YmEwMGIxNjFmNGFm
YTMxMTZjNDI2YjIzMTNkODcwZWU4NjU3Li4xZTQ3YTMyZTA4ZGY3ZTEyNWJkOTgyNWFkNzAxNzI4
NjVhOGI1OWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJ
bmRpY2F0b3JXaW5kb3cubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0
SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0zMSw3NyArMzEsMjE5IEBACiAjaW1wb3J0ICJUZXh0SW5k
aWNhdG9yLmgiCiAjaW1wb3J0ICJXS1ZpZXcuaCIKICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgYm91bmNlQW5pbWF0aW9uRHVyYXRpb24g
PSAwLjEyOwotc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lQmVmb3JlRmFkZVN0YXJ0cyA9IGJvdW5j
ZUFuaW1hdGlvbkR1cmF0aW9uICsgMC4yOwotc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlT3V0QW5p
bWF0aW9uRHVyYXRpb24gPSAwLjM7CisjaW1wb3J0IDxXZWJDb3JlL1F1YXJ0ekNvcmVTUEkuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+CisK
K2NvbnN0IGRvdWJsZSBib3VuY2VBbmltYXRpb25EdXJhdGlvbiA9IDAuMTI7Citjb25zdCBkb3Vi
bGUgYm91bmNlV2l0aFRyYW5zaXRpb25BbmltYXRpb25EdXJhdGlvbiA9IDAuMjU7Citjb25zdCBk
b3VibGUgdGltZUJlZm9yZUZhZGVTdGFydHMgPSBib3VuY2VBbmltYXRpb25EdXJhdGlvbiArIDAu
MjsKK2NvbnN0IGRvdWJsZSBmYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7CisKKyNpZiBF
TkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQorY29uc3QgQ0dGbG9hdCBtaWRCb3Vu
Y2VTY2FsZSA9IDEuNTsKK2NvbnN0IENHRmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDM7Citjb25z
dCBDR0Zsb2F0IHZlcnRpY2FsQm9yZGVyID0gMTsKK2NvbnN0IENHRmxvYXQgYm9yZGVyV2lkdGgg
PSAxLjA7Citjb25zdCBDR0Zsb2F0IGNvcm5lclJhZGl1cyA9IDM7Citjb25zdCBDR0Zsb2F0IGRy
b3BTaGFkb3dPZmZzZXRYID0gMDsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd09mZnNldFkgPSAx
OworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDEuNTsKKyNlbHNlCitjb25z
dCBDR0Zsb2F0IG1pZEJvdW5jZVNjYWxlID0gMS4yOworY29uc3QgQ0dGbG9hdCBob3Jpem9udGFs
Qm9yZGVyID0gMjsKK2NvbnN0IENHRmxvYXQgdmVydGljYWxCb3JkZXIgPSAxOworY29uc3QgQ0dG
bG9hdCBib3JkZXJXaWR0aCA9IDA7Citjb25zdCBDR0Zsb2F0IGNvcm5lclJhZGl1cyA9IDA7Citj
b25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRYID0gMDsKK2NvbnN0IENHRmxvYXQgZHJvcFNo
YWRvd09mZnNldFkgPSA1OworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDEy
OworY29uc3QgQ0dGbG9hdCByaW1TaGFkb3dCbHVyUmFkaXVzID0gMjsKKyNlbmRpZgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGludGVyZmFjZSBXS1RleHRJbmRpY2F0b3JWaWV3IDog
TlNWaWV3IHsKICAgICBSZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9yPiBfdGV4dEluZGljYXRv
cjsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2JvdW5jZUxheWVyczsKKyAgICBDR1NpemUgX21h
cmdpbjsKKyAgICBCT09MIF90cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yOwogfQogCi0tIChp
ZClfaW5pdFdpdGhUZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktpdDo6VGV4dEluZGljYXRv
cj4pdGV4dEluZGljYXRvcjsKKy0gKGlkKV9pbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgdGV4
dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0
b3IgbWFyZ2luOihDR1NpemUpbWFyZ2luIHRyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3I6KEJP
T0wpdHJhbnNpdGlvbkZyb21TZWxlY3Rpb25Db2xvcjsKKworLSAodm9pZClib3VuY2VXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lk
KWZhZGVPdXRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXI7CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLVGV4dEluZGljYXRvclZpZXcKIAot
LSAoaWQpX2luaXRXaXRoVGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRp
Y2F0b3I+KXRleHRJbmRpY2F0b3IKKy0gKGlkKV9pbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUg
dGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRp
Y2F0b3IgbWFyZ2luOihDR1NpemUpbWFyZ2luIHRyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3I6
KEJPT0wpdHJhbnNpdGlvbkZyb21TZWxlY3Rpb25Db2xvcgogewotICAgIGlmICgoc2VsZiA9IFtz
dXBlciBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3RdKSkKKyAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhGcmFtZTpmcmFtZV0pKSB7CiAgICAgICAgIF90ZXh0SW5kaWNhdG9yID0gdGV4dElu
ZGljYXRvcjsKKyAgICAgICAgX21hcmdpbiA9IG1hcmdpbjsKKyAgICAgICAgX3RyYW5zaXRpb25G
cm9tU2VsZWN0aW9uQ29sb3IgPSB0cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yOworCisgICAg
ICAgIHNlbGYud2FudHNMYXllciA9IFlFUzsKKyAgICAgICAgc2VsZi5sYXllci5hbmNob3JQb2lu
dCA9IENHUG9pbnRaZXJvOworCisgICAgICAgIEZsb2F0U2l6ZSBjb250ZW50c0ltYWdlTG9naWNh
bFNpemUgPSBfdGV4dEluZGljYXRvci0+ZGF0YSgpLmNvbnRlbnRJbWFnZS0+c2l6ZSgpOworICAg
ICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5k
YXRhKCkuY29udGVudEltYWdlU2NhbGVGYWN0b3IpOworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY29udGVudHNJbWFnZTsKKyAgICAgICAgaWYgKF90cmFuc2l0aW9uRnJvbVNlbGVjdGlv
bkNvbG9yKQorICAgICAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5kYXRh
KCkuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodC0+bWFrZUNHSW1hZ2UoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5kYXRhKCkuY29u
dGVudEltYWdlLT5tYWtlQ0dJbWFnZSgpOworCisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gYm91bmNlTGF5ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XSk7CisKKyAgICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGhpZ2hsaWdodENvbG9yID0gW05T
Q29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOjEgZ3JlZW46MSBibHVlOjAgYWxwaGE6MV0uQ0dDb2xv
cjsKKyAgICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IHJpbVNoYWRvd0NvbG9yID0gW05TQ29s
b3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6MCBhbHBoYTowLjE1XS5DR0NvbG9yOworICAgICAgICBS
ZXRhaW5QdHI8Q0dDb2xvclJlZj4gZHJvcFNoYWRvd0NvbG9yID0gW05TQ29sb3IgY29sb3JXaXRo
RGV2aWNlV2hpdGU6MCBhbHBoYTowLjJdLkNHQ29sb3I7CisKKyAgICAgICAgUmV0YWluUHRyPENH
Q29sb3JSZWY+IGJvcmRlckNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45NiBn
cmVlbjouOTAgYmx1ZTowIGFscGhhOjFdLkNHQ29sb3I7CisgICAgICAgIFJldGFpblB0cjxDR0Nv
bG9yUmVmPiBncmFkaWVudERhcmtDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDou
OTI5IGdyZWVuOi44IGJsdWU6MCBhbHBoYToxXS5DR0NvbG9yOworICAgICAgICBSZXRhaW5QdHI8
Q0dDb2xvclJlZj4gZ3JhZGllbnRMaWdodENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNl
UmVkOi45NDkgZ3JlZW46LjkzNyBibHVlOjAgYWxwaGE6MV0uQ0dDb2xvcjsKKworICAgICAgICBm
b3IgKGF1dG8mIHRleHRSZWN0IDogX3RleHRJbmRpY2F0b3ItPmRhdGEoKS50ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmNlTGF5
ZXJSZWN0ID0gdGV4dFJlY3Q7CisgICAgICAgICAgICBib3VuY2VMYXllclJlY3QubW92ZShfbWFy
Z2luLndpZHRoLCBfbWFyZ2luLmhlaWdodCk7CisgICAgICAgICAgICBib3VuY2VMYXllclJlY3Qu
aW5mbGF0ZVgoaG9yaXpvbnRhbEJvcmRlcik7CisgICAgICAgICAgICBib3VuY2VMYXllclJlY3Qu
aW5mbGF0ZVkodmVydGljYWxCb3JkZXIpOworCisgICAgICAgICAgICBSZXRhaW5QdHI8Q0FMYXll
cj4gYm91bmNlTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAg
ICAgICAgW2JvdW5jZUxheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVy
RGVsZWdhdGUgc2hhcmVkXV07CisgICAgICAgICAgICBbYm91bmNlTGF5ZXIgc2V0T3BhY2l0eTow
XTsKKyAgICAgICAgICAgIFtib3VuY2VMYXllciBzZXRGcmFtZTpib3VuY2VMYXllclJlY3RdOwor
ICAgICAgICAgICAgW2JvdW5jZUxheWVycyBhZGRPYmplY3Q6Ym91bmNlTGF5ZXIuZ2V0KCldOwor
CisgICAgICAgICAgICBGbG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChGbG9hdFBvaW50KCks
IGJvdW5jZUxheWVyUmVjdC5zaXplKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBoYXZlIHRvIGtpbGwgdGhlIG1hcmdpbiBoZXJlLgorICAgICAgICAgICAgaWYgKHRyYW5z
aXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IpIHsKKyAgICAgICAgICAgICAgICB5ZWxsb3dIaWdobGln
aHRSZWN0LmluZmxhdGVYKC1ob3Jpem9udGFsQm9yZGVyKTsKKyAgICAgICAgICAgICAgICB5ZWxs
b3dIaWdobGlnaHRSZWN0LmluZmxhdGVZKC12ZXJ0aWNhbEJvcmRlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBkcm9wU2hhZG93TGF5ZXIgPSBhZG9w
dE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICAgICAgW2Ryb3BTaGFkb3dMYXll
ciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1d
OworICAgICAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dDb2xvcjpkcm9wU2hhZG93
Q29sb3IuZ2V0KCldOworICAgICAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dSYWRp
dXM6ZHJvcFNoYWRvd0JsdXJSYWRpdXNdOworICAgICAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBz
ZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShkcm9wU2hhZG93T2Zmc2V0WCwgZHJvcFNoYWRvd09m
ZnNldFkpXTsKKyAgICAgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0aElzQm91
bmRzOllFU107CisgICAgICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd09wYWNpdHk6
MV07CisgICAgICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdo
dFJlY3RdOworICAgICAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRDb3JuZXJSYWRpdXM6Y29y
bmVyUmFkaXVzXTsKKyAgICAgICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpkcm9wU2hh
ZG93TGF5ZXIuZ2V0KCldOworICAgICAgICAgICAgW2JvdW5jZUxheWVyIHNldFZhbHVlOmRyb3BT
aGFkb3dMYXllci5nZXQoKSBmb3JLZXk6QCJkcm9wU2hhZG93TGF5ZXIiXTsKKworI2lmICFFTkFC
TEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQorICAgICAgICAgICAgUmV0YWluUHRyPENB
TGF5ZXI+IHJpbVNoYWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsK
KyAgICAgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJs
aW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICAgICAgW3JpbVNoYWRvd0xheWVy
IHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAgICAgICAgW3JpbVNoYWRvd0xh
eWVyIHNldFNoYWRvd0NvbG9yOnJpbVNoYWRvd0NvbG9yLmdldCgpXTsKKyAgICAgICAgICAgIFty
aW1TaGFkb3dMYXllciBzZXRTaGFkb3dSYWRpdXM6cmltU2hhZG93Qmx1clJhZGl1c107CisgICAg
ICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0aElzQm91bmRzOllFU107CisgICAg
ICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZVplcm9dOworICAg
ICAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd09wYWNpdHk6MV07CisgICAgICAgICAg
ICBbcmltU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxpZ2h0UmVjdF07CisgICAgICAg
ICAgICBbcmltU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1c107CisgICAg
ICAgICAgICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6cmltU2hhZG93TGF5ZXIuZ2V0KCldOwor
ICAgICAgICAgICAgW2JvdW5jZUxheWVyIHNldFZhbHVlOnJpbVNoYWRvd0xheWVyLmdldCgpIGZv
cktleTpAInJpbVNoYWRvd0xheWVyIl07CisjZW5kaWYKKworI2lmIEVOQUJMRShMRUdBQ1lfVEVY
VF9JTkRJQ0FUT1JfU1RZTEUpCisgICAgICAgICAgICBSZXRhaW5QdHI8Q0FHcmFkaWVudExheWVy
PiB0ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FHcmFkaWVudExheWVyIGFsbG9jXSBpbml0XSk7Cisg
ICAgICAgICAgICBbdGV4dExheWVyIHNldENvbG9yczpAWyAoaWQpZ3JhZGllbnRMaWdodENvbG9y
LmdldCgpLCAoaWQpZ3JhZGllbnREYXJrQ29sb3IuZ2V0KCkgXV07CisjZWxzZQorICAgICAgICAg
ICAgUmV0YWluUHRyPENBTGF5ZXI+IHRleHRMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9j
XSBpbml0XSk7CisjZW5kaWYKKyAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dyb3VuZENv
bG9yOmhpZ2hsaWdodENvbG9yLmdldCgpXTsKKyAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9y
ZGVyQ29sb3I6Ym9yZGVyQ29sb3IuZ2V0KCldOworICAgICAgICAgICAgW3RleHRMYXllciBzZXRC
b3JkZXJXaWR0aDpib3JkZXJXaWR0aF07CisgICAgICAgICAgICBbdGV4dExheWVyIHNldERlbGVn
YXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07CisgICAgICAg
ICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsKKwor
ICAgICAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHRleHRSZWN0OworICAgICAgICAgICAg
aW1hZ2VSZWN0Lm1vdmUoX3RleHRJbmRpY2F0b3ItPmRhdGEoKS50ZXh0Qm91bmRpbmdSZWN0SW5X
aW5kb3dDb29yZGluYXRlcy5sb2NhdGlvbigpIC0gX3RleHRJbmRpY2F0b3ItPmRhdGEoKS5zZWxl
Y3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIFt0
ZXh0TGF5ZXIgc2V0Q29udGVudHNSZWN0OkNHUmVjdE1ha2UoaW1hZ2VSZWN0LngoKSAvIGNvbnRl
bnRzSW1hZ2VMb2dpY2FsU2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QueSgpIC8gY29udGVudHNJbWFn
ZUxvZ2ljYWxTaXplLmhlaWdodCgpLCBpbWFnZVJlY3Qud2lkdGgoKSAvIGNvbnRlbnRzSW1hZ2VM
b2dpY2FsU2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkgLyBjb250ZW50c0ltYWdlTG9n
aWNhbFNpemUuaGVpZ2h0KCkpXTsKKyAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNH
cmF2aXR5OmtDQUdyYXZpdHlDZW50ZXJdOworICAgICAgICAgICAgW3RleHRMYXllciBzZXRDb250
ZW50c1NjYWxlOl90ZXh0SW5kaWNhdG9yLT5kYXRhKCkuY29udGVudEltYWdlU2NhbGVGYWN0b3Jd
OworICAgICAgICAgICAgW3RleHRMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRSZWN0XTsK
KyAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1c107Cisg
ICAgICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6dGV4dExheWVyLmdldCgpIGZvcktleTpA
InRleHRMYXllciJdOworICAgICAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOnRleHRM
YXllci5nZXQoKV07CisgICAgICAgIH0KKworICAgICAgICBzZWxmLmxheWVyLnN1YmxheWVycyA9
IGJvdW5jZUxheWVycy5nZXQoKTsKKyAgICAgICAgX2JvdW5jZUxheWVycyA9IGJvdW5jZUxheWVy
czsKKyAgICB9CiAKICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAodm9pZClkcmF3UmVjdDooTlNS
ZWN0KXJlY3QKKy0gKHZvaWQpYm91bmNlV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZv
aWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dChzdGF0aWNfY2FzdDxDR0NvbnRleHRSZWY+KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdIGdyYXBoaWNzUG9ydF0pKTsKLQotICAgIF90ZXh0SW5kaWNhdG9yLT5kcmF3KGdy
YXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Ci19Ci0KLS0gKEJPT0wpaXNG
bGlwcGVkCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIFdLVGV4
dEluZGljYXRvcldpbmRvd0FuaW1hdGlvbiA6IE5TQW5pbWF0aW9uPE5TQW5pbWF0aW9uRGVsZWdh
dGU+IHsKLSAgICBXZWJLaXQ6OlRleHRJbmRpY2F0b3JXaW5kb3cqIF90ZXh0SW5kaWNhdG9yV2lu
ZG93OwotICAgIHZvaWQgKFdlYktpdDo6VGV4dEluZGljYXRvcldpbmRvdzo6Kl9hbmltYXRpb25Q
cm9ncmVzc0NhbGxiYWNrKShkb3VibGUgcHJvZ3Jlc3MpOwotICAgIHZvaWQgKFdlYktpdDo6VGV4
dEluZGljYXRvcldpbmRvdzo6Kl9hbmltYXRpb25EaWRFbmRDYWxsYmFjaykoKTsKLX0KLQotLSAo
aWQpX2luaXRXaXRoVGV4dEluZGljYXRvcldpbmRvdzooV2ViS2l0OjpUZXh0SW5kaWNhdG9yV2lu
ZG93ICopdGV4dEluZGljYXRvcldpbmRvdyBhbmltYXRpb25EdXJhdGlvbjooQ0ZUaW1lSW50ZXJ2
YWwpZHVyYXRpb24gYW5pbWF0aW9uUHJvZ3Jlc3NDYWxsYmFjazoodm9pZCAoV2ViS2l0OjpUZXh0
SW5kaWNhdG9yV2luZG93OjoqKShkb3VibGUgcHJvZ3Jlc3MpKWFuaW1hdGlvblByb2dyZXNzQ2Fs
bGJhY2sgYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2s6KHZvaWQgKFdlYktpdDo6VGV4dEluZGljYXRv
cldpbmRvdzo6KikoKSlhbmltYXRpb25EaWRFbmRDYWxsYmFjazsKLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFdLVGV4dEluZGljYXRvcldpbmRvd0FuaW1hdGlvbgorICAgIGRvdWJsZSBhbmltYXRp
b25EdXJhdGlvbiA9IF90cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yID8gYm91bmNlV2l0aFRy
YW5zaXRpb25BbmltYXRpb25EdXJhdGlvbiA6IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uOworICAg
IFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBib3VuY2VBbmltYXRpb24gPSBbQ0FLZXlm
cmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAInRyYW5zZm9ybSJdOworICAgIFti
b3VuY2VBbmltYXRpb24gc2V0VmFsdWVzOkBbCisgICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENB
VHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxLCAxLCAxKV0sCisgICAgICAgIFtO
U1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShtaWRC
b3VuY2VTY2FsZSwgbWlkQm91bmNlU2NhbGUsIDEpXSwKKyAgICAgICAgW05TVmFsdWUgdmFsdWVX
aXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKDEsIDEsIDEpXQorICAgICAg
ICBdXTsKKyAgICBbYm91bmNlQW5pbWF0aW9uIHNldER1cmF0aW9uOmFuaW1hdGlvbkR1cmF0aW9u
XTsKKworICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiB0cmFuc2l0aW9uQW5pbWF0aW9u
OworICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBmYWRlU2hhZG93SW5BbmltYXRpb247
CisgICAgaWYgKF90cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yKSB7CisgICAgICAgIHRyYW5z
aXRpb25BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpA
ImNvbnRlbnRzIl07CisgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdl
ID0gX3RleHRJbmRpY2F0b3ItPmRhdGEoKS5jb250ZW50SW1hZ2UtPm1ha2VDR0ltYWdlKCk7Cisg
ICAgICAgIFt0cmFuc2l0aW9uQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2Uu
Z2V0KCldOworICAgICAgICBbdHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRGaWxsTW9kZTprQ0FGaWxs
TW9kZUZvcndhcmRzXTsKKyAgICAgICAgW3RyYW5zaXRpb25BbmltYXRpb24gc2V0UmVtb3ZlZE9u
Q29tcGxldGlvbjpOT107CisgICAgICAgIFt0cmFuc2l0aW9uQW5pbWF0aW9uIHNldER1cmF0aW9u
OmFuaW1hdGlvbkR1cmF0aW9uXTsKKworICAgICAgICBmYWRlU2hhZG93SW5BbmltYXRpb24gPSBb
Q0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAInNoYWRvd09wYWNpdHkiXTsK
KyAgICAgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6QDBdOworICAgICAg
ICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFRvVmFsdWU6QDFdOworICAgICAgICBbZmFkZVNo
YWRvd0luQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgICAg
ICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOworICAg
ICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldER1cmF0aW9uOmFuaW1hdGlvbkR1cmF0aW9u
XTsKKyAgICB9CiAKLS0gKGlkKV9pbml0V2l0aFRleHRJbmRpY2F0b3JXaW5kb3c6KFdlYktpdDo6
VGV4dEluZGljYXRvcldpbmRvdyAqKXRleHRJbmRpY2F0b3JXaW5kb3cgYW5pbWF0aW9uRHVyYXRp
b246KENGVGltZUludGVydmFsKWFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlvblByb2dyZXNzQ2Fs
bGJhY2s6KHZvaWQgKFdlYktpdDo6VGV4dEluZGljYXRvcldpbmRvdzo6KikoZG91YmxlIHByb2dy
ZXNzKSlhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrIGFuaW1hdGlvbkRpZEVuZENhbGxiYWNrOih2
b2lkIChXZWJLaXQ6OlRleHRJbmRpY2F0b3JXaW5kb3c6OiopKCkpYW5pbWF0aW9uRGlkRW5kQ2Fs
bGJhY2sKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhEdXJhdGlvbjphbmltYXRp
b25EdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF0pKSB7Ci0gICAg
ICAgIF90ZXh0SW5kaWNhdG9yV2luZG93ID0gdGV4dEluZGljYXRvcldpbmRvdzsKLSAgICAgICAg
X2FuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2sgPSBhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrOwot
ICAgICAgICBfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2sgPSBhbmltYXRpb25EaWRFbmRDYWxsYmFj
azsKLSAgICAgICAgW3NlbGYgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtzZWxmIHNldEFu
aW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0Q29tcGxldGlvbkJsb2NrOmNv
bXBsZXRpb25IYW5kbGVyXTsKKyAgICBmb3IgKENBTGF5ZXIqIGJvdW5jZUxheWVyIGluIF9ib3Vu
Y2VMYXllcnMuZ2V0KCkpIHsKKyAgICAgICAgW2JvdW5jZUxheWVyIGFkZEFuaW1hdGlvbjpib3Vu
Y2VBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiYm91bmNlIl07CisgICAgICAgIGlmIChfdHJhbnNp
dGlvbkZyb21TZWxlY3Rpb25Db2xvcikgeworICAgICAgICAgICAgW1tib3VuY2VMYXllciB2YWx1
ZUZvcktleTpAInRleHRMYXllciJdIGFkZEFuaW1hdGlvbjp0cmFuc2l0aW9uQW5pbWF0aW9uLmdl
dCgpIGZvcktleTpAImNvbnRlbnRUcmFuc2l0aW9uIl07CisgICAgICAgICAgICBbW2JvdW5jZUxh
eWVyIHZhbHVlRm9yS2V5OkAiZHJvcFNoYWRvd0xheWVyIl0gYWRkQW5pbWF0aW9uOmZhZGVTaGFk
b3dJbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRlU2hhZG93SW4iXTsKKyAgICAgICAgICAg
IFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6QCJyaW1TaGFkb3dMYXllciJdIGFkZEFuaW1hdGlv
bjpmYWRlU2hhZG93SW5BbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZVNoYWRvd0luIl07Cisg
ICAgICAgIH0KKworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0T3BhY2l0eToxXTsKICAgICB9Ci0g
ICAgcmV0dXJuIHNlbGY7CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0KIAotLSAodm9p
ZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKKy0gKHZv
aWQpZmFkZU91dFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIChfdGV4dEluZGljYXRvcldpbmRvdy0+Kl9hbmltYXRpb25Qcm9ncmVz
c0NhbGxiYWNrKShwcm9ncmVzcyk7CisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZh
ZGVBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAIm9w
YWNpdHkiXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6QDFdOworICAgIFtmYWRl
QW5pbWF0aW9uIHNldFRvVmFsdWU6QDBdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2Rl
OmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNv
bXBsZXRpb246Tk9dOworICAgIFtmYWRlQW5pbWF0aW9uIHNldER1cmF0aW9uOmZhZGVPdXRBbmlt
YXRpb25EdXJhdGlvbl07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJh
bnNhY3Rpb24gc2V0Q29tcGxldGlvbkJsb2NrOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBbc2Vs
Zi5sYXllciBhZGRBbmltYXRpb246ZmFkZUFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRlT3V0
Il07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0KIAotLSAodm9pZClhbmltYXRpb25E
aWRFbmQ6KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uCistIChCT09MKWlzRmxpcHBlZAogewotICAg
IEFTU0VSVChhbmltYXRpb24gPT0gc2VsZik7Ci0KLSAgICAoX3RleHRJbmRpY2F0b3JXaW5kb3ct
PipfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2spKCk7CisgICAgcmV0dXJuIFlFUzsKIH0KIAogQGVu
ZApAQCAtMTEwLDcgKzI1Miw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBUZXh0SW5kaWNhdG9y
V2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KFdLVmlldyAqd2tWaWV3KQogICAgIDogbV93a1Zp
ZXcod2tWaWV3KQotICAgICwgbV9ib3VuY2VBbmltYXRpb25Db250ZXh0KDApCiAgICAgLCBtX3N0
YXJ0RmFkZU91dFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRleHRJbmRpY2F0b3JXaW5k
b3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQpCiB7CiB9CkBAIC0xMzQsMTEgKzI3NSwxMyBAQCB2
b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0
SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdAogICAgICAgICByZXR1cm47CiAKICAgICBOU1JlY3QgY29u
dGVudFJlY3QgPSBtX3RleHRJbmRpY2F0b3ItPmZyYW1lUmVjdCgpOworCisgICAgQ0dGbG9hdCBo
b3Jpem9udGFsTWFyZ2luID0gc3RkOjptYXgoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKiAyICsgaG9y
aXpvbnRhbEJvcmRlciwgY29udGVudFJlY3Quc2l6ZS53aWR0aCAqIDIpOworICAgIENHRmxvYXQg
dmVydGljYWxNYXJnaW4gPSBzdGQ6Om1heChkcm9wU2hhZG93Qmx1clJhZGl1cyAqIDIgKyB2ZXJ0
aWNhbEJvcmRlciwgY29udGVudFJlY3Quc2l6ZS5oZWlnaHQgKiAyKTsKKworICAgIGNvbnRlbnRS
ZWN0ID0gTlNJbnNldFJlY3QoY29udGVudFJlY3QsIC1ob3Jpem9udGFsTWFyZ2luLCAtdmVydGlj
YWxNYXJnaW4pOwogICAgIE5TUmVjdCB3aW5kb3dGcmFtZVJlY3QgPSBOU0ludGVncmFsUmVjdChb
bV93a1ZpZXcgY29udmVydFJlY3Q6Y29udGVudFJlY3QgdG9WaWV3Om5pbF0pOwotI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgIHdpbmRvd0ZyYW1lUmVjdC5vcmlnaW4gPSBb
W21fd2tWaWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjp3aW5kb3dGcmFtZVJlY3Qub3Jp
Z2luXTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyAgICB3aW5kb3dGcmFtZVJlY3Qg
PSBbW21fd2tWaWV3IHdpbmRvd10gY29udmVydFJlY3RUb1NjcmVlbjp3aW5kb3dGcmFtZVJlY3Rd
OwogICAgIE5TUmVjdCB3aW5kb3dDb250ZW50UmVjdCA9IFtOU1dpbmRvdyBjb250ZW50UmVjdEZv
ckZyYW1lUmVjdDp3aW5kb3dGcmFtZVJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01h
c2tdOwogICAgIAogICAgIG1fdGV4dEluZGljYXRvcldpbmRvdyA9IGFkb3B0TlMoW1tOU1dpbmRv
dyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dDb250ZW50UmVjdCBzdHlsZU1hc2s6
TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVm
ZXI6Tk9dKTsKQEAgLTE0NywyMCArMjkwLDE0IEBAIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6
c2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0CiAg
ICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRPcGFxdWU6Tk9dOwogICAgIFttX3RleHRJbmRp
Y2F0b3JXaW5kb3cgc2V0SWdub3Jlc01vdXNlRXZlbnRzOllFU107CiAKLSAgICBSZXRhaW5QdHI8
V0tUZXh0SW5kaWNhdG9yVmlldz4gdGV4dEluZGljYXRvclZpZXcgPSBhZG9wdE5TKFtbV0tUZXh0
SW5kaWNhdG9yVmlldyBhbGxvY10gX2luaXRXaXRoVGV4dEluZGljYXRvcjptX3RleHRJbmRpY2F0
b3JdKTsKLSAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldENvbnRlbnRWaWV3OnRleHRJbmRp
Y2F0b3JWaWV3LmdldCgpXTsKKyAgICBtX3RleHRJbmRpY2F0b3JWaWV3ID0gYWRvcHROUyhbW1dL
VGV4dEluZGljYXRvclZpZXcgYWxsb2NdIF9pbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
W21fdGV4dEluZGljYXRvcldpbmRvdyBmcmFtZV0uc2l6ZS53aWR0aCwgW21fdGV4dEluZGljYXRv
cldpbmRvdyBmcmFtZV0uc2l6ZS5oZWlnaHQpIHRleHRJbmRpY2F0b3I6bV90ZXh0SW5kaWNhdG9y
IG1hcmdpbjpDR1NpemVNYWtlKGhvcml6b250YWxNYXJnaW4sIHZlcnRpY2FsTWFyZ2luKSB0cmFu
c2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yOm1fdGV4dEluZGljYXRvci0+ZGF0YSgpLnRyYW5zaXRp
b25Gcm9tU2VsZWN0aW9uQ29sb3JdKTsKKyAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93IHNldENv
bnRlbnRWaWV3Om1fdGV4dEluZGljYXRvclZpZXcuZ2V0KCldOwogCiAgICAgW1ttX3drVmlldyB3
aW5kb3ddIGFkZENoaWxkV2luZG93Om1fdGV4dEluZGljYXRvcldpbmRvdy5nZXQoKSBvcmRlcmVk
Ok5TV2luZG93QWJvdmVdOwogICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0UmVsZWFzZWRX
aGVuQ2xvc2VkOk5PXTsKIAotICAgIGlmIChhbmltYXRlKSB7Ci0gICAgICAgIG1fYm91bmNlQW5p
bWF0aW9uQ29tcGxldGlvbkhhbmRsZXIgPSBXVEY6Om1vdmUoYW5pbWF0aW9uQ29tcGxldGlvbkhh
bmRsZXIpOwotICAgICAgICAvLyBTdGFydCB0aGUgYm91bmNlIGFuaW1hdGlvbi4KLSAgICAgICAg
bV9ib3VuY2VBbmltYXRpb25Db250ZXh0ID0gV0tXaW5kb3dCb3VuY2VBbmltYXRpb25Db250ZXh0
Q3JlYXRlKG1fdGV4dEluZGljYXRvcldpbmRvdy5nZXQoKSk7Ci0gICAgICAgIG1fYm91bmNlQW5p
bWF0aW9uID0gYWRvcHROUyhbW1dLVGV4dEluZGljYXRvcldpbmRvd0FuaW1hdGlvbiBhbGxvY10g
X2luaXRXaXRoVGV4dEluZGljYXRvcldpbmRvdzp0aGlzIGFuaW1hdGlvbkR1cmF0aW9uOmJvdW5j
ZUFuaW1hdGlvbkR1cmF0aW9uCi0gICAgICAgICAgICBhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNr
OiZUZXh0SW5kaWNhdG9yV2luZG93Ojpib3VuY2VBbmltYXRpb25DYWxsYmFjayBhbmltYXRpb25E
aWRFbmRDYWxsYmFjazomVGV4dEluZGljYXRvcldpbmRvdzo6Ym91bmNlQW5pbWF0aW9uRGlkRW5k
XSk7Ci0gICAgICAgIFttX2JvdW5jZUFuaW1hdGlvbiBzdGFydEFuaW1hdGlvbl07Ci0gICAgfQor
ICAgIGlmIChhbmltYXRlKQorICAgICAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBib3VuY2VXaXRo
Q29tcGxldGlvbkhhbmRsZXI6XnsgYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXIoKTsgfV07CiAK
ICAgICBpZiAoZmFkZU91dCkKICAgICAgICAgbV9zdGFydEZhZGVPdXRUaW1lci5zdGFydE9uZVNo
b3QodGltZUJlZm9yZUZhZGVTdGFydHMpOwpAQCAtMTczLDE5ICszMTAsNiBAQCB2b2lkIFRleHRJ
bmRpY2F0b3JXaW5kb3c6OmNsb3NlV2luZG93KCkKIAogICAgIG1fc3RhcnRGYWRlT3V0VGltZXIu
c3RvcCgpOwogCi0gICAgaWYgKG1fZmFkZU91dEFuaW1hdGlvbikgewotICAgICAgICBbbV9mYWRl
T3V0QW5pbWF0aW9uIHN0b3BBbmltYXRpb25dOwotICAgICAgICBtX2ZhZGVPdXRBbmltYXRpb24g
PSBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2JvdW5jZUFuaW1hdGlvbikgewotICAgICAg
ICBbbV9ib3VuY2VBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAgICAgIG1fYm91bmNlQW5p
bWF0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV9ib3VuY2VBbmltYXRpb25Db250
ZXh0KQotICAgICAgICBXS1dpbmRvd0JvdW5jZUFuaW1hdGlvbkNvbnRleHREZXN0cm95KG1fYm91
bmNlQW5pbWF0aW9uQ29udGV4dCk7Ci0gICAgCiAgICAgW1ttX3RleHRJbmRpY2F0b3JXaW5kb3cg
cGFyZW50V2luZG93XSByZW1vdmVDaGlsZFdpbmRvdzptX3RleHRJbmRpY2F0b3JXaW5kb3cuZ2V0
KCldOwogICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgY2xvc2VdOwogICAgIG1fdGV4dEluZGlj
YXRvcldpbmRvdyA9IG51bGxwdHI7CkBAIC0xOTMsNDUgKzMxNywxMSBAQCB2b2lkIFRleHRJbmRp
Y2F0b3JXaW5kb3c6OmNsb3NlV2luZG93KCkKIAogdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93Ojpz
dGFydEZhZGVPdXRUaW1lckZpcmVkKCkKIHsKLSAgICBBU1NFUlQoIW1fZmFkZU91dEFuaW1hdGlv
bik7Ci0gICAgCi0gICAgbV9mYWRlT3V0QW5pbWF0aW9uID0gYWRvcHROUyhbW1dLVGV4dEluZGlj
YXRvcldpbmRvd0FuaW1hdGlvbiBhbGxvY10gX2luaXRXaXRoVGV4dEluZGljYXRvcldpbmRvdzp0
aGlzIGFuaW1hdGlvbkR1cmF0aW9uOmZhZGVPdXRBbmltYXRpb25EdXJhdGlvbgotICAgICAgICBh
bmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrOiZUZXh0SW5kaWNhdG9yV2luZG93OjpmYWRlT3V0QW5p
bWF0aW9uQ2FsbGJhY2sgYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2s6JlRleHRJbmRpY2F0b3JXaW5k
b3c6OmZhZGVPdXRBbmltYXRpb25EaWRFbmRdKTsKLSAgICBbbV9mYWRlT3V0QW5pbWF0aW9uIHN0
YXJ0QW5pbWF0aW9uXTsKLX0KLQotdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpmYWRlT3V0QW5p
bWF0aW9uQ2FsbGJhY2soZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChtX2ZhZGVPdXRB
bmltYXRpb24pOwotCi0gICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRBbHBoYVZhbHVlOjEu
MCAtIHByb2dyZXNzXTsKLX0KLQotdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpmYWRlT3V0QW5p
bWF0aW9uRGlkRW5kKCkKLXsKLSAgICBBU1NFUlQobV9mYWRlT3V0QW5pbWF0aW9uKTsKLSAgICBB
U1NFUlQobV90ZXh0SW5kaWNhdG9yV2luZG93KTsKLQotICAgIGNsb3NlV2luZG93KCk7Ci19Ci0K
LXZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6Ym91bmNlQW5pbWF0aW9uQ2FsbGJhY2soZG91Ymxl
IHByb2dyZXNzKQotewotICAgIEFTU0VSVChtX2JvdW5jZUFuaW1hdGlvbik7Ci0gICAgQVNTRVJU
KG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dCk7Ci0KLSAgICBXS1dpbmRvd0JvdW5jZUFuaW1hdGlv
blNldEFuaW1hdGlvblByb2dyZXNzKG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dCwgcHJvZ3Jlc3Mp
OwotfQotCi12b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OmJvdW5jZUFuaW1hdGlvbkRpZEVuZCgp
Ci17Ci0gICAgQVNTRVJUKG1fYm91bmNlQW5pbWF0aW9uKTsKLSAgICBBU1NFUlQobV9ib3VuY2VB
bmltYXRpb25Db250ZXh0KTsKLSAgICBBU1NFUlQobV90ZXh0SW5kaWNhdG9yV2luZG93KTsKLQot
ICAgIFdLV2luZG93Qm91bmNlQW5pbWF0aW9uQ29udGV4dERlc3Ryb3kobV9ib3VuY2VBbmltYXRp
b25Db250ZXh0KTsKLSAgICBtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQgPSAwOwotICAgIG1fYm91
bmNlQW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICBSZXRhaW5QdHI8TlNXaW5kb3c+
IGluZGljYXRvcldpbmRvdyA9IG1fdGV4dEluZGljYXRvcldpbmRvdzsKKyAgICBbbV90ZXh0SW5k
aWNhdG9yVmlldyBmYWRlT3V0V2l0aENvbXBsZXRpb25IYW5kbGVyOltpbmRpY2F0b3JXaW5kb3dd
IHsKKyAgICAgICAgW1tpbmRpY2F0b3JXaW5kb3cgcGFyZW50V2luZG93XSByZW1vdmVDaGlsZFdp
bmRvdzppbmRpY2F0b3JXaW5kb3cuZ2V0KCldOworICAgICAgICBbaW5kaWNhdG9yV2luZG93IGNs
b3NlXTsKKyAgICB9XTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA1ODcxZmQ2MjA0MGRmZDM1ZjRk
ZWQ4NzIwMTE4Y2VmOTIyMjQyNTc3Li41MDY1ZjI3ZjYzOGIwMDgxMWNkMTU1YmZlYTM2MzViZmY5
OWZmYTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
QEAgLTY2NCw3ICs2NjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVhayhjb25zdCBTdHJpbmcm
KTsKICAgICB2b2lkIHN0b3BTcGVha2luZygpOwogCi0gICAgdm9pZCBwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEZvclNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlZpc2li
bGVTZWxlY3Rpb24mKTsKKyAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0
aW9uKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYsIGJv
b2wgdHJhbnNpdGlvbkZyb21TZWxlY3Rpb25Db2xvciA9IGZhbHNlKTsKICNlbmRpZgogCiAgICAg
Ym9vbCBpc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwpAQCAtOTc4LDcgKzk3OCw3IEBAIHBy
aXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwogICAgIHZvaWQgcGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKTsKLSAgICB2b2lkIHBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpSYW5n
ZSYsIE5TRGljdGlvbmFyeSAqb3B0aW9ucyk7CisgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclJhbmdlKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6UmFuZ2UmLCBOU0RpY3Rpb25h
cnkgKm9wdGlvbnMsIGJvb2wgdHJhbnNpdGlvbkZyb21TZWxlY3Rpb25Db2xvciA9IGZhbHNlKTsK
IAogICAgIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgd2luZG93RnJhbWVJblVuZmxpcHBlZFNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIGFjY2Vzc2liaWxpdHlWaWV3Q29vcmRpbmF0ZXMpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
aW5kZXggNTk3ODVjM2Y0YTNhYzIzY2NjNWY2MDFlYzY0MDUyMzFlNzJlZjA0MS4uNDczMWM0Mjgx
YTdhM2Y5OGY0MGZhNTNiZTEwYWUzMjY4NGRlM2M2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNDk3LDIxICs0OTcs
MjEgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29u
c3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZv
clJhbmdlKGZyYW1lLCAqcmFuZ2UsIG9wdGlvbnMpOwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclNlbGVjdGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgYm9vbCB0cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yKQogewogICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSByYW5nZUZvckRpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oc2VsZWN0aW9uLCAmb3B0aW9u
cyk7CiAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9v
a3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBvcHRpb25zKTsKKyAgICAgICAgcGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2UsIG9wdGlv
bnMsIHRyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKIHsKICAgICBGcmFtZSog
ZnJhbWUgPSAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
LSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNl
bGVjdGlvbihmcmFtZSwgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCB0cnVlKTsKIH0K
IAotdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lKiBm
cmFtZSwgUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMpCit2b2lkIFdlYlBhZ2U6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUqIGZyYW1lLCBSYW5nZSYgcmFu
Z2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgYm9vbCB0cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNv
bG9yKQogewogICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CkBAIC01NDgsNyArNTQ4LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lKiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBO
U0RpY3QKICAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNj
YWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwogICAgIH1dOwogCi0gICAgUmVmUHRy
PFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRo
UmFuZ2UocmFuZ2UpOworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yID0g
VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCB0cmFuc2l0aW9uRnJvbVNlbGVj
dGlvbkNvbG9yKTsKICAgICBpZiAoIXRleHRJbmRpY2F0b3IpCiAgICAgICAgIHJldHVybjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241852</attachid>
            <date>2014-11-19 02:27:33 -0800</date>
            <delta_ts>2014-11-19 15:30:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138856-20141119022746.patch</filename>
            <type>text/plain</type>
            <size>43393</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTAzOGFlOWExZjI1YjNh
NTU4ODBjMDI1MDc5ZDBhZjQ2ZmM2MWQ0My4uMTE1OGZiYmY2YjEzOWE2ZjI0MjA2ZjEzOGZmOTI0
MGI1YWM0YmNlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE0LTExLTE4ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBvcHRp
b25hbCBlbnRyeSB0cmFuc2l0aW9uIChmcm9tIHNlbGVjdGlvbiBoaWdobGlnaHQpIHRvIFRleHRJ
bmRpY2F0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzODg1NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg4NDAxMjg+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvVGV4dEluZGljYXRv
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6Om91dHNldEluZGljYXRvclJlY3RJbmNsdWRpbmdTaGFk
b3cpOgorICAgICAgICAoV2ViS2l0OjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpzbmFwc2hvdFNlbGVjdGlvbldpdGhIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRJbmRpY2F0b3I6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OlRleHRJbmRpY2F0b3I6OkRhdGE6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRJ
bmRpY2F0b3I6OkRhdGE6OmRlY29kZSk6CisgICAgICAgIFJlbW92ZSBUZXh0SW5kaWNhdG9yOjpk
cmF3IGFuZCByZWxhdGVkIGZ1bmN0aW9uczsgZHJhd2luZyBpcyBoYW5kbGVkIGVudGlyZWx5Cisg
ICAgICAgIGJ5IHRoZSBUZXh0SW5kaWNhdG9yV2luZG93IG5vdywgYW5kIFRleHRJbmRpY2F0b3Ig
anVzdCBzdG9yZXMgdGhlIHJlcXVpcmVkIGRhdGEuCisKKyAgICAgICAgVW5pZnkgb3V0c2V0SW5k
aWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdy4KKworICAgICAgICBBZGQgYW4gYXJndW1lbnQgdG8g
Y3JlYXRlV2l0aFJhbmdlL2NyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lIHRvIGluZGljYXRlCisg
ICAgICAgIGlmIHRoZSBUZXh0SW5kaWNhdG9yIHNob3VsZCB0cmFuc2l0aW9uIGZyb20gdGhlIHNl
bGVjdGlvbiBoaWdobGlnaHQgdG8KKyAgICAgICAgdGhlIHllbGxvdyBidWJibGUuCisKKyAgICAg
ICAgSWYgd2UncmUgZG9pbmcgdGhlIHRyYW5zaXRpb24sIHBhaW50IHRoZSBzZWxlY3Rpb24gaW50
byBhIHNlY29uZCBiaXRtYXAsCisgICAgICAgIHdpdGhvdXQgZm9yY2luZyB0aGUgdGV4dCB0byBi
bGFjayBhbmQgd2l0aG91dCBoaWRpbmcgdGhlIGJsdWUgaGlnaGxpZ2h0LgorCisgICAgICAgIEVu
Y29kZS9kZWNvZGUgdGhlIHNlY29uZCBiaXRtYXAuCisKKyAgICAgICAgKiBTaGFyZWQvVGV4dElu
ZGljYXRvci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbToKKyAgICAg
ICAgKC1bV0tUZXh0SW5kaWNhdG9yVmlldyBfaW5pdFdpdGhGcmFtZTp0ZXh0SW5kaWNhdG9yOm1h
cmdpbjp0cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yOl0pOgorICAgICAgICAoLVtXS1RleHRJ
bmRpY2F0b3JWaWV3IGJvdW5jZVdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
V0tUZXh0SW5kaWNhdG9yVmlldyBmYWRlT3V0V2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtXS1RleHRJbmRpY2F0b3JWaWV3IGlzRmxpcHBlZF0pOgorICAgICAgICAoV2ViS2l0
OjpUZXh0SW5kaWNhdG9yV2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KToKKyAgICAgICAgKFdl
YktpdDo6VGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcik6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRJbmRpY2F0b3JXaW5kb3c6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktp
dDo6VGV4dEluZGljYXRvcldpbmRvdzo6c3RhcnRGYWRlT3V0VGltZXJGaXJlZCk6CisgICAgICAg
IFJlLWltcGxlbWVudCB0aGUgYm91bmNlIGFuaW1hdGlvbiB1c2luZyBDb3JlQW5pbWF0aW9uIGlu
c3RlYWQgb2YKKyAgICAgICAgdGhlIFdLU0ktYmFzZWQgV0tXaW5kb3dCb3VuY2VBbmltYXRpb24q
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJh
bmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0
QXRMb2NhdGlvbik6CisgICAgICAgIFVzZSB0aGUgYWZvcmVtZW50aW9uZWQgdHJhbnNpdGlvbiBh
bmltYXRpb24gZm9yIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uCisg
ICAgICAgIGFuZCBmb3IgRGF0YSBEZXRlY3RvcnMgVGV4dEluZGljYXRvcnMuCisKIDIwMTQtMTEt
MTcgIENvbnJhZCBTaHVsdHogIDxjb25yYWRfc2h1bHR6QGFwcGxlLmNvbT4KIAogICAgICAgICBQ
YWdlIHByZXZpZXdzIHNob3VsZCBiZSBsb2FkZWQgc29vbmVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
VGV4dEluZGljYXRvci5jcHAKaW5kZXggNDJkODM2M2YxN2Y3ZWMxMDdiOTJkY2Y1Y2MzOTY1ODJm
NTAzNGJhYS4uNWU3ZjJjYzYyZDU1ODAzZTdlZmE3ZDMwOGMzZmUwNjgzNzVlMzI5NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMzksOTEgKzM5LDM1IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZVNuYXBzaG90dGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
ZGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BhdGguaD4KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTAwMAotI2RlZmluZSBFTkFCTEVfTEVHQUNZX1RF
WFRfSU5ESUNBVE9SX1NUWUxFIDEKLSNlbHNlCi0jZGVmaW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9J
TkRJQ0FUT1JfU1RZTEUgMAotI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisv
LyBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlcyBpbiBUZXh0SW5kaWNhdG9yV2luZG93Lgor
Ly8gRklYTUU6IElkZWFsbHkgdGhlc2Ugd291bGQgb25seSBiZSBpbiBvbmUgcGxhY2UuCiAjaWYg
RU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKLXN0YXRpYyBjb25zdCBmbG9hdCBj
b3JuZXJSYWRpdXMgPSAzLjA7Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBzaGFkb3dPZmZzZXRYID0g
MC4wOwotc3RhdGljIGNvbnN0IGZsb2F0IHNoYWRvd09mZnNldFkgPSAxLjA7Ci1zdGF0aWMgY29u
c3QgZmxvYXQgc2hhZG93Qmx1clJhZGl1cyA9IDMuMDsKLQotc3RhdGljIGNvbnN0IGludCBzaGFk
b3dSZWQgPSAwOwotc3RhdGljIGNvbnN0IGludCBzaGFkb3dHcmVlbiA9IDA7Ci1zdGF0aWMgY29u
c3QgaW50IHNoYWRvd0JsdWUgPSAwOwotc3RhdGljIGNvbnN0IGludCBzaGFkb3dBbHBoYSA9IDIw
NDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IGxpZ2h0Qm9yZGVyVGhpY2tuZXNzID0gMS4wOwotc3Rh
dGljIGNvbnN0IGZsb2F0IGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIgPSAzLjA7
Ci1zdGF0aWMgY29uc3QgZmxvYXQgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIgPSAx
LjA7Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBob3Jpem9udGFsQm9yZGVySW5zaWRlU2hhZG93ID0g
bGlnaHRCb3JkZXJUaGlja25lc3MgKyBob3Jpem9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVy
Owotc3RhdGljIGNvbnN0IGZsb2F0IHZlcnRpY2FsQm9yZGVySW5zaWRlU2hhZG93ID0gbGlnaHRC
b3JkZXJUaGlja25lc3MgKyB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlcjsKLQotc3Rh
dGljIGNvbnN0IGZsb2F0IGxlZnRCb3JkZXJUaGlja25lc3MgPSBob3Jpem9udGFsQm9yZGVySW5z
aWRlU2hhZG93ICsgc2hhZG93T2Zmc2V0WCArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7Ci1zdGF0
aWMgY29uc3QgZmxvYXQgdG9wQm9yZGVyVGhpY2tuZXNzID0gdmVydGljYWxCb3JkZXJJbnNpZGVT
aGFkb3cgLSBzaGFkb3dPZmZzZXRZICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKLXN0YXRpYyBj
b25zdCBmbG9hdCByaWdodEJvcmRlclRoaWNrbmVzcyA9IGhvcml6b250YWxCb3JkZXJJbnNpZGVT
aGFkb3cgLSBzaGFkb3dPZmZzZXRYICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKLXN0YXRpYyBj
b25zdCBmbG9hdCBib3R0b21Cb3JkZXJUaGlja25lc3MgPSB2ZXJ0aWNhbEJvcmRlckluc2lkZVNo
YWRvdyArIHNoYWRvd09mZnNldFkgKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOwotCi1zdGF0aWMg
Y29uc3QgZmxvYXQgaG9yaXpvbnRhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciA9IGhvcml6
b250YWxCb3JkZXJJbnNpZGVTaGFkb3cgLSBsaWdodEJvcmRlclRoaWNrbmVzcyAvIDIuMDsKLXN0
YXRpYyBjb25zdCBmbG9hdCB2ZXJ0aWNhbE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlciA9IHZl
cnRpY2FsQm9yZGVySW5zaWRlU2hhZG93IC0gbGlnaHRCb3JkZXJUaGlja25lc3MgLyAyLjA7Ci0K
LXN0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJSZWQgPSAyNDU7Ci1zdGF0aWMgY29uc3QgaW50
IGxpZ2h0Qm9yZGVyR3JlZW4gPSAyMzA7Ci1zdGF0aWMgY29uc3QgaW50IGxpZ2h0Qm9yZGVyQmx1
ZSA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IGxpZ2h0Qm9yZGVyQWxwaGEgPSAyNTU7Ci0KLXN0YXRp
YyBjb25zdCBpbnQgZ3JhZGllbnREYXJrUmVkID0gMjM3Owotc3RhdGljIGNvbnN0IGludCBncmFk
aWVudERhcmtHcmVlbiA9IDIwNDsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnREYXJrQmx1ZSA9
IDA7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRpZW50RGFya0FscGhhID0gMjU1OwotCi1zdGF0aWMg
Y29uc3QgaW50IGdyYWRpZW50TGlnaHRSZWQgPSAyNDI7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRp
ZW50TGlnaHRHcmVlbiA9IDIzOTsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEJsdWUg
PSAwOwotc3RhdGljIGNvbnN0IGludCBncmFkaWVudExpZ2h0QWxwaGEgPSAyNTU7Citjb25zdCBm
bG9hdCBob3Jpem9udGFsQm9yZGVyID0gMzsKK2NvbnN0IGZsb2F0IHZlcnRpY2FsQm9yZGVyID0g
MTsKK2NvbnN0IGZsb2F0IGRyb3BTaGFkb3dCbHVyUmFkaXVzID0gMS41OwogI2Vsc2UKLWNvbnN0
IGZsb2F0IGZsYXRTdHlsZUhvcml6b250YWxCb3JkZXIgPSAyOwotY29uc3QgZmxvYXQgZmxhdFN0
eWxlVmVydGljYWxCb3JkZXIgPSAxOwotY29uc3QgZmxvYXQgZmxhdFNoYWRvd09mZnNldFggPSAw
OwotY29uc3QgZmxvYXQgZmxhdFNoYWRvd09mZnNldFkgPSA1OwotY29uc3QgZmxvYXQgZmxhdFNo
YWRvd0JsdXJSYWRpdXMgPSAyNTsKLWNvbnN0IGZsb2F0IGZsYXRSaW1TaGFkb3dCbHVyUmFkaXVz
ID0gMjsKK2NvbnN0IGZsb2F0IGhvcml6b250YWxCb3JkZXIgPSAyOworY29uc3QgZmxvYXQgdmVy
dGljYWxCb3JkZXIgPSAxOworY29uc3QgZmxvYXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAxMjsK
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIEZsb2F0UmVjdCBpbmZsYXRl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGluZmxhdGVYLCBmbG9hdCBpbmZsYXRl
WSkKLXsKLSAgICBGbG9hdFJlY3QgaW5mbGF0ZWRSZWN0ID0gcmVjdDsKLSAgICBpbmZsYXRlZFJl
Y3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGluZmxhdGVkUmVjdC5pbmZsYXRlWShpbmZsYXRl
WSk7Ci0gICAgcmV0dXJuIGluZmxhdGVkUmVjdDsKLX0KLQogc3RhdGljIEZsb2F0UmVjdCBvdXRz
ZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5nU2hhZG93KGNvbnN0IEZsb2F0UmVjdCByZWN0KQogewot
I2lmIEVOQUJMRShMRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUpCiAgICAgRmxvYXRSZWN0IG91
dHNldFJlY3QgPSByZWN0OwotICAgIG91dHNldFJlY3QubW92ZSgtbGVmdEJvcmRlclRoaWNrbmVz
cywgLXRvcEJvcmRlclRoaWNrbmVzcyk7Ci0gICAgb3V0c2V0UmVjdC5leHBhbmQobGVmdEJvcmRl
clRoaWNrbmVzcyArIHJpZ2h0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJUaGlja25lc3MgKyBi
b3R0b21Cb3JkZXJUaGlja25lc3MpOworICAgIG91dHNldFJlY3QuaW5mbGF0ZVgoZHJvcFNoYWRv
d0JsdXJSYWRpdXMgKyBob3Jpem9udGFsQm9yZGVyKTsKKyAgICBvdXRzZXRSZWN0LmluZmxhdGVZ
KGRyb3BTaGFkb3dCbHVyUmFkaXVzICsgdmVydGljYWxCb3JkZXIpOwogICAgIHJldHVybiBvdXRz
ZXRSZWN0OwotI2Vsc2UKLSAgICByZXR1cm4gaW5mbGF0ZVJlY3QocmVjdCwgZmxhdFNoYWRvd0Js
dXJSYWRpdXMgKyBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1clJhZGl1
cyArIGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVyKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgYm9vbCB0
ZXh0SW5kaWNhdG9yc0ZvclRleHRSZWN0c092ZXJsYXAoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHRleHRSZWN0cykKQEAgLTE1NSw3ICs5OSw3IEBAIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4g
VGV4dEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRhdGEmIGRhdGEpCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0SW5kaWNhdG9yKGRhdGEpKTsKIH0KIAotUGFzc1Jl
ZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3Qg
UmFuZ2UmIHJhbmdlKQorUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBib29sIHRyYW5zaXRpb25Gcm9tU2Vs
ZWN0aW9uQ29sb3IpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gcmFuZ2Uuc3RhcnRDb250YWluZXIo
KS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogCkBAIC0xNjUsMTQgKzEwOSw0NiBAQCBQYXNzUmVmUHRy
PFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5n
ZSYgcmFuZ2UpCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bigmcmFuZ2UpOwogCi0gICAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IGluZGljYXRvciA9IFRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKCpXZWJGcmFtZTo6ZnJvbUNvcmVG
cmFtZSgqZnJhbWUpKTsKKyAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gaW5kaWNhdG9yID0gVGV4
dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoKldlYkZyYW1lOjpmcm9tQ29y
ZUZyYW1lKCpmcmFtZSksIHRyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IpOwogCiAgICAgZnJh
bWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogICAgIAogICAgIHJl
dHVybiBpbmRpY2F0b3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+
IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKGNvbnN0IFdlYkZyYW1l
JiBmcmFtZSkKKy8vIEZJWE1FOiBJZGVhbGx5IHRoZSBGcmFtZVNuYXBzaG90dGluZyBmdW5jdGlv
bnMgd291bGQgYmUgbW9yZSBmbGV4aWJsZSBhbmQgd2UKKy8vIHdvdWxkbid0IGhhdmUgdG8gaW1w
bGVtZW50IHRoaXMgaGVyZS4KK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gc25h
cHNob3RTZWxlY3Rpb25XaXRoSGlnaGxpZ2h0KEZyYW1lJiBmcmFtZSkKK3sKKyAgICBhdXRvJiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKworICAgIGlmICghc2VsZWN0aW9uLmlzUmFu
Z2UoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9u
Qm91bmRzID0gc2VsZWN0aW9uLnNlbGVjdGlvbkJvdW5kcygpOworCisgICAgLy8gSXQgaXMgcG9z
c2libGUgZm9yIHRoZSBzZWxlY3Rpb24gYm91bmRzIHRvIGJlIGVtcHR5OyBzZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NjQ1LgorICAgIGlmIChzZWxlY3Rpb25C
b3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3QgPSBzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwg
ZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25Cb3VuZHMpLCAwKTsKKworICAgIGlmICghc25hcHNo
b3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gc2hhcmVkU25hcHNob3QgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFw
c2hvdC0+aW50ZXJuYWxTaXplKCksIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Cisg
ICAgaWYgKCFzaGFyZWRTbmFwc2hvdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvIGdyYXBoaWNzQ29udGV4dCA9IHNoYXJlZFNuYXBzaG90LT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IGZyYW1lLnBhZ2UoKS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkZXZp
Y2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBncmFwaGljc0NvbnRleHQt
PmRyYXdJbWFnZUJ1ZmZlcihzbmFwc2hvdC5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxv
YXRQb2ludCgpKTsKKworICAgIHJldHVybiBzaGFyZWRTbmFwc2hvdC5yZWxlYXNlKCk7Cit9CisK
K1Bhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUoY29uc3QgV2ViRnJhbWUmIGZyYW1lLCBib29sIHRyYW5zaXRpb25Gcm9tU2Vs
ZWN0aW9uQ29sb3IpCiB7CiAgICAgRnJhbWUmIGNvcmVGcmFtZSA9ICpmcmFtZS5jb3JlRnJhbWUo
KTsKICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNvcmVGcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKSk7CkBAIC0xODAsNiArMTU2LDEwIEBAIFBh
c3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlv
bkluRnJhbWUoY29uc3QgV2ViRnJhCiAgICAgaWYgKCFpbmRpY2F0b3JCaXRtYXApCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW5kaWNhdG9y
Qml0bWFwV2l0aEhpZ2hsaWdodDsKKyAgICBpZiAodHJhbnNpdGlvbkZyb21TZWxlY3Rpb25Db2xv
cikKKyAgICAgICAgaW5kaWNhdG9yQml0bWFwV2l0aEhpZ2hsaWdodCA9IHNuYXBzaG90U2VsZWN0
aW9uV2l0aEhpZ2hsaWdodChjb3JlRnJhbWUpOworCiAgICAgLy8gU3RvcmUgdGhlIHNlbGVjdGlv
biByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcywgdG8gYmUgdXNlZCBzdWJzZXF1ZW50bHkKICAg
ICAvLyB0byBkZXRlcm1pbmUgaWYgdGhlIGluZGljYXRvciBhbmQgc2VsZWN0aW9uIHN0aWxsIHBy
ZWNpc2VseSBvdmVybGFwLgogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRp
bmF0ZXMgPSBjb3JlRnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHNlbGVjdGlvblJlY3Qp
OwpAQCAtMjEwLDYgKzE5MCw3IEBAIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoY29uc3QgV2ViRnJhCiAgICAgZGF0YS50
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1Jl
Y3RDb29yZGluYXRlczsKICAgICBkYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yID0gZnJhbWUu
cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIGRhdGEuY29udGVudEltYWdlID0gaW5k
aWNhdG9yQml0bWFwOworICAgIGRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9IGluZGlj
YXRvckJpdG1hcFdpdGhIaWdobGlnaHQ7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3Jl
YXRlKGRhdGEpOwogfQpAQCAtMjMxLDExOCArMjEyLDcgQEAgVGV4dEluZGljYXRvcjo6flRleHRJ
bmRpY2F0b3IoKQogCiBGbG9hdFJlY3QgVGV4dEluZGljYXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gb3V0c2V0SW5kaWNhdG9yUmVjdEluY2x1ZGluZ1NoYWRvdyhtX2RhdGEu
dGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMpOwotfQotCi0jaWYgRU5BQkxFKExF
R0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKLXN0YXRpYyBpbmxpbmUgQ29sb3IgbGlnaHRCb3Jk
ZXJDb2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKGxpZ2h0Qm9yZGVyUmVkLCBsaWdodEJvcmRl
ckdyZWVuLCBsaWdodEJvcmRlckJsdWUsIGxpZ2h0Qm9yZGVyQWxwaGEpOwotfQotCi1zdGF0aWMg
aW5saW5lIENvbG9yIHNoYWRvd0NvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3Ioc2hhZG93UmVk
LCBzaGFkb3dHcmVlbiwgc2hhZG93Qmx1ZSwgc2hhZG93QWxwaGEpOwotfQotCi1zdGF0aWMgaW5s
aW5lIENvbG9yIGdyYWRpZW50TGlnaHRDb2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKGdyYWRp
ZW50TGlnaHRSZWQsIGdyYWRpZW50TGlnaHRHcmVlbiwgZ3JhZGllbnRMaWdodEJsdWUsIGdyYWRp
ZW50TGlnaHRBbHBoYSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ29sb3IgZ3JhZGllbnREYXJrQ29s
b3IoKQotewotICAgIHJldHVybiBDb2xvcihncmFkaWVudERhcmtSZWQsIGdyYWRpZW50RGFya0dy
ZWVuLCBncmFkaWVudERhcmtCbHVlLCBncmFkaWVudERhcmtBbHBoYSk7Ci19Ci0KLXN0YXRpYyBQ
YXRoIHBhdGhXaXRoUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBwYXRoUmVjdCwgZmxvYXQg
cmFkaXVzKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHBhdGhS
ZWN0LCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMpKTsKLQotICAgIHJldHVybiBwYXRoOwotfQot
I2Vsc2UKLXN0YXRpYyBpbmxpbmUgQ29sb3IgZmxhdEhpZ2hsaWdodENvbG9yKCkKLXsKLSAgICBy
ZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDAsIDI1NSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ29sb3Ig
ZmxhdFJpbVNoYWRvd0NvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMzgpOwot
fQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGZsYXREcm9wU2hhZG93Q29sb3IoKQotewotICAgIHJl
dHVybiBDb2xvcigwLCAwLCAwLCA1MSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBUZXh0SW5kaWNhdG9y
OjpkcmF3Q29udGVudEltYWdlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdGV4dFJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IGltYWdl
UmVjdCA9IHRleHRSZWN0OwotICAgIGltYWdlUmVjdC5tb3ZlKG1fZGF0YS50ZXh0Qm91bmRpbmdS
ZWN0SW5XaW5kb3dDb29yZGluYXRlcy5sb2NhdGlvbigpIC0gbV9kYXRhLnNlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgIG1fZGF0YS5jb250ZW50SW1hZ2Ut
PnBhaW50KGdyYXBoaWNzQ29udGV4dCwgbV9kYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yLCBl
bmNsb3NpbmdJbnRSZWN0KHRleHRSZWN0KS5sb2NhdGlvbigpLCBlbmNsb3NpbmdJbnRSZWN0KGlt
YWdlUmVjdCkpOwotfQotCi12b2lkIFRleHRJbmRpY2F0b3I6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIC8qZGlydHlSZWN0Ki8pCi17Ci0jaWYg
RU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKLSAgICBmb3IgKGF1dG8mIHRleHRS
ZWN0IDogbV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKLSAgICAg
ICAgRmxvYXRSZWN0IGJvcmRlcmVkVGV4dFJlY3QgPSB0ZXh0UmVjdDsKLSAgICAgICAgYm9yZGVy
ZWRUZXh0UmVjdC5tb3ZlKGxlZnRCb3JkZXJUaGlja25lc3MsIHRvcEJvcmRlclRoaWNrbmVzcyk7
Ci0KLSAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdChib3JkZXJl
ZFRleHRSZWN0LCBob3Jpem9udGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyLCB2ZXJ0aWNh
bE91dHNldFRvQ2VudGVyT2ZMaWdodEJvcmRlcik7Ci0gICAgICAgIEZsb2F0UmVjdCBpbm5lclBh
dGhSZWN0ID0gaW5mbGF0ZVJlY3QoYm9yZGVyZWRUZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJ
bnNpZGVMaWdodEJvcmRlciwgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOwotCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRv
dyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRp
dXMsIHNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRGaWxsQ29sb3IobGlnaHRCb3JkZXJDb2xvcigpLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUGF0aChwYXRoV2l0aFJvdW5k
ZWRSZWN0KG91dGVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdy
YXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChwYXRoV2l0
aFJvdW5kZWRSZWN0KGlubmVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykpOwotICAgICAgICAgICAg
UmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChp
bm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC55KCkpLCBGbG9hdFBvaW50KGlubmVyUGF0
aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0Lm1heFkoKSkpOwotICAgICAgICAgICAgZ3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLCBncmFkaWVudExpZ2h0Q29sb3IoKSk7Ci0gICAgICAgICAgICBncmFk
aWVudC0+YWRkQ29sb3JTdG9wKDEsIGdyYWRpZW50RGFya0NvbG9yKCkpOwotICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFkaWVudC5yZWxlYXNlTm9uTnVsbCgp
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUmVjdChvdXRlclBhdGhSZWN0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnRyYW5zbGF0ZShGbG9hdFNpemUocm91bmRmKGxlZnRCb3JkZXJUaGlja25lc3MpLCBy
b3VuZGYodG9wQm9yZGVyVGhpY2tuZXNzKSkpOwotCi0gICAgICAgICAgICBkcmF3Q29udGVudElt
YWdlKGdyYXBoaWNzQ29udGV4dCwgdGV4dFJlY3QpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UK
LSAgICBmb3IgKGF1dG8mIHRleHRSZWN0IDogbV9kYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0
Q29vcmRpbmF0ZXMpIHsKLSAgICAgICAgRmxvYXRSZWN0IGJsdXJSZWN0ID0gdGV4dFJlY3Q7Ci0g
ICAgICAgIGJsdXJSZWN0Lm1vdmUoZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVIb3Jp
em9udGFsQm9yZGVyLCBmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRTdHlsZVZlcnRpY2FsQm9y
ZGVyKTsKLSAgICAgICAgRmxvYXRSZWN0IG91dGVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdChibHVy
UmVjdCwgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFN0eWxlVmVydGljYWxCb3JkZXIp
OwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dFNoYWRvdyhGbG9hdFNpemUoKSwgZmxhdFJpbVNoYWRvd0JsdXJSYWRpdXMsIGZsYXRSaW1TaGFk
b3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0RmlsbENvbG9yKGZsYXRIaWdobGlnaHRDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7Ci0gICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShmbGF0U2hhZG93T2Zmc2V0
WCwgZmxhdFNoYWRvd09mZnNldFkpLCBmbGF0U2hhZG93Qmx1clJhZGl1cywgZmxhdERyb3BTaGFk
b3dDb2xvcigpLCBDb2xvclNwYWNlU1JHQik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQu
ZmlsbFJlY3Qob3V0ZXJQYXRoUmVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoRmxvYXRTaXplKGZsYXRT
aGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciwgZmxhdFNoYWRvd0Js
dXJSYWRpdXMgKyBmbGF0U3R5bGVWZXJ0aWNhbEJvcmRlcikpOwotCi0gICAgICAgICAgICBkcmF3
Q29udGVudEltYWdlKGdyYXBoaWNzQ29udGV4dCwgdGV4dFJlY3QpOwotICAgICAgICB9Ci0gICAg
fQotI2VuZGlmCisgICAgcmV0dXJuIG1fZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29y
ZGluYXRlczsKIH0KIAogdm9pZCBUZXh0SW5kaWNhdG9yOjpEYXRhOjplbmNvZGUoSVBDOjpBcmd1
bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkBAIC0zNTYsNiArMjI2LDExIEBAIHZvaWQgVGV4
dEluZGljYXRvcjo6RGF0YTo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogICAgIGlmIChjb250ZW50SW1hZ2UpCiAgICAgICAgIGNvbnRlbnRJbWFnZS0+Y3JlYXRl
SGFuZGxlKGNvbnRlbnRJbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CiAgICAg
ZW5jb2RlciA8PCBjb250ZW50SW1hZ2VIYW5kbGU7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlOworICAgIGlmIChjb250ZW50SW1h
Z2VXaXRoSGlnaGxpZ2h0KQorICAgICAgICBjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0LT5jcmVh
dGVIYW5kbGUoY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZSwgU2hhcmVkTWVtb3J5OjpS
ZWFkT25seSk7CisgICAgZW5jb2RlciA8PCBjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxl
OwogfQogCiBib29sIFRleHRJbmRpY2F0b3I6OkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgVGV4dEluZGljYXRvcjo6RGF0YSYgdGV4dEluZGljYXRvckRhdGEpCkBA
IC0zNzksNiArMjU0LDEzIEBAIGJvb2wgVGV4dEluZGljYXRvcjo6RGF0YTo6ZGVjb2RlKElQQzo6
QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBUZXh0SW5kaWNhdG9yOjpECiAgICAgaWYgKCFjb250
ZW50SW1hZ2VIYW5kbGUuaXNOdWxsKCkpCiAgICAgICAgIHRleHRJbmRpY2F0b3JEYXRhLmNvbnRl
bnRJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZUhhbmRsZSwgU2hh
cmVkTWVtb3J5OjpSZWFkT25seSk7CiAKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250
ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29u
dGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZS5pc051bGwoKSkKKyAgICAg
ICAgdGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHRIYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UmVhZE9ubHkpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvVGV4dEluZGljYXRvci5oCmluZGV4IDcyYzU2ZDVhNTEyODM4YTdkOTEwM2E4YmI4OTdhN2Vm
NjAyNjdlNDguLmE5NWZjMTEwMTRlYmMwZTZhNmRjZTE2Yjc2MDhkODliOGYzZDQ0YjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuaApAQCAtMzIsNiArMzIsMTIgQEAKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFBM
QVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTAwMAor
I2RlZmluZSBFTkFCTEVfTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFIDEKKyNlbHNlCisjZGVm
aW5lIEVOQUJMRV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUgMAorI2VuZGlmCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFJhbmdlOwpAQCAt
NTMsNiArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0ZXh0Qm91
bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlczsKICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkZs
b2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKICAgICAgICAgZmxv
YXQgY29udGVudEltYWdlU2NhbGVGYWN0b3I7CisgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQ7CiAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGNvbnRlbnRJbWFnZTsKIAogICAgICAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50
RW5jb2RlciYpIGNvbnN0OwpAQCAtNjAsOCArNjcsOCBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZShjb25zdCBUZXh0SW5kaWNh
dG9yOjpEYXRhJik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRl
V2l0aFNlbGVjdGlvbkluRnJhbWUoY29uc3QgV2ViRnJhbWUmKTsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGVXaXRoUmFuZ2UoY29uc3QgV2ViQ29yZTo6UmFuZ2Um
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGVXaXRoU2VsZWN0
aW9uSW5GcmFtZShjb25zdCBXZWJGcmFtZSYsIGJvb2wgdHJhbnNpdGlvbkZyb21TZWxlY3Rpb25D
b2xvciA9IGZhbHNlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVh
dGVXaXRoUmFuZ2UoY29uc3QgV2ViQ29yZTo6UmFuZ2UmLCBib29sIHRyYW5zaXRpb25Gcm9tU2Vs
ZWN0aW9uQ29sb3IgPSBmYWxzZSk7CiAKICAgICB+VGV4dEluZGljYXRvcigpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oCmluZGV4
IDcwNTk0MGUxODkzOGE0ODZjNzI2MWQwMTQ1MTI3NWQ4MjdhN2M4YmIuLjM2MTUxY2E4MWY5NThm
OWJlNTQ3MDZlNDVmOGFhYjZkMjhiMGFmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oCkBAIC0yOCwxNCArMjgsMTMgQEAKIAog
I2lmIFBMQVRGT1JNKE1BQykKIAotI2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAj
aW1wb3J0IDxmdW5jdGlvbmFsPgogI2ltcG9ydCA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW1wb3J0
IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
UnVuTG9vcC5oPgogCi1AY2xhc3MgV0tUZXh0SW5kaWNhdG9yV2luZG93QW5pbWF0aW9uOworQGNs
YXNzIFdLVGV4dEluZGljYXRvclZpZXc7CiBAY2xhc3MgV0tWaWV3OwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKQEAgLTU2LDIxICs1NSwxMiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzdGFydEZhZGVP
dXRUaW1lckZpcmVkKCk7CiAKLSAgICB2b2lkIGZhZGVPdXRBbmltYXRpb25DYWxsYmFjayhkb3Vi
bGUpOwotICAgIHZvaWQgZmFkZU91dEFuaW1hdGlvbkRpZEVuZCgpOwotCi0gICAgdm9pZCBib3Vu
Y2VBbmltYXRpb25DYWxsYmFjayhkb3VibGUpOwotICAgIHZvaWQgYm91bmNlQW5pbWF0aW9uRGlk
RW5kKCk7Ci0KICAgICBXS1ZpZXcqIG1fd2tWaWV3OwogICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9y
PiBtX3RleHRJbmRpY2F0b3I7CiAgICAgUmV0YWluUHRyPE5TV2luZG93PiBtX3RleHRJbmRpY2F0
b3JXaW5kb3c7Ci0KLSAgICBXS1dpbmRvd0JvdW5jZUFuaW1hdGlvbkNvbnRleHRSZWYgbV9ib3Vu
Y2VBbmltYXRpb25Db250ZXh0OwotICAgIFJldGFpblB0cjxXS1RleHRJbmRpY2F0b3JXaW5kb3dB
bmltYXRpb24+IG1fYm91bmNlQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxXS1RleHRJbmRpY2F0
b3JWaWV3PiBtX3RleHRJbmRpY2F0b3JWaWV3OwogCiAgICAgUnVuTG9vcDo6VGltZXI8VGV4dElu
ZGljYXRvcldpbmRvdz4gbV9zdGFydEZhZGVPdXRUaW1lcjsKLSAgICBSZXRhaW5QdHI8V0tUZXh0
SW5kaWNhdG9yV2luZG93QW5pbWF0aW9uPiBtX2ZhZGVPdXRBbmltYXRpb247CiAKICAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IG1fYm91bmNlQW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXI7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9y
V2luZG93Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2lu
ZG93Lm1tCmluZGV4IDgyYTRiYTAwYjE2MWY0YWZhMzExNmM0MjZiMjMxM2Q4NzBlZTg2NTcuLjQz
YTAxYzFlN2FkZmQ4MzE0MDVmODY1MWI2ZjVlNTZlZWFlNThjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTMxLDc3
ICszMSwyMTcgQEAKICNpbXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIldLVmlldy5o
IgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLQotc3RhdGljIGNvbnN0IGRv
dWJsZSBib3VuY2VBbmltYXRpb25EdXJhdGlvbiA9IDAuMTI7Ci1zdGF0aWMgY29uc3QgZG91Ymxl
IHRpbWVCZWZvcmVGYWRlU3RhcnRzID0gYm91bmNlQW5pbWF0aW9uRHVyYXRpb24gKyAwLjI7Ci1z
dGF0aWMgY29uc3QgZG91YmxlIGZhZGVPdXRBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKKyNpbXBv
cnQgPFdlYkNvcmUvUXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJBY3Rpb25E
aXNhYmxpbmdDQUxheWVyRGVsZWdhdGUuaD4KKworY29uc3QgZG91YmxlIGJvdW5jZUFuaW1hdGlv
bkR1cmF0aW9uID0gMC4xMjsKK2NvbnN0IGRvdWJsZSBib3VuY2VXaXRoVHJhbnNpdGlvbkFuaW1h
dGlvbkR1cmF0aW9uID0gMC4yNTsKK2NvbnN0IGRvdWJsZSB0aW1lQmVmb3JlRmFkZVN0YXJ0cyA9
IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uICsgMC4yOworY29uc3QgZG91YmxlIGZhZGVPdXRBbmlt
YXRpb25EdXJhdGlvbiA9IDAuMzsKKworI2lmIEVOQUJMRShMRUdBQ1lfVEVYVF9JTkRJQ0FUT1Jf
U1RZTEUpCitjb25zdCBDR0Zsb2F0IG1pZEJvdW5jZVNjYWxlID0gMS41OworY29uc3QgQ0dGbG9h
dCBob3Jpem9udGFsQm9yZGVyID0gMzsKK2NvbnN0IENHRmxvYXQgdmVydGljYWxCb3JkZXIgPSAx
OworY29uc3QgQ0dGbG9hdCBib3JkZXJXaWR0aCA9IDEuMDsKK2NvbnN0IENHRmxvYXQgY29ybmVy
UmFkaXVzID0gMzsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd09mZnNldFggPSAwOworY29uc3Qg
Q0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WSA9IDE7Citjb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dC
bHVyUmFkaXVzID0gMS41OworI2Vsc2UKK2NvbnN0IENHRmxvYXQgbWlkQm91bmNlU2NhbGUgPSAx
LjI7Citjb25zdCBDR0Zsb2F0IGhvcml6b250YWxCb3JkZXIgPSAyOworY29uc3QgQ0dGbG9hdCB2
ZXJ0aWNhbEJvcmRlciA9IDE7Citjb25zdCBDR0Zsb2F0IGJvcmRlcldpZHRoID0gMDsKK2NvbnN0
IENHRmxvYXQgY29ybmVyUmFkaXVzID0gMDsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd09mZnNl
dFggPSAwOworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93T2Zmc2V0WSA9IDU7Citjb25zdCBDR0Zs
b2F0IGRyb3BTaGFkb3dCbHVyUmFkaXVzID0gMTI7Citjb25zdCBDR0Zsb2F0IHJpbVNoYWRvd0Js
dXJSYWRpdXMgPSAyOworI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW50
ZXJmYWNlIFdLVGV4dEluZGljYXRvclZpZXcgOiBOU1ZpZXcgewogICAgIFJlZlB0cjxXZWJLaXQ6
OlRleHRJbmRpY2F0b3I+IF90ZXh0SW5kaWNhdG9yOworICAgIFJldGFpblB0cjxOU0FycmF5PiBf
Ym91bmNlTGF5ZXJzOworICAgIENHU2l6ZSBfbWFyZ2luOworICAgIGJvb2wgX3RyYW5zaXRpb25G
cm9tU2VsZWN0aW9uQ29sb3I7CiB9CiAKLS0gKGlkKV9pbml0V2l0aFRleHRJbmRpY2F0b3I6KFBh
c3NSZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yOworLSAoaWQpX2lu
aXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktp
dDo6VGV4dEluZGljYXRvcj4pdGV4dEluZGljYXRvciBtYXJnaW46KENHU2l6ZSltYXJnaW47CisK
Ky0gKHZvaWQpYm91bmNlV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBs
ZXRpb25IYW5kbGVyOworLSAodm9pZClmYWRlT3V0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lk
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyOworCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBX
S1RleHRJbmRpY2F0b3JWaWV3CiAKLS0gKGlkKV9pbml0V2l0aFRleHRJbmRpY2F0b3I6KFBhc3NS
ZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yCistIChpZClfaW5pdFdp
dGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpU
ZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yIG1hcmdpbjooQ0dTaXplKW1hcmdpbgogewotICAg
IGlmICgoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOk5TWmVyb1JlY3RdKSkKKyAgICBpZiAo
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKSB7CiAgICAgICAgIF90ZXh0SW5k
aWNhdG9yID0gdGV4dEluZGljYXRvcjsKKyAgICAgICAgX21hcmdpbiA9IG1hcmdpbjsKKyAgICAg
ICAgX3RyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IgPSBfdGV4dEluZGljYXRvci0+ZGF0YSgp
LmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQ7CisKKyAgICAgICAgc2VsZi53YW50c0xheWVyID0g
WUVTOworICAgICAgICBzZWxmLmxheWVyLmFuY2hvclBvaW50ID0gQ0dQb2ludFplcm87CisKKyAg
ICAgICAgRmxvYXRTaXplIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZSA9IF90ZXh0SW5kaWNhdG9y
LT5kYXRhKCkuY29udGVudEltYWdlLT5zaXplKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2VMb2dp
Y2FsU2l6ZS5zY2FsZSgxIC8gX3RleHRJbmRpY2F0b3ItPmRhdGEoKS5jb250ZW50SW1hZ2VTY2Fs
ZUZhY3Rvcik7CisgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwor
ICAgICAgICBpZiAoX3RyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IpCisgICAgICAgICAgICBj
b250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmRhdGEoKS5jb250ZW50SW1hZ2VXaXRoSGln
aGxpZ2h0LT5tYWtlQ0dJbWFnZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb250ZW50
c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmRhdGEoKS5jb250ZW50SW1hZ2UtPm1ha2VDR0ltYWdl
KCk7CisKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3VuY2VMYXllcnMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKworICAgICAgICBSZXRhaW5Q
dHI8Q0dDb2xvclJlZj4gaGlnaGxpZ2h0Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VS
ZWQ6MSBncmVlbjoxIGJsdWU6MCBhbHBoYToxXS5DR0NvbG9yOworICAgICAgICBSZXRhaW5QdHI8
Q0dDb2xvclJlZj4gcmltU2hhZG93Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0
ZTowIGFscGhhOjAuMTVdLkNHQ29sb3I7CisgICAgICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBk
cm9wU2hhZG93Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowIGFscGhhOjAu
Ml0uQ0dDb2xvcjsKKworICAgICAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gYm9yZGVyQ29sb3Ig
PSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6Ljk2IGdyZWVuOi45MCBibHVlOjAgYWxwaGE6
MV0uQ0dDb2xvcjsKKyAgICAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGdyYWRpZW50RGFya0Nv
bG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45MjkgZ3JlZW46LjggYmx1ZTowIGFs
cGhhOjFdLkNHQ29sb3I7CisgICAgICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiBncmFkaWVudExp
Z2h0Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6Ljk0OSBncmVlbjouOTM3IGJs
dWU6MCBhbHBoYToxXS5DR0NvbG9yOworCisgICAgICAgIGZvciAoYXV0byYgdGV4dFJlY3QgOiBf
dGV4dEluZGljYXRvci0+ZGF0YSgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMp
IHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBib3VuY2VMYXllclJlY3QgPSB0ZXh0UmVjdDsKKyAg
ICAgICAgICAgIGJvdW5jZUxheWVyUmVjdC5tb3ZlKF9tYXJnaW4ud2lkdGgsIF9tYXJnaW4uaGVp
Z2h0KTsKKyAgICAgICAgICAgIGJvdW5jZUxheWVyUmVjdC5pbmZsYXRlWChob3Jpem9udGFsQm9y
ZGVyKTsKKyAgICAgICAgICAgIGJvdW5jZUxheWVyUmVjdC5pbmZsYXRlWSh2ZXJ0aWNhbEJvcmRl
cik7CisKKyAgICAgICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBib3VuY2VMYXllciA9IGFkb3B0
TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICBbYm91bmNlTGF5ZXIgc2V0
RGVsZWdhdGU6W1dlYkFjdGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKKyAg
ICAgICAgICAgIFtib3VuY2VMYXllciBzZXRGcmFtZTpib3VuY2VMYXllclJlY3RdOworICAgICAg
ICAgICAgW2JvdW5jZUxheWVycyBhZGRPYmplY3Q6Ym91bmNlTGF5ZXIuZ2V0KCldOworCisgICAg
ICAgICAgICBGbG9hdFJlY3QgeWVsbG93SGlnaGxpZ2h0UmVjdChGbG9hdFBvaW50KCksIGJvdW5j
ZUxheWVyUmVjdC5zaXplKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IElkZWFsbHkgd2Ugd291
bGRuJ3QgcmVtb3ZlIHRoZSBtYXJnaW4gaW4gdGhpcyBjYXNlLCBidXQgd2UgbmVlZCB0byB0byBl
bnN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgdGhlIHllbGxvdyBoaWdobGlnaHQgYW5kIGNvbnRl
bnRJbWFnZVdpdGhIaWdobGlnaHQgb3ZlcmxhcCBwcmVjaXNlbHkuCisgICAgICAgICAgICBpZiAo
X3RyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IpIHsKKyAgICAgICAgICAgICAgICB5ZWxsb3dI
aWdobGlnaHRSZWN0LmluZmxhdGVYKC1ob3Jpem9udGFsQm9yZGVyKTsKKyAgICAgICAgICAgICAg
ICB5ZWxsb3dIaWdobGlnaHRSZWN0LmluZmxhdGVZKC12ZXJ0aWNhbEJvcmRlcik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBkcm9wU2hhZG93TGF5ZXIg
PSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOworICAgICAgICAgICAgW2Ryb3BTaGFk
b3dMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNo
YXJlZF1dOworICAgICAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFkb3dDb2xvcjpkcm9w
U2hhZG93Q29sb3IuZ2V0KCldOworICAgICAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRTaGFk
b3dSYWRpdXM6ZHJvcFNoYWRvd0JsdXJSYWRpdXNdOworICAgICAgICAgICAgW2Ryb3BTaGFkb3dM
YXllciBzZXRTaGFkb3dPZmZzZXQ6Q0dTaXplTWFrZShkcm9wU2hhZG93T2Zmc2V0WCwgZHJvcFNo
YWRvd09mZnNldFkpXTsKKyAgICAgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0
aElzQm91bmRzOllFU107CisgICAgICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd09w
YWNpdHk6MV07CisgICAgICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldEZyYW1lOnllbGxvd0hp
Z2hsaWdodFJlY3RdOworICAgICAgICAgICAgW2Ryb3BTaGFkb3dMYXllciBzZXRDb3JuZXJSYWRp
dXM6Y29ybmVyUmFkaXVzXTsKKyAgICAgICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpk
cm9wU2hhZG93TGF5ZXIuZ2V0KCldOworICAgICAgICAgICAgW2JvdW5jZUxheWVyIHNldFZhbHVl
OmRyb3BTaGFkb3dMYXllci5nZXQoKSBmb3JLZXk6QCJkcm9wU2hhZG93TGF5ZXIiXTsKKworI2lm
ICFFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQorICAgICAgICAgICAgUmV0YWlu
UHRyPENBTGF5ZXI+IHJpbVNoYWRvd0xheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICAgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9u
RGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICAgICAgW3JpbVNoYWRv
d0xheWVyIHNldEZyYW1lOnllbGxvd0hpZ2hsaWdodFJlY3RdOworICAgICAgICAgICAgW3JpbVNo
YWRvd0xheWVyIHNldFNoYWRvd0NvbG9yOnJpbVNoYWRvd0NvbG9yLmdldCgpXTsKKyAgICAgICAg
ICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dSYWRpdXM6cmltU2hhZG93Qmx1clJhZGl1c107
CisgICAgICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93UGF0aElzQm91bmRzOllFU107
CisgICAgICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0U2hhZG93T2Zmc2V0OkNHU2l6ZVplcm9d
OworICAgICAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd09wYWNpdHk6MV07CisgICAg
ICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93SGlnaGxpZ2h0UmVjdF07Cisg
ICAgICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1c107
CisgICAgICAgICAgICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6cmltU2hhZG93TGF5ZXIuZ2V0
KCldOworICAgICAgICAgICAgW2JvdW5jZUxheWVyIHNldFZhbHVlOnJpbVNoYWRvd0xheWVyLmdl
dCgpIGZvcktleTpAInJpbVNoYWRvd0xheWVyIl07CisjZW5kaWYKKworI2lmIEVOQUJMRShMRUdB
Q1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUpCisgICAgICAgICAgICBSZXRhaW5QdHI8Q0FHcmFkaWVu
dExheWVyPiB0ZXh0TGF5ZXIgPSBhZG9wdE5TKFtbQ0FHcmFkaWVudExheWVyIGFsbG9jXSBpbml0
XSk7CisgICAgICAgICAgICBbdGV4dExheWVyIHNldENvbG9yczpAWyAoaWQpZ3JhZGllbnRMaWdo
dENvbG9yLmdldCgpLCAoaWQpZ3JhZGllbnREYXJrQ29sb3IuZ2V0KCkgXV07CisjZWxzZQorICAg
ICAgICAgICAgUmV0YWluUHRyPENBTGF5ZXI+IHRleHRMYXllciA9IGFkb3B0TlMoW1tDQUxheWVy
IGFsbG9jXSBpbml0XSk7CisjZW5kaWYKKyAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0QmFja2dy
b3VuZENvbG9yOmhpZ2hsaWdodENvbG9yLmdldCgpXTsKKyAgICAgICAgICAgIFt0ZXh0TGF5ZXIg
c2V0Qm9yZGVyQ29sb3I6Ym9yZGVyQ29sb3IuZ2V0KCldOworICAgICAgICAgICAgW3RleHRMYXll
ciBzZXRCb3JkZXJXaWR0aDpib3JkZXJXaWR0aF07CisgICAgICAgICAgICBbdGV4dExheWVyIHNl
dERlbGVnYXRlOltXZWJBY3Rpb25EaXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07Cisg
ICAgICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRzOihpZCljb250ZW50c0ltYWdlLmdldCgp
XTsKKworICAgICAgICAgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHRleHRSZWN0OworICAgICAg
ICAgICAgaW1hZ2VSZWN0Lm1vdmUoX3RleHRJbmRpY2F0b3ItPmRhdGEoKS50ZXh0Qm91bmRpbmdS
ZWN0SW5XaW5kb3dDb29yZGluYXRlcy5sb2NhdGlvbigpIC0gX3RleHRJbmRpY2F0b3ItPmRhdGEo
KS5zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKKyAgICAgICAg
ICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNSZWN0OkNHUmVjdE1ha2UoaW1hZ2VSZWN0LngoKSAv
IGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QueSgpIC8gY29udGVu
dHNJbWFnZUxvZ2ljYWxTaXplLmhlaWdodCgpLCBpbWFnZVJlY3Qud2lkdGgoKSAvIGNvbnRlbnRz
SW1hZ2VMb2dpY2FsU2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkgLyBjb250ZW50c0lt
YWdlTG9naWNhbFNpemUuaGVpZ2h0KCkpXTsKKyAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29u
dGVudHNHcmF2aXR5OmtDQUdyYXZpdHlDZW50ZXJdOworICAgICAgICAgICAgW3RleHRMYXllciBz
ZXRDb250ZW50c1NjYWxlOl90ZXh0SW5kaWNhdG9yLT5kYXRhKCkuY29udGVudEltYWdlU2NhbGVG
YWN0b3JdOworICAgICAgICAgICAgW3RleHRMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRS
ZWN0XTsKKyAgICAgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29ybmVyUmFkaXVzOmNvcm5lclJhZGl1
c107CisgICAgICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6dGV4dExheWVyLmdldCgpIGZv
cktleTpAInRleHRMYXllciJdOworICAgICAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVy
OnRleHRMYXllci5nZXQoKV07CisgICAgICAgIH0KKworICAgICAgICBzZWxmLmxheWVyLnN1Ymxh
eWVycyA9IGJvdW5jZUxheWVycy5nZXQoKTsKKyAgICAgICAgX2JvdW5jZUxheWVycyA9IGJvdW5j
ZUxheWVyczsKKyAgICB9CiAKICAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAodm9pZClkcmF3UmVj
dDooTlNSZWN0KXJlY3QKKy0gKHZvaWQpYm91bmNlV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lk
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dChzdGF0aWNfY2FzdDxDR0NvbnRleHRSZWY+KFtbTlNHcmFwaGljc0NvbnRleHQg
Y3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pKTsKLQotICAgIF90ZXh0SW5kaWNhdG9yLT5k
cmF3KGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChyZWN0KSk7Ci19Ci0KLS0gKEJP
T0wpaXNGbGlwcGVkCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotQGVuZAotCi1AaW50ZXJmYWNl
IFdLVGV4dEluZGljYXRvcldpbmRvd0FuaW1hdGlvbiA6IE5TQW5pbWF0aW9uPE5TQW5pbWF0aW9u
RGVsZWdhdGU+IHsKLSAgICBXZWJLaXQ6OlRleHRJbmRpY2F0b3JXaW5kb3cqIF90ZXh0SW5kaWNh
dG9yV2luZG93OwotICAgIHZvaWQgKFdlYktpdDo6VGV4dEluZGljYXRvcldpbmRvdzo6Kl9hbmlt
YXRpb25Qcm9ncmVzc0NhbGxiYWNrKShkb3VibGUgcHJvZ3Jlc3MpOwotICAgIHZvaWQgKFdlYktp
dDo6VGV4dEluZGljYXRvcldpbmRvdzo6Kl9hbmltYXRpb25EaWRFbmRDYWxsYmFjaykoKTsKLX0K
LQotLSAoaWQpX2luaXRXaXRoVGV4dEluZGljYXRvcldpbmRvdzooV2ViS2l0OjpUZXh0SW5kaWNh
dG9yV2luZG93ICopdGV4dEluZGljYXRvcldpbmRvdyBhbmltYXRpb25EdXJhdGlvbjooQ0ZUaW1l
SW50ZXJ2YWwpZHVyYXRpb24gYW5pbWF0aW9uUHJvZ3Jlc3NDYWxsYmFjazoodm9pZCAoV2ViS2l0
OjpUZXh0SW5kaWNhdG9yV2luZG93OjoqKShkb3VibGUgcHJvZ3Jlc3MpKWFuaW1hdGlvblByb2dy
ZXNzQ2FsbGJhY2sgYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2s6KHZvaWQgKFdlYktpdDo6VGV4dElu
ZGljYXRvcldpbmRvdzo6KikoKSlhbmltYXRpb25EaWRFbmRDYWxsYmFjazsKLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFdLVGV4dEluZGljYXRvcldpbmRvd0FuaW1hdGlvbgorICAgIGRvdWJsZSBh
bmltYXRpb25EdXJhdGlvbiA9IF90cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yID8gYm91bmNl
V2l0aFRyYW5zaXRpb25BbmltYXRpb25EdXJhdGlvbiA6IGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9u
OworICAgIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBib3VuY2VBbmltYXRpb24gPSBb
Q0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAInRyYW5zZm9ybSJdOwor
ICAgIFtib3VuY2VBbmltYXRpb24gc2V0VmFsdWVzOkBbCisgICAgICAgIFtOU1ZhbHVlIHZhbHVl
V2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxLCAxLCAxKV0sCisgICAg
ICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRE1ha2VTY2Fs
ZShtaWRCb3VuY2VTY2FsZSwgbWlkQm91bmNlU2NhbGUsIDEpXSwKKyAgICAgICAgW05TVmFsdWUg
dmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKDEsIDEsIDEpXQor
ICAgICAgICBdXTsKKyAgICBbYm91bmNlQW5pbWF0aW9uIHNldER1cmF0aW9uOmFuaW1hdGlvbkR1
cmF0aW9uXTsKKworICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiB0cmFuc2l0aW9uQW5p
bWF0aW9uOworICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBmYWRlU2hhZG93SW5Bbmlt
YXRpb247CisgICAgaWYgKF90cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yKSB7CisgICAgICAg
IHRyYW5zaXRpb25BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5
UGF0aDpAImNvbnRlbnRzIl07CisgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50
c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmRhdGEoKS5jb250ZW50SW1hZ2UtPm1ha2VDR0ltYWdl
KCk7CisgICAgICAgIFt0cmFuc2l0aW9uQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRz
SW1hZ2UuZ2V0KCldOworICAgICAgICBbdHJhbnNpdGlvbkFuaW1hdGlvbiBzZXRGaWxsTW9kZTpr
Q0FGaWxsTW9kZUZvcndhcmRzXTsKKyAgICAgICAgW3RyYW5zaXRpb25BbmltYXRpb24gc2V0UmVt
b3ZlZE9uQ29tcGxldGlvbjpOT107CisgICAgICAgIFt0cmFuc2l0aW9uQW5pbWF0aW9uIHNldER1
cmF0aW9uOmFuaW1hdGlvbkR1cmF0aW9uXTsKKworICAgICAgICBmYWRlU2hhZG93SW5BbmltYXRp
b24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAInNoYWRvd09wYWNp
dHkiXTsKKyAgICAgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6QDBdOwor
ICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFRvVmFsdWU6QDFdOworICAgICAgICBb
ZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOwor
ICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9d
OworICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldER1cmF0aW9uOmFuaW1hdGlvbkR1
cmF0aW9uXTsKKyAgICB9CiAKLS0gKGlkKV9pbml0V2l0aFRleHRJbmRpY2F0b3JXaW5kb3c6KFdl
YktpdDo6VGV4dEluZGljYXRvcldpbmRvdyAqKXRleHRJbmRpY2F0b3JXaW5kb3cgYW5pbWF0aW9u
RHVyYXRpb246KENGVGltZUludGVydmFsKWFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlvblByb2dy
ZXNzQ2FsbGJhY2s6KHZvaWQgKFdlYktpdDo6VGV4dEluZGljYXRvcldpbmRvdzo6KikoZG91Ymxl
IHByb2dyZXNzKSlhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrIGFuaW1hdGlvbkRpZEVuZENhbGxi
YWNrOih2b2lkIChXZWJLaXQ6OlRleHRJbmRpY2F0b3JXaW5kb3c6OiopKCkpYW5pbWF0aW9uRGlk
RW5kQ2FsbGJhY2sKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhEdXJhdGlvbjph
bmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF0pKSB7
Ci0gICAgICAgIF90ZXh0SW5kaWNhdG9yV2luZG93ID0gdGV4dEluZGljYXRvcldpbmRvdzsKLSAg
ICAgICAgX2FuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2sgPSBhbmltYXRpb25Qcm9ncmVzc0NhbGxi
YWNrOwotICAgICAgICBfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2sgPSBhbmltYXRpb25EaWRFbmRD
YWxsYmFjazsKLSAgICAgICAgW3NlbGYgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtzZWxm
IHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICBb
Q0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0Q29tcGxldGlvbkJs
b2NrOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBmb3IgKENBTGF5ZXIqIGJvdW5jZUxheWVyIGlu
IF9ib3VuY2VMYXllcnMuZ2V0KCkpIHsKKyAgICAgICAgW2JvdW5jZUxheWVyIGFkZEFuaW1hdGlv
bjpib3VuY2VBbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiYm91bmNlIl07CisgICAgICAgIGlmIChf
dHJhbnNpdGlvbkZyb21TZWxlY3Rpb25Db2xvcikgeworICAgICAgICAgICAgW1tib3VuY2VMYXll
ciB2YWx1ZUZvcktleTpAInRleHRMYXllciJdIGFkZEFuaW1hdGlvbjp0cmFuc2l0aW9uQW5pbWF0
aW9uLmdldCgpIGZvcktleTpAImNvbnRlbnRUcmFuc2l0aW9uIl07CisgICAgICAgICAgICBbW2Jv
dW5jZUxheWVyIHZhbHVlRm9yS2V5OkAiZHJvcFNoYWRvd0xheWVyIl0gYWRkQW5pbWF0aW9uOmZh
ZGVTaGFkb3dJbkFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRlU2hhZG93SW4iXTsKKyAgICAg
ICAgICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6QCJyaW1TaGFkb3dMYXllciJdIGFkZEFu
aW1hdGlvbjpmYWRlU2hhZG93SW5BbmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZVNoYWRvd0lu
Il07CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHNlbGY7CisgICAgW0NBVHJhbnNhY3Rp
b24gY29tbWl0XTsKIH0KIAotLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9u
UHJvZ3Jlc3MpcHJvZ3Jlc3MKKy0gKHZvaWQpZmFkZU91dFdpdGhDb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIChfdGV4dEluZGljYXRvcldp
bmRvdy0+Kl9hbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrKShwcm9ncmVzcyk7CisgICAgUmV0YWlu
UHRyPENBQmFzaWNBbmltYXRpb24+IGZhZGVBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBh
bmltYXRpb25XaXRoS2V5UGF0aDpAIm9wYWNpdHkiXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRG
cm9tVmFsdWU6QDFdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6QDBdOworICAgIFtm
YWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFtmYWRl
QW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOworICAgIFtmYWRlQW5pbWF0aW9u
IHNldER1cmF0aW9uOmZhZGVPdXRBbmltYXRpb25EdXJhdGlvbl07CisKKyAgICBbQ0FUcmFuc2Fj
dGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0Q29tcGxldGlvbkJsb2NrOmNvbXBs
ZXRpb25IYW5kbGVyXTsKKyAgICBbc2VsZi5sYXllciBhZGRBbmltYXRpb246ZmFkZUFuaW1hdGlv
bi5nZXQoKSBmb3JLZXk6QCJmYWRlT3V0Il07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsK
IH0KIAotLSAodm9pZClhbmltYXRpb25EaWRFbmQ6KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uCist
IChCT09MKWlzRmxpcHBlZAogewotICAgIEFTU0VSVChhbmltYXRpb24gPT0gc2VsZik7Ci0KLSAg
ICAoX3RleHRJbmRpY2F0b3JXaW5kb3ctPipfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2spKCk7Cisg
ICAgcmV0dXJuIFlFUzsKIH0KIAogQGVuZApAQCAtMTEwLDcgKzI1MCw2IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBUZXh0SW5kaWNhdG9yV2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KFdLVmll
dyAqd2tWaWV3KQogICAgIDogbV93a1ZpZXcod2tWaWV3KQotICAgICwgbV9ib3VuY2VBbmltYXRp
b25Db250ZXh0KDApCiAgICAgLCBtX3N0YXJ0RmFkZU91dFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwg
dGhpcywgJlRleHRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQpCiB7CiB9
CkBAIC0xMzQsMTEgKzI3MywxMyBAQCB2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnNldFRleHRJ
bmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdAogICAgICAgICBy
ZXR1cm47CiAKICAgICBOU1JlY3QgY29udGVudFJlY3QgPSBtX3RleHRJbmRpY2F0b3ItPmZyYW1l
UmVjdCgpOworCisgICAgQ0dGbG9hdCBob3Jpem9udGFsTWFyZ2luID0gc3RkOjptYXgoZHJvcFNo
YWRvd0JsdXJSYWRpdXMgKiAyICsgaG9yaXpvbnRhbEJvcmRlciwgY29udGVudFJlY3Quc2l6ZS53
aWR0aCAqIDIpOworICAgIENHRmxvYXQgdmVydGljYWxNYXJnaW4gPSBzdGQ6Om1heChkcm9wU2hh
ZG93Qmx1clJhZGl1cyAqIDIgKyB2ZXJ0aWNhbEJvcmRlciwgY29udGVudFJlY3Quc2l6ZS5oZWln
aHQgKiAyKTsKKworICAgIGNvbnRlbnRSZWN0ID0gTlNJbnNldFJlY3QoY29udGVudFJlY3QsIC1o
b3Jpem9udGFsTWFyZ2luLCAtdmVydGljYWxNYXJnaW4pOwogICAgIE5TUmVjdCB3aW5kb3dGcmFt
ZVJlY3QgPSBOU0ludGVncmFsUmVjdChbbV93a1ZpZXcgY29udmVydFJlY3Q6Y29udGVudFJlY3Qg
dG9WaWV3Om5pbF0pOwotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgIHdp
bmRvd0ZyYW1lUmVjdC5vcmlnaW4gPSBbW21fd2tWaWV3IHdpbmRvd10gY29udmVydEJhc2VUb1Nj
cmVlbjp3aW5kb3dGcmFtZVJlY3Qub3JpZ2luXTsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKKyAgICB3aW5kb3dGcmFtZVJlY3QgPSBbW21fd2tWaWV3IHdpbmRvd10gY29udmVydFJlY3RU
b1NjcmVlbjp3aW5kb3dGcmFtZVJlY3RdOwogICAgIE5TUmVjdCB3aW5kb3dDb250ZW50UmVjdCA9
IFtOU1dpbmRvdyBjb250ZW50UmVjdEZvckZyYW1lUmVjdDp3aW5kb3dGcmFtZVJlY3Qgc3R5bGVN
YXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2tdOwogICAgIAogICAgIG1fdGV4dEluZGljYXRvcldp
bmRvdyA9IGFkb3B0TlMoW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5k
b3dDb250ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5T
QmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dKTsKQEAgLTE0NywxOSArMjg4LDE2IEBAIHZv
aWQgVGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRleHRJ
bmRpY2F0b3I+IHRleHRJbmRpY2F0CiAgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRPcGFx
dWU6Tk9dOwogICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0SWdub3Jlc01vdXNlRXZlbnRz
OllFU107CiAKLSAgICBSZXRhaW5QdHI8V0tUZXh0SW5kaWNhdG9yVmlldz4gdGV4dEluZGljYXRv
clZpZXcgPSBhZG9wdE5TKFtbV0tUZXh0SW5kaWNhdG9yVmlldyBhbGxvY10gX2luaXRXaXRoVGV4
dEluZGljYXRvcjptX3RleHRJbmRpY2F0b3JdKTsKLSAgICBbbV90ZXh0SW5kaWNhdG9yV2luZG93
IHNldENvbnRlbnRWaWV3OnRleHRJbmRpY2F0b3JWaWV3LmdldCgpXTsKKyAgICBtX3RleHRJbmRp
Y2F0b3JWaWV3ID0gYWRvcHROUyhbW1dLVGV4dEluZGljYXRvclZpZXcgYWxsb2NdIF9pbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgW21fdGV4dEluZGljYXRvcldpbmRvdyBmcmFtZV0uc2l6
ZS53aWR0aCwgW21fdGV4dEluZGljYXRvcldpbmRvdyBmcmFtZV0uc2l6ZS5oZWlnaHQpIHRleHRJ
bmRpY2F0b3I6bV90ZXh0SW5kaWNhdG9yIG1hcmdpbjpDR1NpemVNYWtlKGhvcml6b250YWxNYXJn
aW4sIHZlcnRpY2FsTWFyZ2luKV0pOworICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0Q29u
dGVudFZpZXc6bV90ZXh0SW5kaWNhdG9yVmlldy5nZXQoKV07CiAKICAgICBbW21fd2tWaWV3IHdp
bmRvd10gYWRkQ2hpbGRXaW5kb3c6bV90ZXh0SW5kaWNhdG9yV2luZG93LmdldCgpIG9yZGVyZWQ6
TlNXaW5kb3dBYm92ZV07CiAgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRSZWxlYXNlZFdo
ZW5DbG9zZWQ6Tk9dOwogCiAgICAgaWYgKGFuaW1hdGUpIHsKLSAgICAgICAgbV9ib3VuY2VBbmlt
YXRpb25Db21wbGV0aW9uSGFuZGxlciA9IFdURjo6bW92ZShhbmltYXRpb25Db21wbGV0aW9uSGFu
ZGxlcik7Ci0gICAgICAgIC8vIFN0YXJ0IHRoZSBib3VuY2UgYW5pbWF0aW9uLgotICAgICAgICBt
X2JvdW5jZUFuaW1hdGlvbkNvbnRleHQgPSBXS1dpbmRvd0JvdW5jZUFuaW1hdGlvbkNvbnRleHRD
cmVhdGUobV90ZXh0SW5kaWNhdG9yV2luZG93LmdldCgpKTsKLSAgICAgICAgbV9ib3VuY2VBbmlt
YXRpb24gPSBhZG9wdE5TKFtbV0tUZXh0SW5kaWNhdG9yV2luZG93QW5pbWF0aW9uIGFsbG9jXSBf
aW5pdFdpdGhUZXh0SW5kaWNhdG9yV2luZG93OnRoaXMgYW5pbWF0aW9uRHVyYXRpb246Ym91bmNl
QW5pbWF0aW9uRHVyYXRpb24KLSAgICAgICAgICAgIGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6
JlRleHRJbmRpY2F0b3JXaW5kb3c6OmJvdW5jZUFuaW1hdGlvbkNhbGxiYWNrIGFuaW1hdGlvbkRp
ZEVuZENhbGxiYWNrOiZUZXh0SW5kaWNhdG9yV2luZG93Ojpib3VuY2VBbmltYXRpb25EaWRFbmRd
KTsKLSAgICAgICAgW21fYm91bmNlQW5pbWF0aW9uIHN0YXJ0QW5pbWF0aW9uXTsKKyAgICAgICAg
W21fdGV4dEluZGljYXRvclZpZXcgYm91bmNlV2l0aENvbXBsZXRpb25IYW5kbGVyOlthbmltYXRp
b25Db21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAgYW5pbWF0aW9uQ29tcGxldGlvbkhh
bmRsZXIoKTsKKyAgICAgICAgfV07CiAgICAgfQogCiAgICAgaWYgKGZhZGVPdXQpCkBAIC0xNzMs
MTkgKzMxMSw2IEBAIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3coKQogCiAg
ICAgbV9zdGFydEZhZGVPdXRUaW1lci5zdG9wKCk7CiAKLSAgICBpZiAobV9mYWRlT3V0QW5pbWF0
aW9uKSB7Ci0gICAgICAgIFttX2ZhZGVPdXRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07Ci0gICAg
ICAgIG1fZmFkZU91dEFuaW1hdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fYm91
bmNlQW5pbWF0aW9uKSB7Ci0gICAgICAgIFttX2JvdW5jZUFuaW1hdGlvbiBzdG9wQW5pbWF0aW9u
XTsKLSAgICAgICAgbV9ib3VuY2VBbmltYXRpb24gPSBudWxscHRyOwotICAgIH0KLQotICAgIGlm
IChtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQpCi0gICAgICAgIFdLV2luZG93Qm91bmNlQW5pbWF0
aW9uQ29udGV4dERlc3Ryb3kobV9ib3VuY2VBbmltYXRpb25Db250ZXh0KTsKLSAgICAKICAgICBb
W21fdGV4dEluZGljYXRvcldpbmRvdyBwYXJlbnRXaW5kb3ddIHJlbW92ZUNoaWxkV2luZG93Om1f
dGV4dEluZGljYXRvcldpbmRvdy5nZXQoKV07CiAgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBj
bG9zZV07CiAgICAgbV90ZXh0SW5kaWNhdG9yV2luZG93ID0gbnVsbHB0cjsKQEAgLTE5Myw0NSAr
MzE4LDExIEBAIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3coKQogCiB2b2lk
IFRleHRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKQogewotICAgIEFT
U0VSVCghbV9mYWRlT3V0QW5pbWF0aW9uKTsKLSAgICAKLSAgICBtX2ZhZGVPdXRBbmltYXRpb24g
PSBhZG9wdE5TKFtbV0tUZXh0SW5kaWNhdG9yV2luZG93QW5pbWF0aW9uIGFsbG9jXSBfaW5pdFdp
dGhUZXh0SW5kaWNhdG9yV2luZG93OnRoaXMgYW5pbWF0aW9uRHVyYXRpb246ZmFkZU91dEFuaW1h
dGlvbkR1cmF0aW9uCi0gICAgICAgIGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6JlRleHRJbmRp
Y2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRpb25DYWxsYmFjayBhbmltYXRpb25EaWRFbmRDYWxs
YmFjazomVGV4dEluZGljYXRvcldpbmRvdzo6ZmFkZU91dEFuaW1hdGlvbkRpZEVuZF0pOwotICAg
IFttX2ZhZGVPdXRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dOwotfQotCi12b2lkIFRleHRJbmRp
Y2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRpb25DYWxsYmFjayhkb3VibGUgcHJvZ3Jlc3MpCi17
Ci0gICAgQVNTRVJUKG1fZmFkZU91dEFuaW1hdGlvbik7Ci0KLSAgICBbbV90ZXh0SW5kaWNhdG9y
V2luZG93IHNldEFscGhhVmFsdWU6MS4wIC0gcHJvZ3Jlc3NdOwotfQotCi12b2lkIFRleHRJbmRp
Y2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRpb25EaWRFbmQoKQotewotICAgIEFTU0VSVChtX2Zh
ZGVPdXRBbmltYXRpb24pOwotICAgIEFTU0VSVChtX3RleHRJbmRpY2F0b3JXaW5kb3cpOwotCi0g
ICAgY2xvc2VXaW5kb3coKTsKLX0KLQotdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93Ojpib3VuY2VB
bmltYXRpb25DYWxsYmFjayhkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKG1fYm91bmNl
QW5pbWF0aW9uKTsKLSAgICBBU1NFUlQobV9ib3VuY2VBbmltYXRpb25Db250ZXh0KTsKLQotICAg
IFdLV2luZG93Qm91bmNlQW5pbWF0aW9uU2V0QW5pbWF0aW9uUHJvZ3Jlc3MobV9ib3VuY2VBbmlt
YXRpb25Db250ZXh0LCBwcm9ncmVzcyk7Ci19Ci0KLXZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6
Ym91bmNlQW5pbWF0aW9uRGlkRW5kKCkKLXsKLSAgICBBU1NFUlQobV9ib3VuY2VBbmltYXRpb24p
OwotICAgIEFTU0VSVChtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQpOwotICAgIEFTU0VSVChtX3Rl
eHRJbmRpY2F0b3JXaW5kb3cpOwotCi0gICAgV0tXaW5kb3dCb3VuY2VBbmltYXRpb25Db250ZXh0
RGVzdHJveShtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQpOwotICAgIG1fYm91bmNlQW5pbWF0aW9u
Q29udGV4dCA9IDA7Ci0gICAgbV9ib3VuY2VBbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcigpOwor
ICAgIFJldGFpblB0cjxOU1dpbmRvdz4gaW5kaWNhdG9yV2luZG93ID0gbV90ZXh0SW5kaWNhdG9y
V2luZG93OworICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IGZhZGVPdXRXaXRoQ29tcGxldGlvbkhh
bmRsZXI6W2luZGljYXRvcldpbmRvd10geworICAgICAgICBbW2luZGljYXRvcldpbmRvdyBwYXJl
bnRXaW5kb3ddIHJlbW92ZUNoaWxkV2luZG93OmluZGljYXRvcldpbmRvdy5nZXQoKV07CisgICAg
ICAgIFtpbmRpY2F0b3JXaW5kb3cgY2xvc2VdOworICAgIH1dOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmlu
ZGV4IDU4NzFmZDYyMDQwZGZkMzVmNGRlZDg3MjAxMThjZWY5MjIyNDI1NzcuLjUwNjVmMjdmNjM4
YjAwODExY2QxNTViZmVhMzYzNWJmZjk5ZmZhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjY0LDcgKzY2NCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNwZWFrKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc3RvcFNwZWFraW5nKCk7CiAKLSAg
ICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYpOworICAgIHZvaWQgcGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCB0cmFuc2l0aW9uRnJvbVNlbGVjdGlvbkNvbG9yID0g
ZmFsc2UpOwogI2VuZGlmCiAKICAgICBib29sIGlzU21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7
CkBAIC05NzgsNyArOTc4LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2
b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50Jik7CiAgICAgdm9pZCBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cE9mQ3VycmVudFNlbGVj
dGlvbigpOwotICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShXZWJDb3Jl
OjpGcmFtZSosIFdlYkNvcmU6OlJhbmdlJiwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zKTsKKyAgICB2
b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoV2ViQ29yZTo6RnJhbWUqLCBXZWJD
b3JlOjpSYW5nZSYsIE5TRGljdGlvbmFyeSAqb3B0aW9ucywgYm9vbCB0cmFuc2l0aW9uRnJvbVNl
bGVjdGlvbkNvbG9yID0gZmFsc2UpOwogCiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGlu
YXRlcywgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2Ny
ZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlld0ZyYW1lSW5XaW5k
b3dDb29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjZXNzaWJpbGl0eVZp
ZXdDb29yZGluYXRlcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA1OTc4NWMzZjRhM2FjMjNjY2M1ZjYwMWVjNjQw
NTIzMWU3MmVmMDQxLi41YTczMmMyMWFlNWNjMTI5YjhiZTM1NDJhMzU3MWQ1ODllNmFmMTBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCkBAIC00OTcsMjEgKzQ5NywyMSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQogICAgIHBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpyYW5nZSwgb3B0aW9ucyk7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJh
bWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCit2b2lkIFdlYlBh
Z2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIHRyYW5zaXRpb25Gcm9tU2VsZWN0
aW9uQ29sb3IpCiB7CiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHJhbmdlRm9yRGljdGlvbmFyeUxvb2t1cEZvclNlbGVj
dGlvbihzZWxlY3Rpb24sICZvcHRpb25zKTsKICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKLSAgICAg
ICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVjdGVkUmFuZ2Us
IG9wdGlvbnMpOworICAgICAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1l
LCAqc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucywgdHJhbnNpdGlvbkZyb21TZWxlY3Rpb25Db2xvcik7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxl
Y3Rpb24oKQogewogICAgIEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2Vs
ZWN0aW9uKGZyYW1lLCBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIHBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKGZyYW1lLCBmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCksIHRydWUpOwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yUmFuZ2UoRnJhbWUqIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAq
b3B0aW9ucykKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShG
cmFtZSogZnJhbWUsIFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBib29sIHRy
YW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IpCiB7CiAgICAgaWYgKHJhbmdlLnRleHQoKS5zdHJp
cFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU0OCw3ICs1NDgs
NyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJhbWUq
IGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdAogICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVk
U3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07
CiAgICAgfV07CiAKLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciA9IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSk7CisgICAgUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFu
Z2UsIHRyYW5zaXRpb25Gcm9tU2VsZWN0aW9uQ29sb3IpOwogICAgIGlmICghdGV4dEluZGljYXRv
cikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDM2LDcgKzEwMzYsNyBAQCB2b2lkIFdlYlBhZ2U6
OnBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBs
b2NhdGlvbkluVgogICAgICAgICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gudW5pdGUoZnJh
bWVWaWV3LT5jb250ZW50c1RvV2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSkpOwog
CiAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5kZXRlY3RlZERh
dGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWluUmVz
dWx0UmFuZ2UpOworICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRp
Y2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKm1haW5SZXN1bHRSYW5nZSwg
dHJ1ZSk7CiAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhT3JpZ2luYXRpbmdQ
YWdlT3ZlcmxheSA9IG92ZXJsYXktPnBhZ2VPdmVybGF5SUQoKTsKICAgICAgICAgbV9sYXN0QWN0
aW9uTWVudVJhbmdlRm9yU2VsZWN0aW9uID0gbWFpblJlc3VsdFJhbmdlOwogCkBAIC0xMDUwLDcg
KzEwNTAsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRp
b24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGlvbkluVgogICAgICAgICBhY3Rpb25NZW51UmVz
dWx0LmFjdGlvbkNvbnRleHQgPSBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVz
dFJlc3VsdChoaXRUZXN0UmVzdWx0LCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWRE
YXRhUmFuZ2UpOwogICAgICAgICBpZiAoYWN0aW9uTWVudVJlc3VsdC5hY3Rpb25Db250ZXh0ICYm
IGRldGVjdGVkRGF0YVJhbmdlKSB7CiAgICAgICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVj
dGVkRGF0YUJvdW5kaW5nQm94ID0gZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7Ci0gICAgICAgICAg
ICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmRldGVjdGVkRGF0YVJhbmdlKTsKKyAgICAgICAgICAgIGFj
dGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6
OmNyZWF0ZVdpdGhSYW5nZSgqZGV0ZWN0ZWREYXRhUmFuZ2UsIHRydWUpOwogICAgICAgICAgICAg
bV9sYXN0QWN0aW9uTWVudVJhbmdlRm9yU2VsZWN0aW9uID0gZGV0ZWN0ZWREYXRhUmFuZ2U7CiAg
ICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241896</attachid>
            <date>2014-11-19 15:30:29 -0800</date>
            <delta_ts>2014-11-19 16:09:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138856-20141119153042.patch</filename>
            <type>text/plain</type>
            <size>63281</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODZkMGFiYzlhYzAwNjE3
MWYxMTk1OTk4ZDU3YzU3Y2QyNGJhZTY2Ny4uNDRjN2JkYTMxYTZjMDg0ZjVjOWI0MjYxYjAyZTIz
ZDc4NTk4MTM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE0LTExLTE5ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBvcHRp
b25hbCBlbnRyeSB0cmFuc2l0aW9uIChmcm9tIHNlbGVjdGlvbiBoaWdobGlnaHQpIHRvIFRleHRJ
bmRpY2F0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzODg1NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg4NDAxMjg+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAg
ICAgICAgQWRkIGFuIGV4cG9ydC4KKwogMjAxNC0xMS0xOSAgQmVuamFtaW4gUG91bGFpbiAgPGJw
b3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnNldFJvbGVWYWx1ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWYxMmE5NzkwZmU2NWY5Njc2MWU0OThl
MTVkODlhZDMwN2Y4NmE4ZC4uZTI0ODI2NGQ0NmYxMzAxYmMzYzU2NTM5YWFjMGNkODdmNjkwODM4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE0LTExLTE5ICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBvcHRpb25hbCBlbnRy
eSB0cmFuc2l0aW9uIChmcm9tIHNlbGVjdGlvbiBoaWdobGlnaHQpIHRvIFRleHRJbmRpY2F0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODg1Ngor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg4NDAxMjg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvVGV4dEluZGljYXRvci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Om91dHNldEluZGljYXRvclJlY3RJbmNsdWRpbmdTaGFkb3cpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UpOgorICAgICAgICAo
V2ViS2l0OjpzbmFwc2hvdFNlbGVjdGlvbldpdGhIaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRJbmRpY2F0b3I6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRJ
bmRpY2F0b3I6OkRhdGE6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlRleHRJbmRpY2F0b3I6
OkRhdGE6OmRlY29kZSk6CisgICAgICAgIFJlbW92ZSBUZXh0SW5kaWNhdG9yOjpkcmF3IGFuZCBy
ZWxhdGVkIGZ1bmN0aW9uczsgZHJhd2luZyBpcyBoYW5kbGVkIGVudGlyZWx5CisgICAgICAgIGJ5
IHRoZSBUZXh0SW5kaWNhdG9yV2luZG93IG5vdywgYW5kIFRleHRJbmRpY2F0b3IganVzdCBzdG9y
ZXMgdGhlIHJlcXVpcmVkIGRhdGEuCisKKyAgICAgICAgVW5pZnkgb3V0c2V0SW5kaWNhdG9yUmVj
dEluY2x1ZGluZ1NoYWRvdy4KKworICAgICAgICBBZGQgYW4gYXJndW1lbnQgdG8gY3JlYXRlV2l0
aFJhbmdlL2NyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lIHRvIGluZGljYXRlCisgICAgICAgIGlm
IHRoZSBUZXh0SW5kaWNhdG9yIHNob3VsZCB0cmFuc2l0aW9uIGZyb20gdGhlIHNlbGVjdGlvbiBo
aWdobGlnaHQgdG8KKyAgICAgICAgdGhlIHllbGxvdyBidWJibGUuCisKKyAgICAgICAgSWYgd2Un
cmUgZG9pbmcgdGhlIHRyYW5zaXRpb24sIHBhaW50IHRoZSBzZWxlY3Rpb24gaW50byBhIHNlY29u
ZCBiaXRtYXAsCisgICAgICAgIHdpdGhvdXQgZm9yY2luZyB0aGUgdGV4dCB0byBibGFjayBhbmQg
d2l0aG91dCBoaWRpbmcgdGhlIGJsdWUgaGlnaGxpZ2h0LgorCisgICAgICAgIEVuY29kZS9kZWNv
ZGUgdGhlIHNlY29uZCBiaXRtYXAuCisKKyAgICAgICAgKiBTaGFyZWQvVGV4dEluZGljYXRvci5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbToKKyAgICAgICAgKC1bV0tU
ZXh0SW5kaWNhdG9yVmlldyBpbml0V2l0aEZyYW1lOnRleHRJbmRpY2F0b3I6bWFyZ2luOnRyYW5z
aXRpb25Gcm9tU2VsZWN0aW9uQ29sb3I6XSk6CisgICAgICAgICgtW1dLVGV4dEluZGljYXRvclZp
ZXcgcHJlc2VudFdpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tUZXh0SW5k
aWNhdG9yVmlldyBoaWRlV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1Rl
eHRJbmRpY2F0b3JWaWV3IGlzRmxpcHBlZF0pOgorICAgICAgICAoV2ViS2l0OjpUZXh0SW5kaWNh
dG9yV2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6VGV4dElu
ZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcik6CisgICAgICAgIChXZWJLaXQ6OlRleHRJ
bmRpY2F0b3JXaW5kb3c6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6VGV4dEluZGlj
YXRvcldpbmRvdzo6c3RhcnRGYWRlT3V0VGltZXJGaXJlZCk6CisgICAgICAgIFJlLWltcGxlbWVu
dCB0aGUgYm91bmNlIGFuaW1hdGlvbiB1c2luZyBDb3JlQW5pbWF0aW9uIGluc3RlYWQgb2YKKyAg
ICAgICAgdGhlIFdLU0ktYmFzZWQgV0tXaW5kb3dCb3VuY2VBbmltYXRpb24qLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0QXRMb2NhdGlvbik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViQ29udGV4dE1lbnVD
bGllbnRNYWMubW06CisgICAgICAgIFVzZSB0aGUgYWZvcmVtZW50aW9uZWQgdHJhbnNpdGlvbiBh
bmltYXRpb24gZm9yIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uLAor
ICAgICAgICB0aGUgY29udGV4dCBtZW51IGxvb2t1cCBpdGVtLCBhbmQgZm9yIERhdGEgRGV0ZWN0
b3JzLgorCiAyMDE0LTExLTE5ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBFcnJvciBpbiBkb2N1bWVudGF0aW9uIG9mIHdlYmtpdF9w
cmludF9vcGVyYXRpb25fZ2V0X3BhZ2Vfc2V0dXAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCAz
N2UwYjlkYTc2ZGM3YWExOWEwYjA4MDExMjRlNGU5ZDNjODMwYWE2Li41M2E5NGMyZjkxN2Y4ZWRh
ODNmMGQ4OTFkMWE1ZDE1YTAzMzNkNTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNzg4LDYg
Kzc4OCw3IEBAIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJDb3Jl
MTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdzUkdC
Q29sb3JTcGFjZVJlZkV2CiBfX1pON1dlYkNvcmUxN3NldENvb2tpZXNGcm9tRE9NRVJLTlNfMjFO
ZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJMRVM1X1JLTjNXVEY2U3RyaW5nRQorX19aTjdX
ZWJDb3JlMTdzbmFwc2hvdEZyYW1lUmVjdEVSTlNfNUZyYW1lRVJLTlNfN0ludFJlY3RFagogX19a
TjdXZWJDb3JlMTdzbmFwc2hvdFNlbGVjdGlvbkVSTlNfNUZyYW1lRWoKIF9fWk43V2ViQ29yZTE3
dXNlclZpc2libGVTdHJpbmdFUDVOU1VSTAogX19aTjdXZWJDb3JlMThET01XaW5kb3dFeHRlbnNp
b25DMUVQTlNfNUZyYW1lRVJOU18xNURPTVdyYXBwZXJXb3JsZEUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCA0MmQ4MzYzZjE3ZjdlYzEwN2I5MmRjZjVjYzM5NjU4
MmY1MDM0YmFhLi5lMzQ0NTE0YWI0YjE3ODcwMjNjOTM1NzNmZmU3ZjczOWM1OGZkNTY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0zOSw5MSArMzksMzUgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lU25hcHNob3R0aW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFkaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUGF0aC5oPgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwCi0jZGVmaW5lIEVOQUJMRV9MRUdBQ1lf
VEVYVF9JTkRJQ0FUT1JfU1RZTEUgMQotI2Vsc2UKLSNkZWZpbmUgRU5BQkxFX0xFR0FDWV9URVhU
X0lORElDQVRPUl9TVFlMRSAwCi0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
Ky8vIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUgdmFsdWVzIGluIFRleHRJbmRpY2F0b3JXaW5kb3cu
CisvLyBGSVhNRTogSWRlYWxseSB0aGVzZSB3b3VsZCBvbmx5IGJlIGluIG9uZSBwbGFjZS4KICNp
ZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotc3RhdGljIGNvbnN0IGZsb2F0
IGNvcm5lclJhZGl1cyA9IDMuMDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IHNoYWRvd09mZnNldFgg
PSAwLjA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgc2hhZG93T2Zmc2V0WSA9IDEuMDsKLXN0YXRpYyBj
b25zdCBmbG9hdCBzaGFkb3dCbHVyUmFkaXVzID0gMy4wOwotCi1zdGF0aWMgY29uc3QgaW50IHNo
YWRvd1JlZCA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IHNoYWRvd0dyZWVuID0gMDsKLXN0YXRpYyBj
b25zdCBpbnQgc2hhZG93Qmx1ZSA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IHNoYWRvd0FscGhhID0g
MjA0OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgbGlnaHRCb3JkZXJUaGlja25lc3MgPSAxLjA7Ci1z
dGF0aWMgY29uc3QgZmxvYXQgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciA9IDMu
MDsKLXN0YXRpYyBjb25zdCBmbG9hdCB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciA9
IDEuMDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IGhvcml6b250YWxCb3JkZXJJbnNpZGVTaGFkb3cg
PSBsaWdodEJvcmRlclRoaWNrbmVzcyArIGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3Jk
ZXI7Ci1zdGF0aWMgY29uc3QgZmxvYXQgdmVydGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgPSBsaWdo
dEJvcmRlclRoaWNrbmVzcyArIHZlcnRpY2FsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyOwotCi1z
dGF0aWMgY29uc3QgZmxvYXQgbGVmdEJvcmRlclRoaWNrbmVzcyA9IGhvcml6b250YWxCb3JkZXJJ
bnNpZGVTaGFkb3cgKyBzaGFkb3dPZmZzZXRYICsgc2hhZG93Qmx1clJhZGl1cyAvIDIuMDsKLXN0
YXRpYyBjb25zdCBmbG9hdCB0b3BCb3JkZXJUaGlja25lc3MgPSB2ZXJ0aWNhbEJvcmRlckluc2lk
ZVNoYWRvdyAtIHNoYWRvd09mZnNldFkgKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOwotc3RhdGlj
IGNvbnN0IGZsb2F0IHJpZ2h0Qm9yZGVyVGhpY2tuZXNzID0gaG9yaXpvbnRhbEJvcmRlckluc2lk
ZVNoYWRvdyAtIHNoYWRvd09mZnNldFggKyBzaGFkb3dCbHVyUmFkaXVzIC8gMi4wOwotc3RhdGlj
IGNvbnN0IGZsb2F0IGJvdHRvbUJvcmRlclRoaWNrbmVzcyA9IHZlcnRpY2FsQm9yZGVySW5zaWRl
U2hhZG93ICsgc2hhZG93T2Zmc2V0WSArIHNoYWRvd0JsdXJSYWRpdXMgLyAyLjA7Ci0KLXN0YXRp
YyBjb25zdCBmbG9hdCBob3Jpem9udGFsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyID0gaG9y
aXpvbnRhbEJvcmRlckluc2lkZVNoYWRvdyAtIGxpZ2h0Qm9yZGVyVGhpY2tuZXNzIC8gMi4wOwot
c3RhdGljIGNvbnN0IGZsb2F0IHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyID0g
dmVydGljYWxCb3JkZXJJbnNpZGVTaGFkb3cgLSBsaWdodEJvcmRlclRoaWNrbmVzcyAvIDIuMDsK
LQotc3RhdGljIGNvbnN0IGludCBsaWdodEJvcmRlclJlZCA9IDI0NTsKLXN0YXRpYyBjb25zdCBp
bnQgbGlnaHRCb3JkZXJHcmVlbiA9IDIzMDsKLXN0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJC
bHVlID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgbGlnaHRCb3JkZXJBbHBoYSA9IDI1NTsKLQotc3Rh
dGljIGNvbnN0IGludCBncmFkaWVudERhcmtSZWQgPSAyMzc7Ci1zdGF0aWMgY29uc3QgaW50IGdy
YWRpZW50RGFya0dyZWVuID0gMjA0Owotc3RhdGljIGNvbnN0IGludCBncmFkaWVudERhcmtCbHVl
ID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnREYXJrQWxwaGEgPSAyNTU7Ci0KLXN0YXRp
YyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodFJlZCA9IDI0MjsKLXN0YXRpYyBjb25zdCBpbnQgZ3Jh
ZGllbnRMaWdodEdyZWVuID0gMjM5Owotc3RhdGljIGNvbnN0IGludCBncmFkaWVudExpZ2h0Qmx1
ZSA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IGdyYWRpZW50TGlnaHRBbHBoYSA9IDI1NTsKK2NvbnN0
IGZsb2F0IGhvcml6b250YWxCb3JkZXIgPSAzOworY29uc3QgZmxvYXQgdmVydGljYWxCb3JkZXIg
PSAxOworY29uc3QgZmxvYXQgZHJvcFNoYWRvd0JsdXJSYWRpdXMgPSAxLjU7CiAjZWxzZQotY29u
c3QgZmxvYXQgZmxhdFN0eWxlSG9yaXpvbnRhbEJvcmRlciA9IDI7Ci1jb25zdCBmbG9hdCBmbGF0
U3R5bGVWZXJ0aWNhbEJvcmRlciA9IDE7Ci1jb25zdCBmbG9hdCBmbGF0U2hhZG93T2Zmc2V0WCA9
IDA7Ci1jb25zdCBmbG9hdCBmbGF0U2hhZG93T2Zmc2V0WSA9IDU7Ci1jb25zdCBmbG9hdCBmbGF0
U2hhZG93Qmx1clJhZGl1cyA9IDI1OwotY29uc3QgZmxvYXQgZmxhdFJpbVNoYWRvd0JsdXJSYWRp
dXMgPSAyOworY29uc3QgZmxvYXQgaG9yaXpvbnRhbEJvcmRlciA9IDI7Citjb25zdCBmbG9hdCB2
ZXJ0aWNhbEJvcmRlciA9IDE7Citjb25zdCBmbG9hdCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDEy
OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgRmxvYXRSZWN0IGluZmxh
dGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgaW5mbGF0ZVgsIGZsb2F0IGluZmxh
dGVZKQotewotICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3QgPSByZWN0OwotICAgIGluZmxhdGVk
UmVjdC5pbmZsYXRlWChpbmZsYXRlWCk7Ci0gICAgaW5mbGF0ZWRSZWN0LmluZmxhdGVZKGluZmxh
dGVZKTsKLSAgICByZXR1cm4gaW5mbGF0ZWRSZWN0OwotfQotCiBzdGF0aWMgRmxvYXRSZWN0IG91
dHNldEluZGljYXRvclJlY3RJbmNsdWRpbmdTaGFkb3coY29uc3QgRmxvYXRSZWN0IHJlY3QpCiB7
Ci0jaWYgRU5BQkxFKExFR0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSkKICAgICBGbG9hdFJlY3Qg
b3V0c2V0UmVjdCA9IHJlY3Q7Ci0gICAgb3V0c2V0UmVjdC5tb3ZlKC1sZWZ0Qm9yZGVyVGhpY2tu
ZXNzLCAtdG9wQm9yZGVyVGhpY2tuZXNzKTsKLSAgICBvdXRzZXRSZWN0LmV4cGFuZChsZWZ0Qm9y
ZGVyVGhpY2tuZXNzICsgcmlnaHRCb3JkZXJUaGlja25lc3MsIHRvcEJvcmRlclRoaWNrbmVzcyAr
IGJvdHRvbUJvcmRlclRoaWNrbmVzcyk7CisgICAgb3V0c2V0UmVjdC5pbmZsYXRlWChkcm9wU2hh
ZG93Qmx1clJhZGl1cyArIGhvcml6b250YWxCb3JkZXIpOworICAgIG91dHNldFJlY3QuaW5mbGF0
ZVkoZHJvcFNoYWRvd0JsdXJSYWRpdXMgKyB2ZXJ0aWNhbEJvcmRlcik7CiAgICAgcmV0dXJuIG91
dHNldFJlY3Q7Ci0jZWxzZQotICAgIHJldHVybiBpbmZsYXRlUmVjdChyZWN0LCBmbGF0U2hhZG93
Qmx1clJhZGl1cyArIGZsYXRTdHlsZUhvcml6b250YWxCb3JkZXIsIGZsYXRTaGFkb3dCbHVyUmFk
aXVzICsgZmxhdFN0eWxlVmVydGljYWxCb3JkZXIpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBib29s
IHRleHRJbmRpY2F0b3JzRm9yVGV4dFJlY3RzT3ZlcmxhcChjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgdGV4dFJlY3RzKQpAQCAtMTU1LDcgKzk5LDcgQEAgUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9y
PiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoY29uc3QgVGV4dEluZGljYXRvcjo6RGF0YSYgZGF0YSkK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRJbmRpY2F0b3IoZGF0YSkpOwogfQogCi1QYXNz
UmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25z
dCBSYW5nZSYgcmFuZ2UpCitQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6
OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFByZXNlbnRhdGlvblRyYW5zaXRp
b24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKIHsKICAgICBGcmFtZSogZnJhbWUgPSByYW5nZS5z
dGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAKQEAgLTE2NSwxNCArMTA5LDQ2
IEBAIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJh
bmdlKGNvbnN0IFJhbmdlJiByYW5nZSkKICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBmcmFtZS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKCZyYW5nZSk7CiAKLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gaW5k
aWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoKldlYkZy
YW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSkpOworICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBp
bmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZSgqV2Vi
RnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKSwgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CiAK
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7CiAgICAg
CiAgICAgcmV0dXJuIGluZGljYXRvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dElu
ZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoY29uc3Qg
V2ViRnJhbWUmIGZyYW1lKQorLy8gRklYTUUgKDEzODg4OSk6IElkZWFsbHkgdGhlIEZyYW1lU25h
cHNob3R0aW5nIGZ1bmN0aW9ucyB3b3VsZCBiZSBtb3JlIGZsZXhpYmxlCisvLyBhbmQgd2Ugd291
bGRuJ3QgaGF2ZSB0byBpbXBsZW1lbnQgdGhpcyBoZXJlLgorc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBzbmFwc2hvdFNlbGVjdGlvbldpdGhIaWdobGlnaHQoRnJhbWUmIGZyYW1l
KQoreworICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOworCisgICAgaWYg
KCFzZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEZs
b2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHMgPSBzZWxlY3Rpb24uc2VsZWN0aW9uQm91bmRzKCk7CisK
KyAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHNlbGVjdGlvbiBib3VuZHMgdG8gYmUgZW1w
dHk7IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY2NDUuCisg
ICAgaWYgKHNlbGVjdGlvbkJvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdCA9IHNuYXBzaG90
RnJhbWVSZWN0KGZyYW1lLCBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvbkJvdW5kcyksIDApOwor
CisgICAgaWYgKCFzbmFwc2hvdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRlcm5hbFNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpT
dXBwb3J0c0FscGhhKTsKKyAgICBpZiAoIXNoYXJlZFNuYXBzaG90KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gc2hhcmVkU25hcHNob3QtPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gZnJh
bWUucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKHNuYXBzaG90LmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBGbG9hdFBvaW50KCkpOworCisgICAgcmV0dXJuIHNoYXJlZFNuYXBzaG90
LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9y
OjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShjb25zdCBXZWJGcmFtZSYgZnJhbWUsIFByZXNl
bnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbikKIHsKICAgICBGcmFtZSYg
Y29yZUZyYW1lID0gKmZyYW1lLmNvcmVGcmFtZSgpOwogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoY29yZUZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5k
cygpKTsKQEAgLTE4MCw2ICsxNTYsMTAgQEAgUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0
SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShjb25zdCBXZWJGcmEKICAgICBp
ZiAoIWluZGljYXRvckJpdG1hcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBpbmRpY2F0b3JCaXRtYXBXaXRoSGlnaGxpZ2h0OworICAgIGlm
IChwcmVzZW50YXRpb25UcmFuc2l0aW9uID09IFByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5j
ZUFuZENyb3NzZmFkZSkKKyAgICAgICAgaW5kaWNhdG9yQml0bWFwV2l0aEhpZ2hsaWdodCA9IHNu
YXBzaG90U2VsZWN0aW9uV2l0aEhpZ2hsaWdodChjb3JlRnJhbWUpOworCiAgICAgLy8gU3RvcmUg
dGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcywgdG8gYmUgdXNlZCBzdWJz
ZXF1ZW50bHkKICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhlIGluZGljYXRvciBhbmQgc2VsZWN0
aW9uIHN0aWxsIHByZWNpc2VseSBvdmVybGFwLgogICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdElu
V2luZG93Q29vcmRpbmF0ZXMgPSBjb3JlRnJhbWUudmlldygpLT5jb250ZW50c1RvV2luZG93KHNl
bGVjdGlvblJlY3QpOwpAQCAtMjEwLDYgKzE5MCw4IEBAIFBhc3NSZWZQdHI8VGV4dEluZGljYXRv
cj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoY29uc3QgV2ViRnJh
CiAgICAgZGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gdGV4dFJlY3Rz
SW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKICAgICBkYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFj
dG9yID0gZnJhbWUucGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIGRhdGEuY29udGVu
dEltYWdlID0gaW5kaWNhdG9yQml0bWFwOworICAgIGRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hs
aWdodCA9IGluZGljYXRvckJpdG1hcFdpdGhIaWdobGlnaHQ7CisgICAgZGF0YS5wcmVzZW50YXRp
b25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKIAogICAgIHJldHVybiBUZXh0
SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7CiB9CkBAIC0yMzEsMTE4ICsyMTMsNyBAQCBUZXh0SW5k
aWNhdG9yOjp+VGV4dEluZGljYXRvcigpCiAKIEZsb2F0UmVjdCBUZXh0SW5kaWNhdG9yOjpmcmFt
ZVJlY3QoKSBjb25zdAogewotICAgIHJldHVybiBvdXRzZXRJbmRpY2F0b3JSZWN0SW5jbHVkaW5n
U2hhZG93KG1fZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRlcyk7Ci19Ci0K
LSNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotc3RhdGljIGlubGluZSBD
b2xvciBsaWdodEJvcmRlckNvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IobGlnaHRCb3JkZXJS
ZWQsIGxpZ2h0Qm9yZGVyR3JlZW4sIGxpZ2h0Qm9yZGVyQmx1ZSwgbGlnaHRCb3JkZXJBbHBoYSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ29sb3Igc2hhZG93Q29sb3IoKQotewotICAgIHJldHVybiBD
b2xvcihzaGFkb3dSZWQsIHNoYWRvd0dyZWVuLCBzaGFkb3dCbHVlLCBzaGFkb3dBbHBoYSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgQ29sb3IgZ3JhZGllbnRMaWdodENvbG9yKCkKLXsKLSAgICByZXR1
cm4gQ29sb3IoZ3JhZGllbnRMaWdodFJlZCwgZ3JhZGllbnRMaWdodEdyZWVuLCBncmFkaWVudExp
Z2h0Qmx1ZSwgZ3JhZGllbnRMaWdodEFscGhhKTsKLX0KLQotc3RhdGljIGlubGluZSBDb2xvciBn
cmFkaWVudERhcmtDb2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKGdyYWRpZW50RGFya1JlZCwg
Z3JhZGllbnREYXJrR3JlZW4sIGdyYWRpZW50RGFya0JsdWUsIGdyYWRpZW50RGFya0FscGhhKTsK
LX0KLQotc3RhdGljIFBhdGggcGF0aFdpdGhSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHBh
dGhSZWN0LCBmbG9hdCByYWRpdXMpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocGF0aFJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwotCi0gICAgcmV0
dXJuIHBhdGg7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBDb2xvciBmbGF0SGlnaGxpZ2h0Q29s
b3IoKQotewotICAgIHJldHVybiBDb2xvcigyNTUsIDI1NSwgMCwgMjU1KTsKLX0KLQotc3RhdGlj
IGlubGluZSBDb2xvciBmbGF0UmltU2hhZG93Q29sb3IoKQotewotICAgIHJldHVybiBDb2xvcigw
LCAwLCAwLCAzOCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ29sb3IgZmxhdERyb3BTaGFkb3dDb2xv
cigpCi17Ci0gICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDUxKTsKLX0KLSNlbmRpZgotCi12b2lk
IFRleHRJbmRpY2F0b3I6OmRyYXdDb250ZW50SW1hZ2UoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkZsb2F0UmVjdCB0ZXh0UmVjdCkKLXsKLSAgICBG
bG9hdFJlY3QgaW1hZ2VSZWN0ID0gdGV4dFJlY3Q7Ci0gICAgaW1hZ2VSZWN0Lm1vdmUobV9kYXRh
LnRleHRCb3VuZGluZ1JlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkgLSBtX2RhdGEu
c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgbV9kYXRh
LmNvbnRlbnRJbWFnZS0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBtX2RhdGEuY29udGVudEltYWdl
U2NhbGVGYWN0b3IsIGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3QpLmxvY2F0aW9uKCksIGVuY2xv
c2luZ0ludFJlY3QoaW1hZ2VSZWN0KSk7Ci19Ci0KLXZvaWQgVGV4dEluZGljYXRvcjo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgLypkaXJ0eVJl
Y3QqLykKLXsKLSNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NUWUxFKQotICAgIGZv
ciAoYXV0byYgdGV4dFJlY3QgOiBtX2RhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGlu
YXRlcykgewotICAgICAgICBGbG9hdFJlY3QgYm9yZGVyZWRUZXh0UmVjdCA9IHRleHRSZWN0Owot
ICAgICAgICBib3JkZXJlZFRleHRSZWN0Lm1vdmUobGVmdEJvcmRlclRoaWNrbmVzcywgdG9wQm9y
ZGVyVGhpY2tuZXNzKTsKLQotICAgICAgICBGbG9hdFJlY3Qgb3V0ZXJQYXRoUmVjdCA9IGluZmxh
dGVSZWN0KGJvcmRlcmVkVGV4dFJlY3QsIGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRC
b3JkZXIsIHZlcnRpY2FsT3V0c2V0VG9DZW50ZXJPZkxpZ2h0Qm9yZGVyKTsKLSAgICAgICAgRmxv
YXRSZWN0IGlubmVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdChib3JkZXJlZFRleHRSZWN0LCBob3Jp
em9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVMaWdo
dEJvcmRlcik7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwg
c2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IoKSwgQ29sb3JTcGFjZVNSR0IpOwotICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihsaWdodEJvcmRlckNvbG9yKCksIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxQYXRo
KHBhdGhXaXRoUm91bmRlZFJlY3Qob3V0ZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5jbGlwKHBhdGhXaXRoUm91bmRlZFJlY3QoaW5uZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7
Ci0gICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0LnkoKSksIEZsb2F0
UG9pbnQoaW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJlY3QubWF4WSgpKSk7Ci0gICAgICAg
ICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDAsIGdyYWRpZW50TGlnaHRDb2xvcigpKTsKLSAg
ICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMSwgZ3JhZGllbnREYXJrQ29sb3IoKSk7
Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbEdyYWRpZW50KGdyYWRpZW50LnJl
bGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KG91
dGVyUGF0aFJlY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKEZsb2F0U2l6ZShyb3VuZGYobGVmdEJvcmRl
clRoaWNrbmVzcyksIHJvdW5kZih0b3BCb3JkZXJUaGlja25lc3MpKSk7Ci0KLSAgICAgICAgICAg
IGRyYXdDb250ZW50SW1hZ2UoZ3JhcGhpY3NDb250ZXh0LCB0ZXh0UmVjdCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZWxzZQotICAgIGZvciAoYXV0byYgdGV4dFJlY3QgOiBtX2RhdGEudGV4dFJlY3Rz
SW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgewotICAgICAgICBGbG9hdFJlY3QgYmx1clJlY3Qg
PSB0ZXh0UmVjdDsKLSAgICAgICAgYmx1clJlY3QubW92ZShmbGF0U2hhZG93Qmx1clJhZGl1cyAr
IGZsYXRTdHlsZUhvcml6b250YWxCb3JkZXIsIGZsYXRTaGFkb3dCbHVyUmFkaXVzICsgZmxhdFN0
eWxlVmVydGljYWxCb3JkZXIpOwotICAgICAgICBGbG9hdFJlY3Qgb3V0ZXJQYXRoUmVjdCA9IGlu
ZmxhdGVSZWN0KGJsdXJSZWN0LCBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVyLCBmbGF0U3R5bGVW
ZXJ0aWNhbEJvcmRlcik7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAgICAgICBncmFw
aGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSgpLCBmbGF0UmltU2hhZG93Qmx1clJhZGl1
cywgZmxhdFJpbVNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsKLSAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoZmxhdEhpZ2hsaWdodENvbG9yKCksIENvbG9yU3Bh
Y2VTUkdCKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUmVjdChvdXRlclBhdGhS
ZWN0KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKGZs
YXRTaGFkb3dPZmZzZXRYLCBmbGF0U2hhZG93T2Zmc2V0WSksIGZsYXRTaGFkb3dCbHVyUmFkaXVz
LCBmbGF0RHJvcFNoYWRvd0NvbG9yKCksIENvbG9yU3BhY2VTUkdCKTsKLSAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5maWxsUmVjdChvdXRlclBhdGhSZWN0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihn
cmFwaGljc0NvbnRleHQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShG
bG9hdFNpemUoZmxhdFNoYWRvd0JsdXJSYWRpdXMgKyBmbGF0U3R5bGVIb3Jpem9udGFsQm9yZGVy
LCBmbGF0U2hhZG93Qmx1clJhZGl1cyArIGZsYXRTdHlsZVZlcnRpY2FsQm9yZGVyKSk7Ci0KLSAg
ICAgICAgICAgIGRyYXdDb250ZW50SW1hZ2UoZ3JhcGhpY3NDb250ZXh0LCB0ZXh0UmVjdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKyAgICByZXR1cm4gbV9kYXRhLnRleHRCb3VuZGluZ1Jl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzOwogfQogCiB2b2lkIFRleHRJbmRpY2F0b3I6OkRhdGE6OmVu
Y29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKQEAgLTM1MSwxMSArMjIy
LDE3IEBAIHZvaWQgVGV4dEluZGljYXRvcjo6RGF0YTo6ZW5jb2RlKElQQzo6QXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgdGV4dEJvdW5kaW5nUmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXM7CiAgICAgZW5jb2RlciA8PCB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzOwogICAgIGVuY29kZXIgPDwgY29udGVudEltYWdlU2NhbGVGYWN0b3I7CisgICAg
ZW5jb2Rlci5lbmNvZGVFbnVtKHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwogCiAgICAgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgY29udGVudEltYWdlSGFuZGxlOwogICAgIGlmIChjb250ZW50SW1h
Z2UpCiAgICAgICAgIGNvbnRlbnRJbWFnZS0+Y3JlYXRlSGFuZGxlKGNvbnRlbnRJbWFnZUhhbmRs
ZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CiAgICAgZW5jb2RlciA8PCBjb250ZW50SW1hZ2VI
YW5kbGU7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VXaXRoSGln
aGxpZ2h0SGFuZGxlOworICAgIGlmIChjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KQorICAgICAg
ICBjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0LT5jcmVhdGVIYW5kbGUoY29udGVudEltYWdlV2l0
aEhpZ2hsaWdodEhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgZW5jb2RlciA8
PCBjb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlOwogfQogCiBib29sIFRleHRJbmRpY2F0
b3I6OkRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVGV4dEluZGlj
YXRvcjo6RGF0YSYgdGV4dEluZGljYXRvckRhdGEpCkBAIC0zNzIsNiArMjQ5LDkgQEAgYm9vbCBU
ZXh0SW5kaWNhdG9yOjpEYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIs
IFRleHRJbmRpY2F0b3I6OkQKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRleHRJbmRpY2F0b3JE
YXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0odGV4dEluZGljYXRvckRhdGEucHJlc2VudGF0aW9u
VHJhbnNpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlIGNvbnRlbnRJbWFnZUhhbmRsZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNv
bnRlbnRJbWFnZUhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM3OSw2ICsyNTks
MTMgQEAgYm9vbCBUZXh0SW5kaWNhdG9yOjpEYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29k
ZXImIGRlY29kZXIsIFRleHRJbmRpY2F0b3I6OkQKICAgICBpZiAoIWNvbnRlbnRJbWFnZUhhbmRs
ZS5pc051bGwoKSkKICAgICAgICAgdGV4dEluZGljYXRvckRhdGEuY29udGVudEltYWdlID0gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGUoY29udGVudEltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJl
YWRPbmx5KTsKIAorICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGNvbnRlbnRJbWFnZVdpdGhI
aWdobGlnaHRIYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb250ZW50SW1hZ2VXaXRo
SGlnaGxpZ2h0SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjb250
ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0SGFuZGxlLmlzTnVsbCgpKQorICAgICAgICB0ZXh0SW5kaWNh
dG9yRGF0YS5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGUoY29udGVudEltYWdlV2l0aEhpZ2hsaWdodEhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25s
eSk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1RleHRJbmRpY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9UZXh0SW5kaWNh
dG9yLmgKaW5kZXggNzJjNTZkNWE1MTI4MzhhN2Q5MTAzYThiYjg5N2E3ZWY2MDI2N2U0OC4uNTRk
NTc0NTM2YTRmMTdiODVmMGJjODAwNTFiNjBmMzdlNzBjOTY3ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL1RleHRJbmRpY2F0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvVGV4dEluZGljYXRvci5oCkBAIC0zMiw2ICszMiwxMiBAQAogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaWYgUExBVEZPUk0oTUFDKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMDAwCisjZGVmaW5lIEVOQUJM
RV9MRUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUgMQorI2Vsc2UKKyNkZWZpbmUgRU5BQkxFX0xF
R0FDWV9URVhUX0lORElDQVRPUl9TVFlMRSAwCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUmFuZ2U7CkBAIC00OCwyMCArNTQsMjkg
QEAgY2xhc3MgV2ViRnJhbWU7CiAKIGNsYXNzIFRleHRJbmRpY2F0b3IgOiBwdWJsaWMgUmVmQ291
bnRlZDxUZXh0SW5kaWNhdG9yPiB7CiBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBQcmVzZW50YXRp
b25UcmFuc2l0aW9uIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgQm91bmNlLAorICAgICAgICBC
b3VuY2VBbmRDcm9zc2ZhZGUKKyAgICB9OworCiAgICAgc3RydWN0IERhdGEgewogICAgICAgICBX
ZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXM7CiAgICAg
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0ZXh0Qm91bmRpbmdSZWN0SW5XaW5kb3dDb29yZGluYXRl
czsKICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGlu
Z1JlY3RDb29yZGluYXRlczsKICAgICAgICAgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3I7
CisgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFnZVdpdGhIaWdobGln
aHQ7CiAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFnZTsKIAorICAg
ICAgICBQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb247CisKICAg
ICAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKICAgICAgICAg
c3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgRGF0YSYpOwogICAgIH07
CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgVGV4
dEluZGljYXRvcjo6RGF0YSYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+
IGNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKGNvbnN0IFdlYkZyYW1lJik7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFdlYkNvcmU6
OlJhbmdlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0
aFNlbGVjdGlvbkluRnJhbWUoY29uc3QgV2ViRnJhbWUmLCBQcmVzZW50YXRpb25UcmFuc2l0aW9u
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGVXaXRoUmFuZ2Uo
Y29uc3QgV2ViQ29yZTo6UmFuZ2UmLCBQcmVzZW50YXRpb25UcmFuc2l0aW9uKTsKIAogICAgIH5U
ZXh0SW5kaWNhdG9yKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbQppbmRleCA0MzIzYTJiZmFjODNhZDQwN2ExNDc1ZWI3NWM1MjVkNmY0MzlmYzM3Li4zNDgz
NWZlZGQ5NzcyNmI4N2EwOWZhZjZlMmRjOTBlMmRkNjBmMDJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC0yNjk4LDcgKzI2OTgsNyBAQCBzdGF0aWMg
dm9pZCoga2V5VmFsdWVPYnNlcnZpbmdDb250ZXh0ID0gJmtleVZhbHVlT2JzZXJ2aW5nQ29udGV4
dDsKIAogLSAodm9pZClfZGljdGlvbmFyeUxvb2t1cFBvcG92ZXJXaWxsQ2xvc2U6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0gICAgW3NlbGYgX3NldFRleHRJbmRpY2F0b3I6bmls
IGZhZGVPdXQ6Tk8gYW5pbWF0ZTpOT107CisgICAgW3NlbGYgX3NldFRleHRJbmRpY2F0b3I6bmls
IGZhZGVPdXQ6Tk9dOwogfQogCiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmVnaXN0ZXJVSVByb2Nl
c3NUb2tlbnMKQEAgLTMwNjksNyArMzA2OSw3IEBAIHN0YXRpYyB2b2lkKiBrZXlWYWx1ZU9ic2Vy
dmluZ0NvbnRleHQgPSAma2V5VmFsdWVPYnNlcnZpbmdDb250ZXh0OwogICAgIH0KIH0KIAotLSAo
dm9pZClfc2V0VGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPil0ZXh0SW5k
aWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dCBhbmltYXRlOihCT09MKWFuaW1hdGUgYW5pbWF0
aW9uQ29tcGxldGlvbkhhbmRsZXI6KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4pY29tcGxldGlvbkhh
bmRsZXIKKy0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8VGV4dEluZGljYXRv
cj4pdGV4dEluZGljYXRvciBmYWRlT3V0OihCT09MKWZhZGVPdXQgYW5pbWF0aW9uQ29tcGxldGlv
bkhhbmRsZXI6KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4pY29tcGxldGlvbkhhbmRsZXIKIHsKICAg
ICBpZiAoIXRleHRJbmRpY2F0b3IpIHsKICAgICAgICAgX2RhdGEtPl90ZXh0SW5kaWNhdG9yV2lu
ZG93ID0gbnVsbHB0cjsKQEAgLTMwNzksMTIgKzMwNzksMTIgQEAgc3RhdGljIHZvaWQqIGtleVZh
bHVlT2JzZXJ2aW5nQ29udGV4dCA9ICZrZXlWYWx1ZU9ic2VydmluZ0NvbnRleHQ7CiAgICAgaWYg
KCFfZGF0YS0+X3RleHRJbmRpY2F0b3JXaW5kb3cpCiAgICAgICAgIF9kYXRhLT5fdGV4dEluZGlj
YXRvcldpbmRvdyA9IHN0ZDo6bWFrZV91bmlxdWU8VGV4dEluZGljYXRvcldpbmRvdz4oc2VsZik7
CiAKLSAgICBfZGF0YS0+X3RleHRJbmRpY2F0b3JXaW5kb3ctPnNldFRleHRJbmRpY2F0b3IodGV4
dEluZGljYXRvciwgZmFkZU91dCwgYW5pbWF0ZSwgV1RGOjptb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgX2RhdGEtPl90ZXh0SW5kaWNhdG9yV2luZG93LT5zZXRUZXh0SW5kaWNhdG9yKHRl
eHRJbmRpY2F0b3IsIGZhZGVPdXQsIFdURjo6bW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
Ci0tICh2b2lkKV9zZXRUZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+KXRl
eHRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGU6KEJPT0wpYW5pbWF0ZQor
LSAodm9pZClfc2V0VGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPil0ZXh0
SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dAogewotICAgIFtzZWxmIF9zZXRUZXh0SW5k
aWNhdG9yOnRleHRJbmRpY2F0b3IgZmFkZU91dDpmYWRlT3V0IGFuaW1hdGU6YW5pbWF0ZSBhbmlt
YXRpb25Db21wbGV0aW9uSGFuZGxlcjpbXSB7fV07CisgICAgW3NlbGYgX3NldFRleHRJbmRpY2F0
b3I6dGV4dEluZGljYXRvciBmYWRlT3V0OmZhZGVPdXQgYW5pbWF0aW9uQ29tcGxldGlvbkhhbmRs
ZXI6W10geyB9XTsKIH0KIAogLSAoQ0FMYXllciAqKV9yb290TGF5ZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCmluZGV4IGQ3ZjI3ZDFh
OTAzYmEwYmFiMTNkMGIxZWIzOWU2OGIyYjllNTIxMjUuLjA2YmEyMDE0ZTQxYWU4ZDFjMjI1Yjlj
OGVkNGQ0ZjZkMTJhYzVkZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3SW50ZXJuYWwuaApAQCAtODAsOCArODAsOCBAQCBzdHJ1Y3QgV2ViUGFnZUNv
bmZpZ3VyYXRpb247CiAtICh2b2lkKV9zZXRJbnRyaW5zaWNDb250ZW50U2l6ZTooTlNTaXplKWlu
dHJpbnNpY0NvbnRlbnRTaXplOwogLSAoTlNSZWN0KV9jb252ZXJ0VG9EZXZpY2VTcGFjZTooTlNS
ZWN0KXJlY3Q7CiAtIChOU1JlY3QpX2NvbnZlcnRUb1VzZXJTcGFjZTooTlNSZWN0KXJlY3Q7Ci0t
ICh2b2lkKV9zZXRUZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktpdDo6VGV4dEluZGljYXRv
cj4pdGV4dEluZGljYXRvciBmYWRlT3V0OihCT09MKWZhZGVPdXQgYW5pbWF0ZTooQk9PTClhbmlt
YXRlOwotLSAodm9pZClfc2V0VGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJ
bmRpY2F0b3I+KXRleHRJbmRpY2F0b3IgZmFkZU91dDooQk9PTClmYWRlT3V0IGFuaW1hdGU6KEJP
T0wpYW5pbWF0ZSBhbmltYXRpb25Db21wbGV0aW9uSGFuZGxlcjooc3RkOjpmdW5jdGlvbjx2b2lk
ICgpPiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KFBhc3NS
ZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wp
ZmFkZU91dDsKKy0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KFBhc3NSZWZQdHI8V2ViS2l0OjpU
ZXh0SW5kaWNhdG9yPil0ZXh0SW5kaWNhdG9yIGZhZGVPdXQ6KEJPT0wpZmFkZU91dCBhbmltYXRp
b25Db21wbGV0aW9uSGFuZGxlcjooc3RkOjpmdW5jdGlvbjx2b2lkICgpPiljb21wbGV0aW9uSGFu
ZGxlcjsKIAogLSAodm9pZClfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVSb290TGF5ZXI6
KENBTGF5ZXIgKilyb290TGF5ZXI7CiAtIChDQUxheWVyICopX2FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlUm9vdExheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXgg
NjI2YzlhZDUxMTg2YWFmNDUwY2E4M2FkNjI0M2Q3OTU2MDEwMjk0NC4uYTg5YjNlMjU1MGFhNTA4
MmIyYTVlMTg1MzVkNmNmN2M1MTQzMmEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCkBAIC0yMTQsNyArMjE0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb2xvclBpY2tlcj4gY3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImIGluaXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0g
MDsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0
cjxUZXh0SW5kaWNhdG9yPiwgYm9vbCBmYWRlT3V0LCBib29sIGFuaW1hdGUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBi
b29sIGZhZGVPdXQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMjViNTU2NTJkMjg0NzZkNzE2ZDk0ZDAy
NGQxMzlmZjM2MzZlMDU3NC4uZDQ3YzEwYTQ3ZjIyNmUyMjEwMDI0NDE5MDNjY2M3NzkwYzBmZmU1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTM2NDks
MTQgKzM2NDksMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEdldEltYWdlRm9yRmluZE1hdGNo
KGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW4KICAgICBtX2ZpbmRNYXRjaGVz
Q2xpZW50LmRpZEdldEltYWdlRm9yTWF0Y2hSZXN1bHQodGhpcywgV2ViSW1hZ2U6OmNyZWF0ZShT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjb250ZW50SW1hZ2VIYW5kbGUpKS5nZXQoKSwgbWF0Y2hJ
bmRleCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0SW5kaWNhdG9yKGNvbnN0IFRl
eHRJbmRpY2F0b3I6OkRhdGEmIGluZGljYXRvckRhdGEsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmlt
YXRlKQordm9pZCBXZWJQYWdlUHJveHk6OnNldFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGlj
YXRvcjo6RGF0YSYgaW5kaWNhdG9yRGF0YSwgYm9vbCBmYWRlT3V0KQogewotICAgIG1fcGFnZUNs
aWVudC5zZXRUZXh0SW5kaWNhdG9yKFRleHRJbmRpY2F0b3I6OmNyZWF0ZShpbmRpY2F0b3JEYXRh
KSwgZmFkZU91dCwgYW5pbWF0ZSk7CisgICAgbV9wYWdlQ2xpZW50LnNldFRleHRJbmRpY2F0b3Io
VGV4dEluZGljYXRvcjo6Y3JlYXRlKGluZGljYXRvckRhdGEpLCBmYWRlT3V0KTsKIH0KIAotdm9p
ZCBXZWJQYWdlUHJveHk6OmNsZWFyVGV4dEluZGljYXRvcihib29sIGZhZGVPdXQsIGJvb2wgYW5p
bWF0ZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpjbGVhclRleHRJbmRpY2F0b3IoKQogewotICAgIG1f
cGFnZUNsaWVudC5zZXRUZXh0SW5kaWNhdG9yKG51bGxwdHIsIGZhZGVPdXQsIGFuaW1hdGUpOwor
ICAgIG1fcGFnZUNsaWVudC5zZXRUZXh0SW5kaWNhdG9yKG51bGxwdHIsIGZhbHNlKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVp
bnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAwYjZkYmMwZmI0NTZjYjljMmVkYjllZDJiMmMzZDFj
YmVkYTk1YmI5Li4xYWQyYzE5YTI1MTAzZGU0ODdkNTYyNGY5NjAzNDMwMmNlMDZhM2VjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC02NjIsOCArNjYyLDggQEAg
cHVibGljOgogICAgIHZvaWQgaGlkZUZpbmRVSSgpOwogICAgIHZvaWQgY291bnRTdHJpbmdNYXRj
aGVzKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsK
ICAgICB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBt
YXRjaENvdW50KTsKLSAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRv
cjo6RGF0YSYsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKTsKLSAgICB2b2lkIGNsZWFyVGV4
dEluZGljYXRvcihib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSk7CisgICAgdm9pZCBzZXRUZXh0
SW5kaWNhdG9yKGNvbnN0IFRleHRJbmRpY2F0b3I6OkRhdGEmLCBib29sIGZhZGVPdXQpOworICAg
IHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKCk7CiAgICAgdm9pZCBkaWRGaW5kU3RyaW5nKGNvbnN0
IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCk7CiAgICAg
dm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZGlkRmlu
ZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFZlY3RvcjxXZWJDb3Jl
OjpJbnRSZWN0Pj4mIG1hdGNoUmVjdHMsIGludDMyX3QgZmlyc3RJbmRleEFmdGVyU2VsZWN0aW9u
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCmluZGV4IGE1MGUxMWEwMTVkYTU3Zjc2ZGU4MmUzNWZiMTliYzkxZjlhMThlZjIuLjc0Yjlh
YjdiOGU2MTFlN2U4OWRhNzI5YWQyMDk5ZDRkYTI0ZTRhNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjI3LDggKzIyNyw4
IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAKICAgICAjIEZpbmQgbWVzc2FnZXMKICAg
ICBEaWRDb3VudFN0cmluZ01hdGNoZXMoU3RyaW5nIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3Vu
dCkKLSAgICBTZXRUZXh0SW5kaWNhdG9yKFdlYktpdDo6VGV4dEluZGljYXRvcjo6RGF0YSBpbmRp
Y2F0b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQotICAgIENsZWFyVGV4dEluZGljYXRv
cihib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKKyAgICBTZXRUZXh0SW5kaWNhdG9yKFdlYktp
dDo6VGV4dEluZGljYXRvcjo6RGF0YSBpbmRpY2F0b3IsIGJvb2wgZmFkZU91dCkKKyAgICBDbGVh
clRleHRJbmRpY2F0b3IoKQogICAgIERpZEZpbmRTdHJpbmcoU3RyaW5nIHN0cmluZywgdWludDMy
X3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogICAgIERpZEZhaWxUb0ZpbmRTdHJp
bmcoU3RyaW5nIHN0cmluZykKICAgICBEaWRGaW5kU3RyaW5nTWF0Y2hlcyhTdHJpbmcgc3RyaW5n
LCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+PiBtYXRjaGVzLCBpbnQzMl90IGZpcnN0
SW5kZXhBZnRlclNlbGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MuaAppbmRleCA2MjZjNmIxMGJlOTkxZDYwOWM0NmNiMzg1NTQ4Mzk0
YjZjOWNhN2RkLi43OWNiZDJmMTk5NzY0OWUxNGM5YjU3MzJlMTRjZmE5MTgxODc3OTY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCkBA
IC05Niw3ICs5Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVh
dGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJvb2wgZmFk
ZU91dCwgYm9vbCBhbmltYXRlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dElu
ZGljYXRvcihQYXNzUmVmUHRyPFRleHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQpIG92ZXJyaWRl
OwogCiAgICAgdmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29u
c3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IGFiYmQyODllZTk3ZWQ5
NDIwNjMzNDg1YzVkYmM2OGQwZjIyY2JiNmQuLmI4ODMxMDEzMGEwODRjMzZjZmQ1NjRmM2ZiNTY1
YzUzOTY4YzU5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5tbQpAQCAtNDM1LDcgKzQzNSw3IEBAIFBhc3NSZWZQdHI8V2ViQ29udGV4
dE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFn
ZVByCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNldFRleHRJbmRp
Y2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yLCBib29sIGZhZGVP
dXQsIGJvb2wgYW5pbWF0ZSkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFRleHRJbmRpY2F0b3Io
UGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yLCBib29sIGZhZGVPdXQpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaApp
bmRleCBiM2E5YTAwOWVhMGQ2N2FlYzcxMDgyOTVlMjdmNTUwMzYzNDIzMjdlLi43OTVmODRjNmIz
NTExYmMxMzZhMzBjYTQ2YTJiY2VkZjhkMmYyZGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29sb3JQaWNrZXI+IGNyZWF0ZUNvbG9yUGlja2Vy
KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0aWFsQ29sb3IsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKICNlbmRpZgogCi0gICAgdm9pZCBzZXRUZXh0SW5kaWNhdG9y
KFBhc3NSZWZQdHI8VGV4dEluZGljYXRvcj4sIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKTsK
KyAgICB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiwgYm9v
bCBmYWRlT3V0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9QYWdlQ2xpZW50SW1wbC5tbQppbmRleCBlOWE3ZGIxZDVlZjNmYWE0NzNkMTVmZjY5MDky
YzY0Y2M4M2ZhOTIzLi44MmQzZTJkMjgwYWJkZjMxY2EyZjkzYzc4YjE0NzJiZGI3M2U4NTE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KQEAg
LTQ3MCw5ICs0NzAsOSBAQCBQYXNzUmVmUHRyPFdlYkNvbG9yUGlja2VyPiBQYWdlQ2xpZW50SW1w
bDo6Y3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiBwYWdlLAogfQogI2VuZGlmCiAKLXZv
aWQgUGFnZUNsaWVudEltcGw6OnNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNh
dG9yPiB0ZXh0SW5kaWNhdG9yLCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OnNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiB0
ZXh0SW5kaWNhdG9yLCBib29sIGZhZGVPdXQpCiB7Ci0gICAgW21fd2tWaWV3IF9zZXRUZXh0SW5k
aWNhdG9yOnRleHRJbmRpY2F0b3IgZmFkZU91dDpmYWRlT3V0IGFuaW1hdGU6YW5pbWF0ZV07Cisg
ICAgW21fd2tWaWV3IF9zZXRUZXh0SW5kaWNhdG9yOnRleHRJbmRpY2F0b3IgZmFkZU91dDpmYWRl
T3V0XTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6YWNjZXNzaWJpbGl0eVdlYlByb2Nlc3NU
b2tlblJlY2VpdmVkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKQEAgLTU0OSw3ICs1
NDksNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChj
b25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJiBkaWN0aQogICAgICAgICAvLyBSdW4gdGhlIGFuaW1h
dGlvbnMgc2VyaWFsbHkgYmVjYXVzZSBhdHRhY2hpbmcgYW5vdGhlciBzdWJ3aW5kb3cgYnJlYWtz
IHRoZSBib3VuY2UgYW5pbWF0aW9uLgogICAgICAgICAvLyBXZSBjb3VsZCBjb25zaWRlciBtYWtp
bmcgdGhlIGJvdW5jZSBOU0FuaW1hdGlvbk5vbmJsb2NraW5nVGhyZWFkZWQgaW5zdGVhZCwgd2hp
Y2ggc2VlbXMKICAgICAgICAgLy8gdG8gd29yaywgYnV0IG5lZWQgdG8gY29uc2lkZXIgYWxsIG9m
IHRoZSBpbXBsaWNhdGlvbnMuCi0gICAgICAgIFttX3drVmlldyBfc2V0VGV4dEluZGljYXRvcjpU
ZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKSBm
YWRlT3V0Ok5PIGFuaW1hdGU6WUVTIGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyOltkaWN0aW9u
YXJ5UG9wdXBJbmZvLCB0ZXh0QmFzZWxpbmVPcmlnaW4sIG11dGFibGVPcHRpb25zXSB7CisgICAg
ICAgIFttX3drVmlldyBfc2V0VGV4dEluZGljYXRvcjpUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGlj
dGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yKSBmYWRlT3V0Ok5PIGFuaW1hdGlvbkNvbXBs
ZXRpb25IYW5kbGVyOltkaWN0aW9uYXJ5UG9wdXBJbmZvLCB0ZXh0QmFzZWxpbmVPcmlnaW4sIG11
dGFibGVPcHRpb25zXSB7CiAgICAgICAgICAgICBbbXV0YWJsZU9wdGlvbnMgc2V0T2JqZWN0OkBZ
RVMgZm9yS2V5OmdldExVVGVybU9wdGlvbkRpc2FibGVTZWFyY2hUZXJtSW5kaWNhdG9yKCldOwog
ICAgICAgICAgICAgW2dldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkgc2hvd0RlZmlu
aXRpb25Gb3JUZXJtOmRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZy5zdHJpbmcu
Z2V0KCkgYXRMb2NhdGlvbjp0ZXh0QmFzZWxpbmVPcmlnaW4gb3B0aW9uczptdXRhYmxlT3B0aW9u
cy5nZXQoKV07CiAgICAgICAgIH1dOwpAQCAtNTY0LDcgKzU2NCw3IEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6OmRpc21pc3NEaWN0aW9uYXJ5TG9va3VwUGFuZWwoKQogCiAgICAgLy8gRklYTUU6IFdl
IGRvbid0IGtub3cgd2hpY2ggcGFuZWwgd2UgYXJlIGRpc21pc3NpbmcsIGl0IG1heSBub3QgZXZl
biBiZSBpbiB0aGUgY3VycmVudCBwYWdlIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzEzODc1NzY2Piku
CiAgICAgW2dldExVTG9va3VwRGVmaW5pdGlvbk1vZHVsZUNsYXNzKCkgaGlkZURlZmluaXRpb25d
OwotICAgIHNldFRleHRJbmRpY2F0b3IobmlsLCBmYWxzZSwgdHJ1ZSk7CisgICAgc2V0VGV4dElu
ZGljYXRvcihuaWwsIGZhbHNlKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzbWlzc0Fj
dGlvbk1lbnVQb3BvdmVycygpCkBAIC02OTksNyArNjk5LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0
IEludFIKIHZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKQog
ewogICAgIC8vIEhpZGUgdGhlIHRleHQgaW5kaWNhdG9yIGFuZCBhY3Rpb24gbWVudSBwb3BvdmVy
cyBpZiB0aGV5IGFyZSB2aXNpYmxlLgotICAgIHNldFRleHRJbmRpY2F0b3IobnVsbHB0ciwgZmFs
c2UsIGZhbHNlKTsKKyAgICBzZXRUZXh0SW5kaWNhdG9yKG51bGxwdHIsIGZhbHNlKTsKICAgICBk
aXNtaXNzQWN0aW9uTWVudVBvcG92ZXJzKCk7CiAKICNpZiBXS19BUElfRU5BQkxFRApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaAppbmRl
eCA3MDU5NDBlMTg5MzhhNDg2YzcyNjFkMDE0NTEyNzVkODI3YTdjOGJiLi5jOTI3ZjMzZGZiNTNh
YTExYzgxMTYzYjVhY2UxODRhYTJiM2UwZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cuaApAQCAtMjgsMTQgKzI4LDEzIEBACiAK
ICNpZiBQTEFURk9STShNQUMpCiAKLSNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgog
I2ltcG9ydCA8ZnVuY3Rpb25hbD4KICNpbXBvcnQgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2ltcG9y
dCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3Rm
L1J1bkxvb3AuaD4KIAotQGNsYXNzIFdLVGV4dEluZGljYXRvcldpbmRvd0FuaW1hdGlvbjsKK0Bj
bGFzcyBXS1RleHRJbmRpY2F0b3JWaWV3OwogQGNsYXNzIFdLVmlldzsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC00OSwyOCArNDgsMTkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFRleHRJbmRp
Y2F0b3JXaW5kb3coV0tWaWV3ICopOwogICAgIH5UZXh0SW5kaWNhdG9yV2luZG93KCk7CiAKLSAg
ICB2b2lkIHNldFRleHRJbmRpY2F0b3IoUGFzc1JlZlB0cjxUZXh0SW5kaWNhdG9yPiwgYm9vbCBm
YWRlT3V0LCBib29sIGFuaW1hdGUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gYW5pbWF0aW9uQ29t
cGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgc2V0VGV4dEluZGljYXRvcihQYXNzUmVmUHRyPFRl
eHRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gYW5pbWF0
aW9uQ29tcGxldGlvbkhhbmRsZXIpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY2xvc2VXaW5kb3co
KTsKIAogICAgIHZvaWQgc3RhcnRGYWRlT3V0VGltZXJGaXJlZCgpOwogCi0gICAgdm9pZCBmYWRl
T3V0QW5pbWF0aW9uQ2FsbGJhY2soZG91YmxlKTsKLSAgICB2b2lkIGZhZGVPdXRBbmltYXRpb25E
aWRFbmQoKTsKLQotICAgIHZvaWQgYm91bmNlQW5pbWF0aW9uQ2FsbGJhY2soZG91YmxlKTsKLSAg
ICB2b2lkIGJvdW5jZUFuaW1hdGlvbkRpZEVuZCgpOwotCiAgICAgV0tWaWV3KiBtX3drVmlldzsK
ICAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gbV90ZXh0SW5kaWNhdG9yOwogICAgIFJldGFpblB0
cjxOU1dpbmRvdz4gbV90ZXh0SW5kaWNhdG9yV2luZG93OwotCi0gICAgV0tXaW5kb3dCb3VuY2VB
bmltYXRpb25Db250ZXh0UmVmIG1fYm91bmNlQW5pbWF0aW9uQ29udGV4dDsKLSAgICBSZXRhaW5Q
dHI8V0tUZXh0SW5kaWNhdG9yV2luZG93QW5pbWF0aW9uPiBtX2JvdW5jZUFuaW1hdGlvbjsKKyAg
ICBSZXRhaW5QdHI8V0tUZXh0SW5kaWNhdG9yVmlldz4gbV90ZXh0SW5kaWNhdG9yVmlldzsKIAog
ICAgIFJ1bkxvb3A6OlRpbWVyPFRleHRJbmRpY2F0b3JXaW5kb3c+IG1fc3RhcnRGYWRlT3V0VGlt
ZXI7Ci0gICAgUmV0YWluUHRyPFdLVGV4dEluZGljYXRvcldpbmRvd0FuaW1hdGlvbj4gbV9mYWRl
T3V0QW5pbWF0aW9uOwogCiAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX2JvdW5jZUFuaW1h
dGlvbkNvbXBsZXRpb25IYW5kbGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQppbmRleCA4MmE0YmEwMGIxNjFmNGFmYTMx
MTZjNDI2YjIzMTNkODcwZWU4NjU3Li5jNjgwNmQ5OGRlMDZkMTAwYWRjNDRlMWVmMTc3NTJiYzcw
Y2VmZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRJbmRp
Y2F0b3JXaW5kb3cubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0SW5k
aWNhdG9yV2luZG93Lm1tCkBAIC0zMSw3NyArMzEsMjI1IEBACiAjaW1wb3J0ICJUZXh0SW5kaWNh
dG9yLmgiCiAjaW1wb3J0ICJXS1ZpZXcuaCIKICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgYm91bmNlQW5pbWF0aW9uRHVyYXRpb24gPSAw
LjEyOwotc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lQmVmb3JlRmFkZVN0YXJ0cyA9IGJvdW5jZUFu
aW1hdGlvbkR1cmF0aW9uICsgMC4yOwotc3RhdGljIGNvbnN0IGRvdWJsZSBmYWRlT3V0QW5pbWF0
aW9uRHVyYXRpb24gPSAwLjM7CisjaW1wb3J0IDxXZWJDb3JlL1F1YXJ0ekNvcmVTUEkuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRlbGVnYXRlLmg+CisKK2Nv
bnN0IENGVGltZUludGVydmFsIGJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uID0gMC4xMjsKK2NvbnN0
IENGVGltZUludGVydmFsIGJvdW5jZVdpdGhDcm9zc2ZhZGVBbmltYXRpb25EdXJhdGlvbiA9IDAu
MzsKK2NvbnN0IENGVGltZUludGVydmFsIHRpbWVCZWZvcmVGYWRlU3RhcnRzID0gYm91bmNlQW5p
bWF0aW9uRHVyYXRpb24gKyAwLjI7Citjb25zdCBDRlRpbWVJbnRlcnZhbCBmYWRlT3V0QW5pbWF0
aW9uRHVyYXRpb24gPSAwLjM7CisKKyNpZiBFTkFCTEUoTEVHQUNZX1RFWFRfSU5ESUNBVE9SX1NU
WUxFKQorY29uc3QgQ0dGbG9hdCBtaWRCb3VuY2VTY2FsZSA9IDEuNTsKK2NvbnN0IENHRmxvYXQg
aG9yaXpvbnRhbEJvcmRlciA9IDM7Citjb25zdCBDR0Zsb2F0IHZlcnRpY2FsQm9yZGVyID0gMTsK
K2NvbnN0IENHRmxvYXQgYm9yZGVyV2lkdGggPSAxLjA7Citjb25zdCBDR0Zsb2F0IGNvcm5lclJh
ZGl1cyA9IDM7Citjb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRYID0gMDsKK2NvbnN0IENH
RmxvYXQgZHJvcFNoYWRvd09mZnNldFkgPSAxOworY29uc3QgQ0dGbG9hdCBkcm9wU2hhZG93Qmx1
clJhZGl1cyA9IDEuNTsKKyNlbHNlCitjb25zdCBDR0Zsb2F0IG1pZEJvdW5jZVNjYWxlID0gMS4y
OworY29uc3QgQ0dGbG9hdCBob3Jpem9udGFsQm9yZGVyID0gMjsKK2NvbnN0IENHRmxvYXQgdmVy
dGljYWxCb3JkZXIgPSAxOworY29uc3QgQ0dGbG9hdCBib3JkZXJXaWR0aCA9IDA7Citjb25zdCBD
R0Zsb2F0IGNvcm5lclJhZGl1cyA9IDA7Citjb25zdCBDR0Zsb2F0IGRyb3BTaGFkb3dPZmZzZXRY
ID0gMDsKK2NvbnN0IENHRmxvYXQgZHJvcFNoYWRvd09mZnNldFkgPSA1OworY29uc3QgQ0dGbG9h
dCBkcm9wU2hhZG93Qmx1clJhZGl1cyA9IDEyOworY29uc3QgQ0dGbG9hdCByaW1TaGFkb3dCbHVy
UmFkaXVzID0gMjsKKyNlbmRpZgorCitOU1N0cmluZyAqdGV4dExheWVyS2V5ID0gQCJUZXh0TGF5
ZXIiOworTlNTdHJpbmcgKmRyb3BTaGFkb3dMYXllcktleSA9IEAiRHJvcFNoYWRvd0xheWVyIjsK
K05TU3RyaW5nICpyaW1TaGFkb3dMYXllcktleSA9IEAiUmltU2hhZG93TGF5ZXIiOwogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGludGVyZmFjZSBXS1RleHRJbmRpY2F0b3JWaWV3IDog
TlNWaWV3IHsKICAgICBSZWZQdHI8V2ViS2l0OjpUZXh0SW5kaWNhdG9yPiBfdGV4dEluZGljYXRv
cjsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2JvdW5jZUxheWVyczsKKyAgICBOU1NpemUgX21h
cmdpbjsKIH0KIAotLSAoaWQpX2luaXRXaXRoVGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJL
aXQ6OlRleHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3I7CistIChpZClpbml0V2l0aEZyYW1lOihO
U1JlY3QpZnJhbWUgdGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRleHRJbmRpY2F0
b3I+KXRleHRJbmRpY2F0b3IgbWFyZ2luOihDR1NpemUpbWFyZ2luOworCistICh2b2lkKXByZXNl
bnRXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7
CistICh2b2lkKWhpZGVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxl
dGlvbkhhbmRsZXI7CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLVGV4dEluZGljYXRvclZp
ZXcKIAotLSAoaWQpX2luaXRXaXRoVGV4dEluZGljYXRvcjooUGFzc1JlZlB0cjxXZWJLaXQ6OlRl
eHRJbmRpY2F0b3I+KXRleHRJbmRpY2F0b3IKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClm
cmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFdlYktpdDo6VGV4dEluZGljYXRvcj4pdGV4
dEluZGljYXRvciBtYXJnaW46KE5TU2l6ZSltYXJnaW4KIHsKLSAgICBpZiAoKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhGcmFtZTpOU1plcm9SZWN0XSkpCi0gICAgICAgIF90ZXh0SW5kaWNhdG9yID0g
dGV4dEluZGljYXRvcjsKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJh
bWVdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF90ZXh0SW5kaWNhdG9yID0gdGV4dElu
ZGljYXRvcjsKKyAgICBfbWFyZ2luID0gbWFyZ2luOworCisgICAgc2VsZi53YW50c0xheWVyID0g
WUVTOworICAgIHNlbGYubGF5ZXIuYW5jaG9yUG9pbnQgPSBDR1BvaW50WmVybzsKKworICAgIGJv
b2wgd2FudHNDcm9zc2ZhZGUgPSBfdGV4dEluZGljYXRvci0+ZGF0YSgpLnByZXNlbnRhdGlvblRy
YW5zaXRpb24gPT0gV2ViS2l0OjpUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpCb3VuY2VBbmRDcm9zc2ZhZGU7CisKKyAgICBGbG9hdFNpemUgY29udGVudHNJbWFnZUxvZ2lj
YWxTaXplID0gX3RleHRJbmRpY2F0b3ItPmRhdGEoKS5jb250ZW50SW1hZ2UtPnNpemUoKTsKKyAg
ICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5kYXRh
KCkuY29udGVudEltYWdlU2NhbGVGYWN0b3IpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBj
b250ZW50c0ltYWdlOworICAgIGlmICh3YW50c0Nyb3NzZmFkZSkKKyAgICAgICAgY29udGVudHNJ
bWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5kYXRhKCkuY29udGVudEltYWdlV2l0aEhpZ2hsaWdodC0+
bWFrZUNHSW1hZ2UoKTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dElu
ZGljYXRvci0+ZGF0YSgpLmNvbnRlbnRJbWFnZS0+bWFrZUNHSW1hZ2UoKTsKKworICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gYm91bmNlTGF5ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7CisKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gaGlnaGxpZ2h0
Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6MSBncmVlbjoxIGJsdWU6MCBhbHBo
YToxXS5DR0NvbG9yOworICAgIFJldGFpblB0cjxDR0NvbG9yUmVmPiByaW1TaGFkb3dDb2xvciA9
IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjAgYWxwaGE6MC4xNV0uQ0dDb2xvcjsKKyAg
ICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gZHJvcFNoYWRvd0NvbG9yID0gW05TQ29sb3IgY29sb3JX
aXRoRGV2aWNlV2hpdGU6MCBhbHBoYTowLjJdLkNHQ29sb3I7CisKKyAgICBSZXRhaW5QdHI8Q0dD
b2xvclJlZj4gYm9yZGVyQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6Ljk2IGdy
ZWVuOi45MCBibHVlOjAgYWxwaGE6MV0uQ0dDb2xvcjsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJl
Zj4gZ3JhZGllbnREYXJrQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6LjkyOSBn
cmVlbjouOCBibHVlOjAgYWxwaGE6MV0uQ0dDb2xvcjsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJl
Zj4gZ3JhZGllbnRMaWdodENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOi45NDkg
Z3JlZW46LjkzNyBibHVlOjAgYWxwaGE6MV0uQ0dDb2xvcjsKKworICAgIGZvciAoYXV0byYgdGV4
dFJlY3QgOiBfdGV4dEluZGljYXRvci0+ZGF0YSgpLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMpIHsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5jZUxheWVyUmVjdCA9IHRleHRSZWN0
OworICAgICAgICBib3VuY2VMYXllclJlY3QubW92ZShfbWFyZ2luLndpZHRoLCBfbWFyZ2luLmhl
aWdodCk7CisgICAgICAgIGJvdW5jZUxheWVyUmVjdC5pbmZsYXRlWChob3Jpem9udGFsQm9yZGVy
KTsKKyAgICAgICAgYm91bmNlTGF5ZXJSZWN0LmluZmxhdGVZKHZlcnRpY2FsQm9yZGVyKTsKKwor
ICAgICAgICBSZXRhaW5QdHI8Q0FMYXllcj4gYm91bmNlTGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXll
ciBhbGxvY10gaW5pdF0pOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0RGVsZWdhdGU6W1dlYkFj
dGlvbkRpc2FibGluZ0NBTGF5ZXJEZWxlZ2F0ZSBzaGFyZWRdXTsKKyAgICAgICAgW2JvdW5jZUxh
eWVyIHNldEZyYW1lOmJvdW5jZUxheWVyUmVjdF07CisgICAgICAgIFtib3VuY2VMYXllciBzZXRP
cGFjaXR5OjBdOworICAgICAgICBbYm91bmNlTGF5ZXJzIGFkZE9iamVjdDpib3VuY2VMYXllci5n
ZXQoKV07CisKKyAgICAgICAgRmxvYXRSZWN0IHllbGxvd0hpZ2hsaWdodFJlY3QoRmxvYXRQb2lu
dCgpLCBib3VuY2VMYXllclJlY3Quc2l6ZSgpKTsKKyAgICAgICAgLy8gRklYTUUgKDEzODg4OCk6
IElkZWFsbHkgd2Ugd291bGRuJ3QgcmVtb3ZlIHRoZSBtYXJnaW4gaW4gdGhpcyBjYXNlLCBidXQg
d2UgbmVlZCB0bworICAgICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgeWVsbG93IGhpZ2hsaWdodCBh
bmQgY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCBvdmVybGFwIHByZWNpc2VseS4KKyAgICAgICAg
aWYgKHdhbnRzQ3Jvc3NmYWRlKSB7CisgICAgICAgICAgICB5ZWxsb3dIaWdobGlnaHRSZWN0Lmlu
ZmxhdGVYKC1ob3Jpem9udGFsQm9yZGVyKTsKKyAgICAgICAgICAgIHllbGxvd0hpZ2hsaWdodFJl
Y3QuaW5mbGF0ZVkoLXZlcnRpY2FsQm9yZGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIFJldGFp
blB0cjxDQUxheWVyPiBkcm9wU2hhZG93TGF5ZXIgPSBhZG9wdE5TKFtbQ0FMYXllciBhbGxvY10g
aW5pdF0pOworICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldERlbGVnYXRlOltXZWJBY3Rpb25E
aXNhYmxpbmdDQUxheWVyRGVsZWdhdGUgc2hhcmVkXV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5
ZXIgc2V0U2hhZG93Q29sb3I6ZHJvcFNoYWRvd0NvbG9yLmdldCgpXTsKKyAgICAgICAgW2Ryb3BT
aGFkb3dMYXllciBzZXRTaGFkb3dSYWRpdXM6ZHJvcFNoYWRvd0JsdXJSYWRpdXNdOworICAgICAg
ICBbZHJvcFNoYWRvd0xheWVyIHNldFNoYWRvd09mZnNldDpDR1NpemVNYWtlKGRyb3BTaGFkb3dP
ZmZzZXRYLCBkcm9wU2hhZG93T2Zmc2V0WSldOworICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNl
dFNoYWRvd1BhdGhJc0JvdW5kczpZRVNdOworICAgICAgICBbZHJvcFNoYWRvd0xheWVyIHNldFNo
YWRvd09wYWNpdHk6MV07CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93
SGlnaGxpZ2h0UmVjdF07CisgICAgICAgIFtkcm9wU2hhZG93TGF5ZXIgc2V0Q29ybmVyUmFkaXVz
OmNvcm5lclJhZGl1c107CisgICAgICAgIFtib3VuY2VMYXllciBhZGRTdWJsYXllcjpkcm9wU2hh
ZG93TGF5ZXIuZ2V0KCldOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6ZHJvcFNoYWRv
d0xheWVyLmdldCgpIGZvcktleTpkcm9wU2hhZG93TGF5ZXJLZXldOworCisjaWYgIUVOQUJMRShM
RUdBQ1lfVEVYVF9JTkRJQ0FUT1JfU1RZTEUpCisgICAgICAgIFJldGFpblB0cjxDQUxheWVyPiBy
aW1TaGFkb3dMYXllciA9IGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IFtyaW1TaGFkb3dMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5nQ0FMYXllckRl
bGVnYXRlIHNoYXJlZF1dOworICAgICAgICBbcmltU2hhZG93TGF5ZXIgc2V0RnJhbWU6eWVsbG93
SGlnaGxpZ2h0UmVjdF07CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dDb2xvcjpy
aW1TaGFkb3dDb2xvci5nZXQoKV07CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRTaGFkb3dS
YWRpdXM6cmltU2hhZG93Qmx1clJhZGl1c107CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRT
aGFkb3dQYXRoSXNCb3VuZHM6WUVTXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRv
d09mZnNldDpDR1NpemVaZXJvXTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldFNoYWRvd09w
YWNpdHk6MV07CisgICAgICAgIFtyaW1TaGFkb3dMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGln
aHRSZWN0XTsKKyAgICAgICAgW3JpbVNoYWRvd0xheWVyIHNldENvcm5lclJhZGl1czpjb3JuZXJS
YWRpdXNdOworICAgICAgICBbYm91bmNlTGF5ZXIgYWRkU3VibGF5ZXI6cmltU2hhZG93TGF5ZXIu
Z2V0KCldOworICAgICAgICBbYm91bmNlTGF5ZXIgc2V0VmFsdWU6cmltU2hhZG93TGF5ZXIuZ2V0
KCkgZm9yS2V5OnJpbVNoYWRvd0xheWVyS2V5XTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKExFR0FD
WV9URVhUX0lORElDQVRPUl9TVFlMRSkKKyAgICAgICAgUmV0YWluUHRyPENBR3JhZGllbnRMYXll
cj4gdGV4dExheWVyID0gYWRvcHROUyhbW0NBR3JhZGllbnRMYXllciBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBbdGV4dExheWVyIHNldENvbG9yczpAWyAoaWQpZ3JhZGllbnRMaWdodENvbG9yLmdl
dCgpLCAoaWQpZ3JhZGllbnREYXJrQ29sb3IuZ2V0KCkgXV07CisjZWxzZQorICAgICAgICBSZXRh
aW5QdHI8Q0FMYXllcj4gdGV4dExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRd
KTsKKyNlbmRpZgorICAgICAgICBbdGV4dExheWVyIHNldEJhY2tncm91bmRDb2xvcjpoaWdobGln
aHRDb2xvci5nZXQoKV07CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Qm9yZGVyQ29sb3I6Ym9yZGVy
Q29sb3IuZ2V0KCldOworICAgICAgICBbdGV4dExheWVyIHNldEJvcmRlcldpZHRoOmJvcmRlcldp
ZHRoXTsKKyAgICAgICAgW3RleHRMYXllciBzZXREZWxlZ2F0ZTpbV2ViQWN0aW9uRGlzYWJsaW5n
Q0FMYXllckRlbGVnYXRlIHNoYXJlZF1dOworICAgICAgICBbdGV4dExheWVyIHNldENvbnRlbnRz
OihpZCljb250ZW50c0ltYWdlLmdldCgpXTsKKworICAgICAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
ID0gdGV4dFJlY3Q7CisgICAgICAgIGltYWdlUmVjdC5tb3ZlKF90ZXh0SW5kaWNhdG9yLT5kYXRh
KCkudGV4dEJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMubG9jYXRpb24oKSAtIF90ZXh0
SW5kaWNhdG9yLT5kYXRhKCkuc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMubG9jYXRp
b24oKSk7CisgICAgICAgIFt0ZXh0TGF5ZXIgc2V0Q29udGVudHNSZWN0OkNHUmVjdE1ha2UoaW1h
Z2VSZWN0LngoKSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS53aWR0aCgpLCBpbWFnZVJlY3Qu
eSgpIC8gY29udGVudHNJbWFnZUxvZ2ljYWxTaXplLmhlaWdodCgpLCBpbWFnZVJlY3Qud2lkdGgo
KSAvIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS53aWR0aCgpLCBpbWFnZVJlY3QuaGVpZ2h0KCkg
LyBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuaGVpZ2h0KCkpXTsKKyAgICAgICAgW3RleHRMYXll
ciBzZXRDb250ZW50c0dyYXZpdHk6a0NBR3Jhdml0eUNlbnRlcl07CisgICAgICAgIFt0ZXh0TGF5
ZXIgc2V0Q29udGVudHNTY2FsZTpfdGV4dEluZGljYXRvci0+ZGF0YSgpLmNvbnRlbnRJbWFnZVNj
YWxlRmFjdG9yXTsKKyAgICAgICAgW3RleHRMYXllciBzZXRGcmFtZTp5ZWxsb3dIaWdobGlnaHRS
ZWN0XTsKKyAgICAgICAgW3RleHRMYXllciBzZXRDb3JuZXJSYWRpdXM6Y29ybmVyUmFkaXVzXTsK
KyAgICAgICAgW2JvdW5jZUxheWVyIHNldFZhbHVlOnRleHRMYXllci5nZXQoKSBmb3JLZXk6dGV4
dExheWVyS2V5XTsKKyAgICAgICAgW2JvdW5jZUxheWVyIGFkZFN1YmxheWVyOnRleHRMYXllci5n
ZXQoKV07CisgICAgfQogCi0gICAgcmV0dXJuIHNlbGY7Ci19CisgICAgc2VsZi5sYXllci5zdWJs
YXllcnMgPSBib3VuY2VMYXllcnMuZ2V0KCk7CisgICAgX2JvdW5jZUxheWVycyA9IGJvdW5jZUxh
eWVyczsKIAotLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KHN0YXRpY19jYXN0PENHQ29udGV4dFJlZj4oW1tOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSkpOwotCi0gICAgX3RleHRJ
bmRpY2F0b3ItPmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsK
KyAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAoQk9PTClpc0ZsaXBwZWQKKy0gKHZvaWQpcHJlc2Vu
dFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgog
ewotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBXS1RleHRJbmRpY2F0
b3JXaW5kb3dBbmltYXRpb24gOiBOU0FuaW1hdGlvbjxOU0FuaW1hdGlvbkRlbGVnYXRlPiB7Ci0g
ICAgV2ViS2l0OjpUZXh0SW5kaWNhdG9yV2luZG93KiBfdGV4dEluZGljYXRvcldpbmRvdzsKLSAg
ICB2b2lkIChXZWJLaXQ6OlRleHRJbmRpY2F0b3JXaW5kb3c6OipfYW5pbWF0aW9uUHJvZ3Jlc3ND
YWxsYmFjaykoZG91YmxlIHByb2dyZXNzKTsKLSAgICB2b2lkIChXZWJLaXQ6OlRleHRJbmRpY2F0
b3JXaW5kb3c6OipfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2spKCk7Ci19Ci0KLS0gKGlkKV9pbml0
V2l0aFRleHRJbmRpY2F0b3JXaW5kb3c6KFdlYktpdDo6VGV4dEluZGljYXRvcldpbmRvdyAqKXRl
eHRJbmRpY2F0b3JXaW5kb3cgYW5pbWF0aW9uRHVyYXRpb246KENGVGltZUludGVydmFsKWR1cmF0
aW9uIGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6KHZvaWQgKFdlYktpdDo6VGV4dEluZGljYXRv
cldpbmRvdzo6KikoZG91YmxlIHByb2dyZXNzKSlhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrIGFu
aW1hdGlvbkRpZEVuZENhbGxiYWNrOih2b2lkIChXZWJLaXQ6OlRleHRJbmRpY2F0b3JXaW5kb3c6
OiopKCkpYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2s7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
S1RleHRJbmRpY2F0b3JXaW5kb3dBbmltYXRpb24KKyAgICBib29sIHdhbnRzQ3Jvc3NmYWRlID0g
X3RleHRJbmRpY2F0b3ItPmRhdGEoKS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID09IFdlYktpdDo6
VGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRl
OworICAgIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbiA9IHdhbnRzQ3Jvc3NmYWRlID8gYm91bmNl
V2l0aENyb3NzZmFkZUFuaW1hdGlvbkR1cmF0aW9uIDogYm91bmNlQW5pbWF0aW9uRHVyYXRpb247
CisgICAgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGJvdW5jZUFuaW1hdGlvbiA9IFtD
QUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAidHJhbnNmb3JtIl07Cisg
ICAgW2JvdW5jZUFuaW1hdGlvbiBzZXRWYWx1ZXM6QFsKKyAgICAgICAgW05TVmFsdWUgdmFsdWVX
aXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9ybTNESWRlbnRpdHldLAorICAgICAgICBbTlNWYWx1
ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOkNBVHJhbnNmb3JtM0RNYWtlU2NhbGUobWlkQm91bmNl
U2NhbGUsIG1pZEJvdW5jZVNjYWxlLCAxKV0sCisgICAgICAgIFtOU1ZhbHVlIHZhbHVlV2l0aENB
VHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRElkZW50aXR5XQorICAgICAgICBdXTsKKyAgICBbYm91
bmNlQW5pbWF0aW9uIHNldER1cmF0aW9uOmFuaW1hdGlvbkR1cmF0aW9uXTsKKworICAgIFJldGFp
blB0cjxDQUJhc2ljQW5pbWF0aW9uPiBjcm9zc2ZhZGVBbmltYXRpb247CisgICAgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGZhZGVTaGFkb3dJbkFuaW1hdGlvbjsKKyAgICBpZiAod2FudHND
cm9zc2ZhZGUpIHsKKyAgICAgICAgY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRp
b24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOworICAgICAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5kYXRhKCkuY29udGVu
dEltYWdlLT5tYWtlQ0dJbWFnZSgpOworICAgICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRv
VmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOworICAgICAgICBbY3Jvc3NmYWRlQW5pbWF0
aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgICAgICBbY3Jvc3NmYWRl
QW5pbWF0aW9uIHNldFJlbW92ZWRPbkNvbXBsZXRpb246Tk9dOworICAgICAgICBbY3Jvc3NmYWRl
QW5pbWF0aW9uIHNldER1cmF0aW9uOmFuaW1hdGlvbkR1cmF0aW9uXTsKKworICAgICAgICBmYWRl
U2hhZG93SW5BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0
aDpAInNoYWRvd09wYWNpdHkiXTsKKyAgICAgICAgW2ZhZGVTaGFkb3dJbkFuaW1hdGlvbiBzZXRG
cm9tVmFsdWU6QDBdOworICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFRvVmFsdWU6
QDFdOworICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxN
b2RlRm9yd2FyZHNdOworICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldFJlbW92ZWRP
bkNvbXBsZXRpb246Tk9dOworICAgICAgICBbZmFkZVNoYWRvd0luQW5pbWF0aW9uIHNldER1cmF0
aW9uOmFuaW1hdGlvbkR1cmF0aW9uXTsKKyAgICB9CiAKLS0gKGlkKV9pbml0V2l0aFRleHRJbmRp
Y2F0b3JXaW5kb3c6KFdlYktpdDo6VGV4dEluZGljYXRvcldpbmRvdyAqKXRleHRJbmRpY2F0b3JX
aW5kb3cgYW5pbWF0aW9uRHVyYXRpb246KENGVGltZUludGVydmFsKWFuaW1hdGlvbkR1cmF0aW9u
IGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6KHZvaWQgKFdlYktpdDo6VGV4dEluZGljYXRvcldp
bmRvdzo6KikoZG91YmxlIHByb2dyZXNzKSlhbmltYXRpb25Qcm9ncmVzc0NhbGxiYWNrIGFuaW1h
dGlvbkRpZEVuZENhbGxiYWNrOih2b2lkIChXZWJLaXQ6OlRleHRJbmRpY2F0b3JXaW5kb3c6Oiop
KCkpYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2sKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5p
dFdpdGhEdXJhdGlvbjphbmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlv
bkVhc2VJbk91dF0pKSB7Ci0gICAgICAgIF90ZXh0SW5kaWNhdG9yV2luZG93ID0gdGV4dEluZGlj
YXRvcldpbmRvdzsKLSAgICAgICAgX2FuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2sgPSBhbmltYXRp
b25Qcm9ncmVzc0NhbGxiYWNrOwotICAgICAgICBfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2sgPSBh
bmltYXRpb25EaWRFbmRDYWxsYmFjazsKLSAgICAgICAgW3NlbGYgc2V0RGVsZWdhdGU6c2VsZl07
Ci0gICAgICAgIFtzZWxmIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJs
b2NraW5nXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24g
c2V0Q29tcGxldGlvbkJsb2NrOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBmb3IgKENBTGF5ZXIq
IGJvdW5jZUxheWVyIGluIF9ib3VuY2VMYXllcnMuZ2V0KCkpIHsKKyAgICAgICAgW2JvdW5jZUxh
eWVyIHNldE9wYWNpdHk6MV07CisgICAgICAgIFtib3VuY2VMYXllciBhZGRBbmltYXRpb246Ym91
bmNlQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImJvdW5jZSJdOworICAgICAgICBpZiAod2FudHND
cm9zc2ZhZGUpIHsKKyAgICAgICAgICAgIFtbYm91bmNlTGF5ZXIgdmFsdWVGb3JLZXk6dGV4dExh
eWVyS2V5XSBhZGRBbmltYXRpb246Y3Jvc3NmYWRlQW5pbWF0aW9uLmdldCgpIGZvcktleTpAImNv
bnRlbnRUcmFuc2l0aW9uIl07CisgICAgICAgICAgICBbW2JvdW5jZUxheWVyIHZhbHVlRm9yS2V5
OmRyb3BTaGFkb3dMYXllcktleV0gYWRkQW5pbWF0aW9uOmZhZGVTaGFkb3dJbkFuaW1hdGlvbi5n
ZXQoKSBmb3JLZXk6QCJmYWRlU2hhZG93SW4iXTsKKyAgICAgICAgICAgIFtbYm91bmNlTGF5ZXIg
dmFsdWVGb3JLZXk6cmltU2hhZG93TGF5ZXJLZXldIGFkZEFuaW1hdGlvbjpmYWRlU2hhZG93SW5B
bmltYXRpb24uZ2V0KCkgZm9yS2V5OkAiZmFkZVNoYWRvd0luIl07CisgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuIHNlbGY7CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0KIAotLSAo
dm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jlc3MKKy0g
KHZvaWQpaGlkZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIChfdGV4dEluZGljYXRvcldpbmRvdy0+Kl9hbmltYXRpb25Qcm9ncmVz
c0NhbGxiYWNrKShwcm9ncmVzcyk7CisgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGZh
ZGVBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpAIm9w
YWNpdHkiXTsKKyAgICBbZmFkZUFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6QDFdOworICAgIFtmYWRl
QW5pbWF0aW9uIHNldFRvVmFsdWU6QDBdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2Rl
OmtDQUZpbGxNb2RlRm9yd2FyZHNdOworICAgIFtmYWRlQW5pbWF0aW9uIHNldFJlbW92ZWRPbkNv
bXBsZXRpb246Tk9dOworICAgIFtmYWRlQW5pbWF0aW9uIHNldER1cmF0aW9uOmZhZGVPdXRBbmlt
YXRpb25EdXJhdGlvbl07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJh
bnNhY3Rpb24gc2V0Q29tcGxldGlvbkJsb2NrOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAgICBbc2Vs
Zi5sYXllciBhZGRBbmltYXRpb246ZmFkZUFuaW1hdGlvbi5nZXQoKSBmb3JLZXk6QCJmYWRlT3V0
Il07CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIH0KIAotLSAodm9pZClhbmltYXRpb25E
aWRFbmQ6KE5TQW5pbWF0aW9uICopYW5pbWF0aW9uCistIChCT09MKWlzRmxpcHBlZAogewotICAg
IEFTU0VSVChhbmltYXRpb24gPT0gc2VsZik7Ci0KLSAgICAoX3RleHRJbmRpY2F0b3JXaW5kb3ct
PipfYW5pbWF0aW9uRGlkRW5kQ2FsbGJhY2spKCk7CisgICAgcmV0dXJuIFlFUzsKIH0KIAogQGVu
ZApAQCAtMTEwLDcgKzI1OCw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBUZXh0SW5kaWNhdG9y
V2luZG93OjpUZXh0SW5kaWNhdG9yV2luZG93KFdLVmlldyAqd2tWaWV3KQogICAgIDogbV93a1Zp
ZXcod2tWaWV3KQotICAgICwgbV9ib3VuY2VBbmltYXRpb25Db250ZXh0KDApCiAgICAgLCBtX3N0
YXJ0RmFkZU91dFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRleHRJbmRpY2F0b3JXaW5k
b3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQpCiB7CiB9CkBAIC0xMjAsNyArMjY3LDcgQEAgVGV4
dEluZGljYXRvcldpbmRvdzo6flRleHRJbmRpY2F0b3JXaW5kb3coKQogICAgIGNsb3NlV2luZG93
KCk7CiB9CiAKLXZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6c2V0VGV4dEluZGljYXRvcihQYXNz
UmVmUHRyPFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCwgYm9vbCBh
bmltYXRlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVy
KQordm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKFBhc3NSZWZQdHI8
VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciwgYm9vbCBmYWRlT3V0LCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+IGFuaW1hdGlvbkNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmIChtX3RleHRJ
bmRpY2F0b3IgPT0gdGV4dEluZGljYXRvcikKICAgICAgICAgcmV0dXJuOwpAQCAtMTM0LDMyICsy
ODEsMzEgQEAgdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93OjpzZXRUZXh0SW5kaWNhdG9yKFBhc3NS
ZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXQKICAgICAgICAgcmV0dXJuOwogCiAgICAg
TlNSZWN0IGNvbnRlbnRSZWN0ID0gbV90ZXh0SW5kaWNhdG9yLT5mcmFtZVJlY3QoKTsKKworICAg
IENHRmxvYXQgaG9yaXpvbnRhbE1hcmdpbiA9IHN0ZDo6bWF4KGRyb3BTaGFkb3dCbHVyUmFkaXVz
ICogMiArIGhvcml6b250YWxCb3JkZXIsIGNvbnRlbnRSZWN0LnNpemUud2lkdGggKiAyKTsKKyAg
ICBDR0Zsb2F0IHZlcnRpY2FsTWFyZ2luID0gc3RkOjptYXgoZHJvcFNoYWRvd0JsdXJSYWRpdXMg
KiAyICsgdmVydGljYWxCb3JkZXIsIGNvbnRlbnRSZWN0LnNpemUuaGVpZ2h0ICogMik7CisKKyAg
ICBjb250ZW50UmVjdCA9IE5TSW5zZXRSZWN0KGNvbnRlbnRSZWN0LCAtaG9yaXpvbnRhbE1hcmdp
biwgLXZlcnRpY2FsTWFyZ2luKTsKICAgICBOU1JlY3Qgd2luZG93RnJhbWVSZWN0ID0gTlNJbnRl
Z3JhbFJlY3QoW21fd2tWaWV3IGNvbnZlcnRSZWN0OmNvbnRlbnRSZWN0IHRvVmlldzpuaWxdKTsK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICB3aW5kb3dGcmFtZVJlY3Qu
b3JpZ2luID0gW1ttX3drVmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2luZG93RnJh
bWVSZWN0Lm9yaWdpbl07Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisgICAgd2luZG93
RnJhbWVSZWN0ID0gW1ttX3drVmlldyB3aW5kb3ddIGNvbnZlcnRSZWN0VG9TY3JlZW46d2luZG93
RnJhbWVSZWN0XTsKICAgICBOU1JlY3Qgd2luZG93Q29udGVudFJlY3QgPSBbTlNXaW5kb3cgY29u
dGVudFJlY3RGb3JGcmFtZVJlY3Q6d2luZG93RnJhbWVSZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxl
c3NXaW5kb3dNYXNrXTsKLSAgICAKKwogICAgIG1fdGV4dEluZGljYXRvcldpbmRvdyA9IGFkb3B0
TlMoW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dDb250ZW50UmVj
dCBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3Jl
QnVmZmVyZWQgZGVmZXI6Tk9dKTsKIAogICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgc2V0QmFj
a2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKICAgICBbbV90ZXh0SW5kaWNhdG9y
V2luZG93IHNldE9wYXF1ZTpOT107CiAgICAgW21fdGV4dEluZGljYXRvcldpbmRvdyBzZXRJZ25v
cmVzTW91c2VFdmVudHM6WUVTXTsKIAotICAgIFJldGFpblB0cjxXS1RleHRJbmRpY2F0b3JWaWV3
PiB0ZXh0SW5kaWNhdG9yVmlldyA9IGFkb3B0TlMoW1tXS1RleHRJbmRpY2F0b3JWaWV3IGFsbG9j
XSBfaW5pdFdpdGhUZXh0SW5kaWNhdG9yOm1fdGV4dEluZGljYXRvcl0pOwotICAgIFttX3RleHRJ
bmRpY2F0b3JXaW5kb3cgc2V0Q29udGVudFZpZXc6dGV4dEluZGljYXRvclZpZXcuZ2V0KCldOwor
ICAgIG1fdGV4dEluZGljYXRvclZpZXcgPSBhZG9wdE5TKFtbV0tUZXh0SW5kaWNhdG9yVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIFttX3RleHRJbmRpY2F0b3JXaW5k
b3cgZnJhbWVdLnNpemUud2lkdGgsIFttX3RleHRJbmRpY2F0b3JXaW5kb3cgZnJhbWVdLnNpemUu
aGVpZ2h0KSB0ZXh0SW5kaWNhdG9yOm1fdGV4dEluZGljYXRvciBtYXJnaW46Q0dTaXplTWFrZSho
b3Jpem9udGFsTWFyZ2luLCB2ZXJ0aWNhbE1hcmdpbildKTsKKyAgICBbbV90ZXh0SW5kaWNhdG9y
V2luZG93IHNldENvbnRlbnRWaWV3Om1fdGV4dEluZGljYXRvclZpZXcuZ2V0KCldOwogCiAgICAg
W1ttX3drVmlldyB3aW5kb3ddIGFkZENoaWxkV2luZG93Om1fdGV4dEluZGljYXRvcldpbmRvdy5n
ZXQoKSBvcmRlcmVkOk5TV2luZG93QWJvdmVdOwogICAgIFttX3RleHRJbmRpY2F0b3JXaW5kb3cg
c2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKIAotICAgIGlmIChhbmltYXRlKSB7Ci0gICAgICAg
IG1fYm91bmNlQW5pbWF0aW9uQ29tcGxldGlvbkhhbmRsZXIgPSBXVEY6Om1vdmUoYW5pbWF0aW9u
Q29tcGxldGlvbkhhbmRsZXIpOwotICAgICAgICAvLyBTdGFydCB0aGUgYm91bmNlIGFuaW1hdGlv
bi4KLSAgICAgICAgbV9ib3VuY2VBbmltYXRpb25Db250ZXh0ID0gV0tXaW5kb3dCb3VuY2VBbmlt
YXRpb25Db250ZXh0Q3JlYXRlKG1fdGV4dEluZGljYXRvcldpbmRvdy5nZXQoKSk7Ci0gICAgICAg
IG1fYm91bmNlQW5pbWF0aW9uID0gYWRvcHROUyhbW1dLVGV4dEluZGljYXRvcldpbmRvd0FuaW1h
dGlvbiBhbGxvY10gX2luaXRXaXRoVGV4dEluZGljYXRvcldpbmRvdzp0aGlzIGFuaW1hdGlvbkR1
cmF0aW9uOmJvdW5jZUFuaW1hdGlvbkR1cmF0aW9uCi0gICAgICAgICAgICBhbmltYXRpb25Qcm9n
cmVzc0NhbGxiYWNrOiZUZXh0SW5kaWNhdG9yV2luZG93Ojpib3VuY2VBbmltYXRpb25DYWxsYmFj
ayBhbmltYXRpb25EaWRFbmRDYWxsYmFjazomVGV4dEluZGljYXRvcldpbmRvdzo6Ym91bmNlQW5p
bWF0aW9uRGlkRW5kXSk7Ci0gICAgICAgIFttX2JvdW5jZUFuaW1hdGlvbiBzdGFydEFuaW1hdGlv
bl07CisgICAgaWYgKG1fdGV4dEluZGljYXRvci0+ZGF0YSgpLnByZXNlbnRhdGlvblRyYW5zaXRp
b24gIT0gVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSkgeworICAg
ICAgICBbbV90ZXh0SW5kaWNhdG9yVmlldyBwcmVzZW50V2l0aENvbXBsZXRpb25IYW5kbGVyOlth
bmltYXRpb25Db21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAgYW5pbWF0aW9uQ29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICAgICAgfV07CiAgICAgfQogCiAgICAgaWYgKGZhZGVPdXQpCkBA
IC0xNzMsMTkgKzMxOSw2IEBAIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3co
KQogCiAgICAgbV9zdGFydEZhZGVPdXRUaW1lci5zdG9wKCk7CiAKLSAgICBpZiAobV9mYWRlT3V0
QW5pbWF0aW9uKSB7Ci0gICAgICAgIFttX2ZhZGVPdXRBbmltYXRpb24gc3RvcEFuaW1hdGlvbl07
Ci0gICAgICAgIG1fZmFkZU91dEFuaW1hdGlvbiA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYg
KG1fYm91bmNlQW5pbWF0aW9uKSB7Ci0gICAgICAgIFttX2JvdW5jZUFuaW1hdGlvbiBzdG9wQW5p
bWF0aW9uXTsKLSAgICAgICAgbV9ib3VuY2VBbmltYXRpb24gPSBudWxscHRyOwotICAgIH0KLQot
ICAgIGlmIChtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQpCi0gICAgICAgIFdLV2luZG93Qm91bmNl
QW5pbWF0aW9uQ29udGV4dERlc3Ryb3kobV9ib3VuY2VBbmltYXRpb25Db250ZXh0KTsKLSAgICAK
ICAgICBbW21fdGV4dEluZGljYXRvcldpbmRvdyBwYXJlbnRXaW5kb3ddIHJlbW92ZUNoaWxkV2lu
ZG93Om1fdGV4dEluZGljYXRvcldpbmRvdy5nZXQoKV07CiAgICAgW21fdGV4dEluZGljYXRvcldp
bmRvdyBjbG9zZV07CiAgICAgbV90ZXh0SW5kaWNhdG9yV2luZG93ID0gbnVsbHB0cjsKQEAgLTE5
Myw0NSArMzI2LDExIEBAIHZvaWQgVGV4dEluZGljYXRvcldpbmRvdzo6Y2xvc2VXaW5kb3coKQog
CiB2b2lkIFRleHRJbmRpY2F0b3JXaW5kb3c6OnN0YXJ0RmFkZU91dFRpbWVyRmlyZWQoKQogewot
ICAgIEFTU0VSVCghbV9mYWRlT3V0QW5pbWF0aW9uKTsKLSAgICAKLSAgICBtX2ZhZGVPdXRBbmlt
YXRpb24gPSBhZG9wdE5TKFtbV0tUZXh0SW5kaWNhdG9yV2luZG93QW5pbWF0aW9uIGFsbG9jXSBf
aW5pdFdpdGhUZXh0SW5kaWNhdG9yV2luZG93OnRoaXMgYW5pbWF0aW9uRHVyYXRpb246ZmFkZU91
dEFuaW1hdGlvbkR1cmF0aW9uCi0gICAgICAgIGFuaW1hdGlvblByb2dyZXNzQ2FsbGJhY2s6JlRl
eHRJbmRpY2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRpb25DYWxsYmFjayBhbmltYXRpb25EaWRF
bmRDYWxsYmFjazomVGV4dEluZGljYXRvcldpbmRvdzo6ZmFkZU91dEFuaW1hdGlvbkRpZEVuZF0p
OwotICAgIFttX2ZhZGVPdXRBbmltYXRpb24gc3RhcnRBbmltYXRpb25dOwotfQotCi12b2lkIFRl
eHRJbmRpY2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRpb25DYWxsYmFjayhkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgQVNTRVJUKG1fZmFkZU91dEFuaW1hdGlvbik7Ci0KLSAgICBbbV90ZXh0SW5k
aWNhdG9yV2luZG93IHNldEFscGhhVmFsdWU6MS4wIC0gcHJvZ3Jlc3NdOwotfQotCi12b2lkIFRl
eHRJbmRpY2F0b3JXaW5kb3c6OmZhZGVPdXRBbmltYXRpb25EaWRFbmQoKQotewotICAgIEFTU0VS
VChtX2ZhZGVPdXRBbmltYXRpb24pOwotICAgIEFTU0VSVChtX3RleHRJbmRpY2F0b3JXaW5kb3cp
OwotCi0gICAgY2xvc2VXaW5kb3coKTsKLX0KLQotdm9pZCBUZXh0SW5kaWNhdG9yV2luZG93Ojpi
b3VuY2VBbmltYXRpb25DYWxsYmFjayhkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKG1f
Ym91bmNlQW5pbWF0aW9uKTsKLSAgICBBU1NFUlQobV9ib3VuY2VBbmltYXRpb25Db250ZXh0KTsK
LQotICAgIFdLV2luZG93Qm91bmNlQW5pbWF0aW9uU2V0QW5pbWF0aW9uUHJvZ3Jlc3MobV9ib3Vu
Y2VBbmltYXRpb25Db250ZXh0LCBwcm9ncmVzcyk7Ci19Ci0KLXZvaWQgVGV4dEluZGljYXRvcldp
bmRvdzo6Ym91bmNlQW5pbWF0aW9uRGlkRW5kKCkKLXsKLSAgICBBU1NFUlQobV9ib3VuY2VBbmlt
YXRpb24pOwotICAgIEFTU0VSVChtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQpOwotICAgIEFTU0VS
VChtX3RleHRJbmRpY2F0b3JXaW5kb3cpOwotCi0gICAgV0tXaW5kb3dCb3VuY2VBbmltYXRpb25D
b250ZXh0RGVzdHJveShtX2JvdW5jZUFuaW1hdGlvbkNvbnRleHQpOwotICAgIG1fYm91bmNlQW5p
bWF0aW9uQ29udGV4dCA9IDA7Ci0gICAgbV9ib3VuY2VBbmltYXRpb25Db21wbGV0aW9uSGFuZGxl
cigpOworICAgIFJldGFpblB0cjxOU1dpbmRvdz4gaW5kaWNhdG9yV2luZG93ID0gbV90ZXh0SW5k
aWNhdG9yV2luZG93OworICAgIFttX3RleHRJbmRpY2F0b3JWaWV3IGhpZGVXaXRoQ29tcGxldGlv
bkhhbmRsZXI6W2luZGljYXRvcldpbmRvd10geworICAgICAgICBbW2luZGljYXRvcldpbmRvdyBw
YXJlbnRXaW5kb3ddIHJlbW92ZUNoaWxkV2luZG93OmluZGljYXRvcldpbmRvdy5nZXQoKV07Cisg
ICAgICAgIFtpbmRpY2F0b3JXaW5kb3cgY2xvc2VdOworICAgIH1dOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tB
Y3Rpb25NZW51Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tB
Y3Rpb25NZW51Q29udHJvbGxlci5tbQppbmRleCAwMDY0YmVmODJlYjRkMGEzNjkzZmYxYzgwNjJk
OWJiZWI4NGEwYzRiLi4wYWFmYzc5ZWEyZjc3MWU0OGEwMmIxYjk4YzRiZTlhYWM5Y2RmZjRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRy
b2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XS0FjdGlvbk1lbnVD
b250cm9sbGVyLm1tCkBAIC0yNzMsNyArMjczLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKF9oaXRUZXN0UmVzdWx0LmRldGVjdGVkRGF0YVRl
eHRJbmRpY2F0b3IpIHsKLSAgICAgICAgX3BhZ2UtPnNldFRleHRJbmRpY2F0b3IoX2hpdFRlc3RS
ZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvci0+ZGF0YSgpLCBmYWxzZSwgdHJ1ZSk7Cisg
ICAgICAgIF9wYWdlLT5zZXRUZXh0SW5kaWNhdG9yKF9oaXRUZXN0UmVzdWx0LmRldGVjdGVkRGF0
YVRleHRJbmRpY2F0b3ItPmRhdGEoKSwgZmFsc2UpOwogICAgICAgICBfaXNTaG93aW5nVGV4dElu
ZGljYXRvciA9IFlFUzsKICAgICB9CiB9CkBAIC0yODMsNyArMjgzLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKICAgICBpZiAoIV9pc1Nob3dpbmdUZXh0SW5kaWNhdG9yKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBfcGFnZS0+Y2xlYXJUZXh0SW5kaWNhdG9yKGZhbHNlLCB0cnVlKTsKKyAg
ICBfcGFnZS0+Y2xlYXJUZXh0SW5kaWNhdG9yKCk7CiAgICAgX2lzU2hvd2luZ1RleHRJbmRpY2F0
b3IgPSBOTzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDb250ZXh0TWVudUNsaWVudE1hYy5t
bQppbmRleCBjYWQ1ZTEyMTExYzMyMGMwNjkwZTc0NWM0ZmVlZjM0OGQzZGI4ZjliLi4wYjBkYzNh
NGNjMGM1OTc3NGJiOTZkMDFmODFkZWRmYTY1MTg0MjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJDb250ZXh0TWVudUNsaWVudE1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShD
T05URVhUX01FTlVTKQogCiAjaW1wb3J0ICJEaWN0aW9uYXJ5UG9wdXBJbmZvLmgiCisjaW1wb3J0
ICJUZXh0SW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNp
bXBvcnQgIldlYlBhZ2UuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCkBAIC00
Myw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkNvbnRleHRNZW51Q2xp
ZW50Ojpsb29rVXBJbkRpY3Rpb25hcnkoRnJhbWUqIGZyYW1lKQogewotICAgIG1fcGFnZS0+cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oZnJhbWUsIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSk7CisgICAgbV9wYWdlLT5wZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNl
bGVjdGlvbihmcmFtZSwgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBUZXh0SW5kaWNh
dG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUpOwogfQogCiBi
b29sIFdlYkNvbnRleHRNZW51Q2xpZW50Ojppc1NwZWFraW5nKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDAzOTFl
MGM2MTk2YWZmZDU4ZDQwNjVhOTgwZjhlMzZiMzIyMjI5MDcuLjFlNjQyYzI0OTk1ZjM3Y2QyYWRk
M2NjOWNmMWQyYjBmMDhhMGFkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMzE0LDEyICszMTQsMTIgQEAgdm9p
ZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRVSSgpCiAjaWYgIVBMQVRGT1JNKElPUykKIGJvb2wg
RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IoRnJhbWUmIHNlbGVjdGVkRnJhbWUs
IGJvb2wgaXNTaG93aW5nT3ZlcmxheSwgYm9vbCBzaG91bGRBbmltYXRlKQogewotICAgIFJlZlB0
cjxUZXh0SW5kaWNhdG9yPiBpbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2Vs
ZWN0aW9uSW5GcmFtZSgqV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoc2VsZWN0ZWRGcmFtZSkpOwor
ICAgIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBpbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoU2VsZWN0aW9uSW5GcmFtZSgqV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoc2VsZWN0ZWRG
cmFtZSksIHNob3VsZEFuaW1hdGUgPyBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0
aW9uOjpCb3VuY2UgOiBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25l
KTsKICAgICBpZiAoIWluZGljYXRvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9m
aW5kSW5kaWNhdG9yUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoaW5kaWNhdG9yLT5zZWxlY3Rpb25S
ZWN0SW5XaW5kb3dDb29yZGluYXRlcygpKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6U2V0VGV4dEluZGljYXRvcihpbmRpY2F0b3ItPmRhdGEoKSwgIWlzU2hv
d2luZ092ZXJsYXksIHNob3VsZEFuaW1hdGUpKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2V0VGV4dEluZGljYXRvcihpbmRpY2F0b3ItPmRhdGEoKSwgIWlz
U2hvd2luZ092ZXJsYXkpKTsKICAgICBtX2lzU2hvd2luZ0ZpbmRJbmRpY2F0b3IgPSB0cnVlOwog
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBGaW5kQ29udHJvbGxl
cjo6aGlkZUZpbmRJbmRpY2F0b3IoKQogICAgIGlmICghbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9y
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Q2xlYXJUZXh0SW5kaWNhdG9yKGZhbHNlLCB0cnVlKSk7CisgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNsZWFyVGV4dEluZGljYXRvcigpKTsKICAg
ICBtX2lzU2hvd2luZ0ZpbmRJbmRpY2F0b3IgPSBmYWxzZTsKICAgICBtX2ZvdW5kU3RyaW5nTWF0
Y2hJbmRleCA9IC0xOwogICAgIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAwZmZiZmRjMTg5ZWM4YjQwZDIy
Njg3NWIzN2Q4NzQzMTU5MjU4ZGFmLi40MmUyYjk1MmU3MTM3NmRmNmE5ZTQ5YmFhNzAwMmM3Njkx
YTM4OTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
QEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJTYW5kYm94
RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGV4
dEluZGljYXRvci5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRGljdGF0aW9uQWx0ZXJuYXRpdmUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0RyYWdEYXRhLmg+CkBAIC02NjQsNyArNjY1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc3BlYWsoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzdG9wU3BlYWtpbmcoKTsKIAotICAg
IHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oV2ViQ29yZTo6RnJhbWUq
LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgdm9pZCBwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24mLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9u
KTsKICNlbmRpZgogCiAgICAgYm9vbCBpc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwpAQCAt
OTc3LDcgKzk3OCw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpOwogICAgIHZvaWQgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24o
KTsKLSAgICB2b2lkIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoV2ViQ29yZTo6RnJh
bWUqLCBXZWJDb3JlOjpSYW5nZSYsIE5TRGljdGlvbmFyeSAqb3B0aW9ucyk7CisgICAgdm9pZCBw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6
UmFuZ2UmLCBOU0RpY3Rpb25hcnkgKm9wdGlvbnMsIFRleHRJbmRpY2F0b3I6OlByZXNlbnRhdGlv
blRyYW5zaXRpb24pOwogCiAgICAgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB3aW5kb3dGcmFtZUluVW5mbGlwcGVkU2NyZWVuQ29vcmRp
bmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGlu
YXRlcywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYWNjZXNzaWJpbGl0eVZpZXdDb29yZGlu
YXRlcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQppbmRleCAwOGMyYmZhNjBjNzg0ZmI0YjdmOTBmNzQwOWM3MTY4MzJkNTA1
OWJmLi41YTY5NmExYzU5MzkwNmUxMDU3ZWRjOWFhOTljNmExNzVkM2VhYTFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBA
IC00OTQsMjQgKzQ5NCwyNCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
QXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBvaW50KQogICAgIGlmICghcmFuZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2Uo
ZnJhbWUsICpyYW5nZSwgb3B0aW9ucyk7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JS
YW5nZShmcmFtZSwgKnJhbmdlLCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpCb3VuY2UpOwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5
TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVj
dGlvbihGcmFtZSogZnJhbWUsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgVGV4
dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9u
KQogewogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGVkUmFuZ2UgPSByYW5nZUZvckRpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oc2Vs
ZWN0aW9uLCAmb3B0aW9ucyk7CiAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCi0gICAgICAgIHBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoZnJhbWUsICpzZWxlY3RlZFJhbmdlLCBvcHRpb25z
KTsKKyAgICAgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgKnNlbGVj
dGVkUmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwogfQogCiB2b2lkIFdl
YlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0aW9uKCkKIHsKICAg
ICBGcmFtZSogZnJhbWUgPSAmbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihmcmFtZSwg
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEZvclNlbGVjdGlvbihmcmFtZSwgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBU
ZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2VBbmRDcm9zc2ZhZGUp
OwogfQogCi12b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoRnJh
bWUqIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSAqb3B0aW9ucykKK3ZvaWQgV2Vi
UGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZShGcmFtZSogZnJhbWUsIFJhbmdl
JiByYW5nZSwgTlNEaWN0aW9uYXJ5ICpvcHRpb25zLCBUZXh0SW5kaWNhdG9yOjpQcmVzZW50YXRp
b25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCiB7CiAgICAgaWYgKHJhbmdlLnRl
eHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU0
OCw3ICs1NDgsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFu
Z2UoRnJhbWUqIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIE5TRGljdAogICAgICAgICBbc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5n
ZTpyYW5nZV07CiAgICAgfV07CiAKLSAgICBSZWZQdHI8VGV4dEluZGljYXRvcj4gdGV4dEluZGlj
YXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSk7CisgICAgUmVmUHRy
PFRleHRJbmRpY2F0b3I+IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRo
UmFuZ2UocmFuZ2UsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwogICAgIGlmICghdGV4dEluZGlj
YXRvcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDQwLDcgKzEwNDAsNyBAQCB2b2lkIFdlYlBh
Z2U6OnBlcmZvcm1BY3Rpb25NZW51SGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2lu
dCBsb2NhdGlvbkluVgogICAgICAgICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gudW5pdGUo
ZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSkp
OwogCiAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSBk
ZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5kZXRlY3Rl
ZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWlu
UmVzdWx0UmFuZ2UpOworICAgICAgICBhY3Rpb25NZW51UmVzdWx0LmRldGVjdGVkRGF0YVRleHRJ
bmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKm1haW5SZXN1bHRSYW5n
ZSwgVGV4dEluZGljYXRvcjo6UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3Nm
YWRlKTsKICAgICAgICAgYWN0aW9uTWVudVJlc3VsdC5kZXRlY3RlZERhdGFPcmlnaW5hdGluZ1Bh
Z2VPdmVybGF5ID0gb3ZlcmxheS0+cGFnZU92ZXJsYXlJRCgpOwogICAgICAgICBtX2xhc3RBY3Rp
b25NZW51UmFuZ2VGb3JTZWxlY3Rpb24gPSBtYWluUmVzdWx0UmFuZ2U7CiAKQEAgLTEwNTQsNyAr
MTA1NCw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0QXRMb2NhdGlv
bihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uSW5WCiAgICAgICAgIGFjdGlvbk1lbnVSZXN1
bHQuYWN0aW9uQ29udGV4dCA9IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0
UmVzdWx0KGhpdFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERh
dGFSYW5nZSk7CiAgICAgICAgIGlmIChhY3Rpb25NZW51UmVzdWx0LmFjdGlvbkNvbnRleHQgJiYg
ZGV0ZWN0ZWREYXRhUmFuZ2UpIHsKICAgICAgICAgICAgIGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0
ZWREYXRhQm91bmRpbmdCb3ggPSBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgICAg
IGFjdGlvbk1lbnVSZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0
b3I6OmNyZWF0ZVdpdGhSYW5nZSgqZGV0ZWN0ZWREYXRhUmFuZ2UpOworICAgICAgICAgICAgYWN0
aW9uTWVudVJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6
Y3JlYXRlV2l0aFJhbmdlKCpkZXRlY3RlZERhdGFSYW5nZSwgVGV4dEluZGljYXRvcjo6UHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlQW5kQ3Jvc3NmYWRlKTsKICAgICAgICAgICAgIG1fbGFz
dEFjdGlvbk1lbnVSYW5nZUZvclNlbGVjdGlvbiA9IGRldGVjdGVkRGF0YVJhbmdlOwogICAgICAg
ICB9CiAgICAgfQo=
</data>
<flag name="review"
          id="266776"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>