<?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>152503</bug_id>
          
          <creation_ts>2015-12-22 08:07:44 -0800</creation_ts>
          <short_desc>[JSC] Get the JavaScriptCore framework to build on ARM64 with B3 enabled</short_desc>
          <delta_ts>2015-12-27 06:36:37 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1150887</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-22 08:07:44 -0800</bug_when>
    <thetext>[JSC] Get the JavaScriptCore framework to build on ARM64 with B3 enabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150888</commentid>
    <comment_count>1</comment_count>
      <attachid>267786</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-22 08:13:36 -0800</bug_when>
    <thetext>Created attachment 267786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150889</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-22 08:14:29 -0800</bug_when>
    <thetext>Next: Div, Mod, testing, and some codegen is shit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150894</commentid>
    <comment_count>3</comment_count>
      <attachid>267786</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-22 08:56:41 -0800</bug_when>
    <thetext>Comment on attachment 267786
Patch

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

Is the plan to avoid using the scratch registers on arm right from the start?

Anyway this is the right direction. If the X86Registers change is easy then it would be cool to do it in this patch. Otherwise go ahead and land anyway, I can try to clean that up during my shift.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:689
&gt; +#if CPU(X86)

It would be nice to avoid #if&apos;s in the instruction selector. Usually we say &quot;if (isX86())&quot;.  It appears that the only reason for #if is the fact that you need it to say &quot;ecx&quot;. How about making X86Assembler declare X86Registers even when !CPU(X86)?  That would be a very useful change because it would let us use normal control flow in more places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150905</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-22 09:45:14 -0800</bug_when>
    <thetext>I guess you can&apos;t put X86Registers outside the #if since that won&apos;t make it the canonical RegisterID type. 

I still think we should avoid #if&apos;s. They don&apos;t scale. We could do that here by having static methods in Tmp for all of the platform registers we need to access, like ecx, eax, and edx on x86 and zr and lr on arm. You don&apos;t have to do it in this patch, but what do you think of this direction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150919</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-22 11:10:45 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I guess you can&apos;t put X86Registers outside the #if since that won&apos;t make it
&gt; the canonical RegisterID type. 
&gt; 
&gt; I still think we should avoid #if&apos;s. They don&apos;t scale. We could do that here
&gt; by having static methods in Tmp for all of the platform registers we need to
&gt; access, like ecx, eax, and edx on x86 and zr and lr on arm. You don&apos;t have
&gt; to do it in this patch, but what do you think of this direction?

I am very annoyed with those #ifdef myself. :(

I don&apos;t have a problem with the static Tmp idea but I am not sure that will lead to a better design.

If we want to be as good as LLVM, we&apos;ll have to support all the platform specific goodness available. Having platform specific lowering helper seems like a way to do that. For Div and Shift, it would work quite well to have separate functions with a different implementation for ARM64 and x86. I am not sure about more complicated cases like the full Lea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150921</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-22 11:20:08 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; I guess you can&apos;t put X86Registers outside the #if since that won&apos;t make it
&gt; &gt; the canonical RegisterID type. 
&gt; &gt; 
&gt; &gt; I still think we should avoid #if&apos;s. They don&apos;t scale. We could do that here
&gt; &gt; by having static methods in Tmp for all of the platform registers we need to
&gt; &gt; access, like ecx, eax, and edx on x86 and zr and lr on arm. You don&apos;t have
&gt; &gt; to do it in this patch, but what do you think of this direction?
&gt; 
&gt; I am very annoyed with those #ifdef myself. :(
&gt; 
&gt; I don&apos;t have a problem with the static Tmp idea but I am not sure that will
&gt; lead to a better design.
&gt; 
&gt; If we want to be as good as LLVM, we&apos;ll have to support all the platform
&gt; specific goodness available. Having platform specific lowering helper seems
&gt; like a way to do that. For Div and Shift, it would work quite well to have
&gt; separate functions with a different implementation for ARM64 and x86. I am
&gt; not sure about more complicated cases like the full Lea.

I&apos;m all for platform-specific lowering.  I just want it to be guarded with &quot;if&quot; and not &quot;#if&quot;.  The only reason why we can&apos;t do it is X86Registers.  In all other regards, we&apos;re already in good shape: Air already declares all opcodes on all architectures, so X86Div is visible on ARM - it just always returns false for isValidForm, and the instruction selector can avoid using it by checking if isX86().

For Lea, it&apos;s not actually a problem of Lea but a problem of Index.  ARM has a Lea instruction, they just call it &quot;add&quot;.  It supports all of the forms of a load instruction.  That means that it can do what we call Addr, though with a smaller available offset, and it can do what we call Index, though with the offset constrained to zero.  I believe we want to teach the Air validater that Arg::imm, Arg::addr, and Arg::index may have target-specific constraints, and the validater can reject Arg&apos;s that don&apos;t obey those constraints.  We could take this further:

- Arg can have an isValidForm() method that usually returns true, but will return false if Arg::imm is out of range for the target&apos;s immediate format, or if Arg::addr has an offset that is out of range for the address offset immediate on the target, or if Arg::index has a non-zero offset on ARM.

- Inst::isValidForm() could be made to call Arg::isValidForm() on all of its arguments.

- The standalone isValidForm() will not be able to validate the Arg, since it only gets a Arg::Kind, but the instruction selector could know to call Arg::isValidForm() on its imms and addrs.

As for registers, here are two idioms for X86Registers that might work:

- Tmp::x86EAX(), Tmp::x86ECX(), and Tmp::x86EDX() as a way of getting those registers.

- Add a namespace called x86 to Air, so we can say Air::x86::eax() or just x86::eax().

In either naming scheme, you get the registers using a method call so that the method can UNREACHABLE_FOR_PLATFORM() if !x86.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1150922</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-22 11:24:40 -0800</bug_when>
    <thetext>But anyway, LGTM to land.  Better get it in the tree, and then we can figure it out.  It&apos;s not the end of the world if we live with these #ifs for a short while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151053</commentid>
    <comment_count>8</comment_count>
      <attachid>267786</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-23 03:53:04 -0800</bug_when>
    <thetext>Comment on attachment 267786
Patch

Clearing flags on attachment: 267786

Committed r194388: &lt;http://trac.webkit.org/changeset/194388&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151054</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-23 03:53:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151333</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-12-25 09:45:43 -0800</bug_when>
    <thetext>This seems to have broken tests on Windows. Can one of you please take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151413</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-27 06:36:37 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; This seems to have broken tests on Windows. Can one of you please take a
&gt; look?

That code does not run on Windows. Can you give more detail?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267786</attachid>
            <date>2015-12-22 08:13:36 -0800</date>
            <delta_ts>2015-12-23 03:53:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152503-20151222171258.patch</filename>
            <type>text/plain</type>
            <size>32783</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0MzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MGE5ZGZmYWUzYTllYWFkNTU0MGNjZTg4ZjAzNjdkYmRmYzNlNTE5Li4wZTdmYjMzOTAzYTliNDA1
MWQxZDQ1M2ExOGM5YzQ3YmNhZTZkYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OSBAQAorMjAxNS0xMi0yMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBHZXQgdGhlIEphdmFTY3JpcHRDb3JlIGZyYW1ld29yayB0
byBidWlsZCBvbiBBUk02NCB3aXRoIEIzIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IGlzIG5vdCB3b3JraW5nIGJ1dCBpdCBidWlsZHMu
CisKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6
QVJNNjRBc3NlbWJsZXI6OnZhbmQpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6dmVj
dG9yRGF0YVByb2Nlc3NpbmcyU291cmNlKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphZGQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFkZDY0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6Y291bnRMZWFkaW5nWmVyb3M2NCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om5vdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6bm90NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp6
ZXJvRXh0ZW5kMTZUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c2ln
bkV4dGVuZDE2VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Onplcm9F
eHRlbmQ4VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnNpZ25FeHRl
bmQ4VG8zMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFkZEZsb2F0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6Y2VpbEZsb2F0KToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk02NDo6YnJhbmNoRmxvYXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTTY0OjpkaXZGbG9hdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
NjQ6Om1vdmVaZXJvVG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
Ojptb3ZlRmxvYXRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bW92
ZTMyVG9GbG9hdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1vdmVDb25k
aXRpb25hbGx5RG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bW92
ZUNvbmRpdGlvbmFsbHlGbG9hdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6
Om1vdmVDb25kaXRpb25hbGx5QWZ0ZXJGbG9hdGluZ1BvaW50Q29tcGFyZSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om11bEZsb2F0KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk02NDo6YW5kRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6YW5kRmxvYXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzcXJ0
RmxvYXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdWJGbG9hdCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnNpZ25FeHRlbmQzMlRvUHRyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bW92ZUNvbmRpdGlvbmFsbHkzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1vdmVDb25kaXRpb25hbGx5NjQpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojptb3ZlQ29uZGl0aW9uYWxseVRlc3Qz
Mik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1vdmVDb25kaXRpb25hbGx5
VGVzdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dGVzdDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c2V0Q2FycnkpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpqdW1wQWZ0ZXJGbG9hdGluZ1BvaW50Q29tcGFyZSk6Cisg
ICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Lmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Ojptb3ZlRG91YmxlVG9JbnRzKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJYODY6Om1vdmVJbnRzVG9Eb3VibGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbjo6bW92ZTMyVG9GbG9hdCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uOjptb3ZlRmxvYXRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21t
b246Om1vdmVJbnQzMlRvUGFja2VkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJYODZDb21tb246Om1vdmVQYWNrZWRUb0ludDMyKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
My9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjph
cHBlbmRTaGlmdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2VyKToK
KyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNYODZEaXZIZWxwZXJWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjplbWl0RnVuY3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZyYW1lKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0RnVuY3Rpb25FcGlsb2d1ZSk6CisgICAgICAg
ICogaml0L0ZQUkluZm8uaDoKKyAgICAgICAgKEpTQzo6RlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lz
dGVyKToKKwogMjAxNS0xMi0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEIzLT5BaXIgbG93ZXJpbmcgaW5jb3JyZWN0bHkgY29weS1wcm9wYWdhdGVzIG92ZXIg
WkV4dDMyJ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
NjRBc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3Nl
bWJsZXIuaAppbmRleCA3MzBiNWFhYWQ0ZjBhOGIxYTYyYjc2NTQwOWUzMmJjYTI1MjUzZDY5Li41
NTRiYTk3ZmMxMzg0ZWE0NjU3NmVhMzk3Y2FlYjQ1YjlhYWQyN2M3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCkBAIC0zOCw2ICszOCw3
IEBACiAjZGVmaW5lIERBVEFTSVpFX09GKGRhdGFzaXplKSAoKGRhdGFzaXplID09IDY0KSA/IERh
dGFzaXplXzY0IDogRGF0YXNpemVfMzIpCiAjZGVmaW5lIE1FTU9QU0laRV9PRihkYXRhc2l6ZSkg
KChkYXRhc2l6ZSA9PSA4IHx8IGRhdGFzaXplID09IDEyOCkgPyBNZW1PcFNpemVfOF9vcl8xMjgg
OiAoZGF0YXNpemUgPT0gMTYpID8gTWVtT3BTaXplXzE2IDogKGRhdGFzaXplID09IDMyKSA/IE1l
bU9wU2l6ZV8zMiA6IE1lbU9wU2l6ZV82NCkKICNkZWZpbmUgQ0hFQ0tfREFUQVNJWkUoKSBDSEVD
S19EQVRBU0laRV9PRihkYXRhc2l6ZSkKKyNkZWZpbmUgQ0hFQ0tfVkVDVE9SX0RBVEFTSVpFKCkg
QVNTRVJUKGRhdGFzaXplID09IDY0IHx8IGRhdGFzaXplID09IDEyOCkKICNkZWZpbmUgREFUQVNJ
WkUgREFUQVNJWkVfT0YoZGF0YXNpemUpCiAjZGVmaW5lIE1FTU9QU0laRSBNRU1PUFNJWkVfT0Yo
ZGF0YXNpemUpCiAjZGVmaW5lIENIRUNLX0ZQX01FTU9QX0RBVEFTSVpFKCkgQVNTRVJUKGRhdGFz
aXplID09IDggfHwgZGF0YXNpemUgPT0gMTYgfHwgZGF0YXNpemUgPT0gMzIgfHwgZGF0YXNpemUg
PT0gNjQgfHwgZGF0YXNpemUgPT0gMTI4KQpAQCAtODYxLDYgKzg2MiwxMCBAQCBwcml2YXRlOgog
ICAgICAgICBGUERhdGFPcF9GTk1VTAogICAgIH07CiAKKyAgICBlbnVtIFNJTUQzU2FtZSB7Cisg
ICAgICAgIFNJTURfTG9naWNhbE9wX0FORCA9IDB4MDMKKyAgICB9OworCiAgICAgZW51bSBGUElu
dENvbnZPcCB7CiAgICAgICAgIEZQSW50Q29udk9wX0ZDVlROUyA9IDB4MDAsCiAgICAgICAgIEZQ
SW50Q29udk9wX0ZDVlROVSA9IDB4MDEsCkBAIC0yNDE4LDYgKzI0MjMsMTMgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPGludCBkYXRhc2l6ZT4KKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdmFuZChGUFJlZ2lzdGVySUQgdmQsIEZQUmVnaXN0ZXJJRCB2biwgRlBSZWdpc3RlcklEIHZt
KQorICAgIHsKKyAgICAgICAgQ0hFQ0tfVkVDVE9SX0RBVEFTSVpFKCk7CisgICAgICAgIGluc24o
dmVjdG9yRGF0YVByb2Nlc3NpbmcyU291cmNlKFNJTURfTG9naWNhbE9wX0FORCwgdm0sIHZuLCB2
ZCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPGludCBkYXRhc2l6ZT4KICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgZnJpbnRhKEZQUmVnaXN0ZXJJRCB2ZCwgRlBSZWdpc3RlcklEIHZuKQogICAgIHsK
ICAgICAgICAgQ0hFQ0tfREFUQVNJWkUoKTsKQEAgLTM0NzMsNiArMzQ4NSwxOCBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gKDB4MWUyMDA4MDAgfCBNIDw8IDMxIHwgUyA8PCAyOSB8IHR5cGUg
PDwgMjIgfCBybSA8PCAxNiB8IG9wY29kZSA8PCAxMiB8IHJuIDw8IDUgfCByZCk7CiAgICAgfQog
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgaW50IHZlY3RvckRhdGFQcm9jZXNzaW5nMlNvdXJj
ZShTSU1EM1NhbWUgb3Bjb2RlLCB1bnNpZ25lZCBzaXplLCBGUFJlZ2lzdGVySUQgdm0sIEZQUmVn
aXN0ZXJJRCB2biwgRlBSZWdpc3RlcklEIHZkKQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IFEg
PSAwOworICAgICAgICByZXR1cm4gKDB4ZTIwMWMwMCB8IFEgPDwgMzAgfCBzaXplIDw8IDIyIHwg
dm0gPDwgMTYgfCBvcGNvZGUgPDwgMTEgfCB2biA8PCA1IHwgdmQpOworICAgIH0KKworICAgIEFM
V0FZU19JTkxJTkUgc3RhdGljIGludCB2ZWN0b3JEYXRhUHJvY2Vzc2luZzJTb3VyY2UoU0lNRDNT
YW1lIG9wY29kZSwgRlBSZWdpc3RlcklEIHZtLCBGUFJlZ2lzdGVySUQgdm4sIEZQUmVnaXN0ZXJJ
RCB2ZCkKKyAgICB7CisgICAgICAgIHJldHVybiB2ZWN0b3JEYXRhUHJvY2Vzc2luZzJTb3VyY2Uo
b3Bjb2RlLCAwLCB2bSwgdm4sIHZkKTsKKyAgICB9CisKKwogICAgIC8vICdvMScgbWVhbnMgbmVn
YXRlCiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgaW50IGZsb2F0aW5nUG9pbnREYXRhUHJvY2Vz
c2luZzNTb3VyY2UoRGF0YXNpemUgdHlwZSwgYm9vbCBvMSwgRlBSZWdpc3RlcklEIHJtLCBBZGRP
cCBvMiwgRlBSZWdpc3RlcklEIHJhLCBGUFJlZ2lzdGVySUQgcm4sIEZQUmVnaXN0ZXJJRCByZCkK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oCmluZGV4IGVmMGVmZDEwNWJhZDA2YzYxNGE4ZDMxNTQ2YTVmNzAxYzY3
OTQ4OGMuLjZkMzFhMWI5MDBkNTFiMzhhM2ZlYzBkMzRjYzg0M2U3N2ZhZDAxNzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oCkBAIC0xMzQsNiArMTM0LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIEludGVnZXIgb3BlcmF0
aW9uczoKIAorICAgIHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBhLCBSZWdpc3RlcklEIGIsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChhICE9IEFSTTY0UmVnaXN0ZXJzOjpz
cCAmJiBiICE9IEFSTTY0UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZDwz
Mj4oZGVzdCwgYSwgYik7CisgICAgfQorCiAgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNyYywg
UmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDMyPihkZXN0
LCBkZXN0LCBzcmMpOwpAQCAtMjEzLDYgKzIxOSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGFkZDMy
KGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgYWRkNjQoUmVnaXN0
ZXJJRCBhLCBSZWdpc3RlcklEIGIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChhICE9IEFSTTY0UmVnaXN0ZXJzOjpzcCB8fCBiICE9IEFSTTY0UmVnaXN0ZXJzOjpzcCk7
CisgICAgICAgIGlmIChiID09IEFSTTY0UmVnaXN0ZXJzOjpzcCkKKyAgICAgICAgICAgIHN0ZDo6
c3dhcChhLCBiKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihkZXN0LCBhLCBiKTsKKyAg
ICB9CisKICAgICB2b2lkIGFkZDY0KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBpZiAoc3JjID09IEFSTTY0UmVnaXN0ZXJzOjpzcCkKQEAgLTQwOCw2ICs0
MjIsMTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbHo8MzI+KGRlc3QsIHNyYyk7
CiAgICAgfQogCisgICAgdm9pZCBjb3VudExlYWRpbmdaZXJvczY0KFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbHo8NjQ+KGRlc3Qs
IHNyYyk7CisgICAgfQorCiAgICAgdm9pZCBsc2hpZnQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBzaGlmdEFtb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3Nl
bWJsZXIubHNsPDMyPihkZXN0LCBzcmMsIHNoaWZ0QW1vdW50KTsKQEAgLTgxMyw2ICs4MzIsMTUg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBub3QzMihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXZuPDMy
PihkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgbm90NjQoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm12bjw2ND4oZGVzdCwg
c3JjKTsKKyAgICB9CiAKICAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnM6CiAKQEAgLTk2
Myw2ICs5OTEsMTYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5sZHJzaDwzMj4oZGVz
dCwgYWRkcmVzcy5iYXNlLCBtZW1vcnlUZW1wUmVnaXN0ZXIpOwogICAgIH0KIAorICAgIHZvaWQg
emVyb0V4dGVuZDE2VG8zMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIudXh0aDw2ND4oZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2
b2lkIHNpZ25FeHRlbmQxNlRvMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnN4dGg8NjQ+KGRlc3QsIHNyYyk7CisgICAgfQorCiAg
ICAgdm9pZCBsb2FkOChJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgaWYgKHRyeUxvYWRXaXRoT2Zmc2V0PDg+KGRlc3QsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5vZmZzZXQpKQpAQCAtMTAwNCw2ICsxMDQyLDE2IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9hc3NlbWJsZXIubGRyc2I8MzI+KGRlc3QsIGFkZHJlc3MuYmFzZSwgbWVtb3J5VGVtcFJl
Z2lzdGVyKTsKICAgICB9CiAKKyAgICB2b2lkIHplcm9FeHRlbmQ4VG8zMihSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIudXh0Yjw2ND4o
ZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHNpZ25FeHRlbmQ4VG8zMihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3h0Yjw2
ND4oZGVzdCwgc3JjKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMs
IEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgaWYgKHRyeVN0b3JlV2l0
aE9mZnNldDw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KSkKQEAgLTEyMzAs
MTEgKzEyNzgsMjEgQEAgcHVibGljOgogICAgICAgICBhZGREb3VibGUoZnBUZW1wUmVnaXN0ZXIs
IGRlc3QpOwogICAgIH0KIAorICAgIHZvaWQgYWRkRmxvYXQoRlBSZWdpc3RlcklEIG9wMSwgRlBS
ZWdpc3RlcklEIG9wMiwgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5mYWRkPDMyPihkZXN0LCBvcDEsIG9wMik7CisgICAgfQorCiAgICAgdm9pZCBjZWlsRG91
YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIuZnJpbnRwPDY0PihkZXN0LCBzcmMpOwogICAgIH0KIAorICAgIHZvaWQgY2Vp
bEZsb2F0KEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuZnJpbnRwPDMyPihkZXN0LCBzcmMpOworICAgIH0KKwogICAgIHZvaWQg
Zmxvb3JEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5mcmludG08NjQ+KGRlc3QsIHNyYyk7CkBAIC0xMjY1LDI0ICsx
MzIzLDEzIEBAIHB1YmxpYzoKICAgICBKdW1wIGJyYW5jaERvdWJsZShEb3VibGVDb25kaXRpb24g
Y29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmZjbXA8NjQ+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGp1
bXBBZnRlckZsb2F0aW5nUG9pbnRDb21wYXJlKGNvbmQpOworICAgIH0KIAotICAgICAgICBpZiAo
Y29uZCA9PSBEb3VibGVOb3RFcXVhbCkgewotICAgICAgICAgICAgLy8gQ29uZGl0aW9uTkUganVt
cHMgaWYgTm90RXF1YWwgKm9yKiB1bm9yZGVyZWQgLSBmb3JjZSB0aGUgdW5vcmRlcmVkIGNhc2Vz
IG5vdCB0byBqdW1wLgotICAgICAgICAgICAgSnVtcCB1bm9yZGVyZWQgPSBtYWtlQnJhbmNoKEFS
TTY0QXNzZW1ibGVyOjpDb25kaXRpb25WUyk7Ci0gICAgICAgICAgICBKdW1wIHJlc3VsdCA9IG1h
a2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbk5FKTsKLSAgICAgICAgICAgIHVub3Jk
ZXJlZC5saW5rKHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSB7Ci0gICAgICAgICAg
ICBKdW1wIHVub3JkZXJlZCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvblZT
KTsKLSAgICAgICAgICAgIEp1bXAgbm90RXF1YWwgPSBtYWtlQnJhbmNoKEFSTTY0QXNzZW1ibGVy
OjpDb25kaXRpb25ORSk7Ci0gICAgICAgICAgICB1bm9yZGVyZWQubGluayh0aGlzKTsKLSAgICAg
ICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGVpdGhlciB1bm9yZGVyZWQgb3IgZXF1YWwuCi0gICAg
ICAgICAgICBKdW1wIHJlc3VsdCA9IGp1bXAoKTsKLSAgICAgICAgICAgIG5vdEVxdWFsLmxpbmso
dGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBtYWtlQnJhbmNoKGNvbmQpOworICAgIEp1bXAgYnJhbmNoRmxvYXQoRG91YmxlQ29uZGl0
aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmlnaHQpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5mY21wPDMyPihsZWZ0LCByaWdodCk7CisgICAgICAgIHJldHVy
biBqdW1wQWZ0ZXJGbG9hdGluZ1BvaW50Q29tcGFyZShjb25kKTsKICAgICB9CiAKICAgICBKdW1w
IGJyYW5jaERvdWJsZU5vblplcm8oRlBSZWdpc3RlcklEIHJlZywgRlBSZWdpc3RlcklEKQpAQCAt
MTM2NCw2ICsxNDExLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuZmRpdjw2ND4o
ZGVzdCwgb3AxLCBvcDIpOwogICAgIH0KIAorICAgIHZvaWQgZGl2RmxvYXQoRlBSZWdpc3RlcklE
IG9wMSwgRlBSZWdpc3RlcklEIG9wMiwgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5mZGl2PDMyPihkZXN0LCBvcDEsIG9wMik7CisgICAgfQorCiAgICAgdm9p
ZCBsb2FkRG91YmxlKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmICh0cnlMb2FkV2l0aE9mZnNldDw2ND4oZGVzdCwgYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLm9mZnNldCkpCkBAIC0xNDA4LDE2ICsxNDYwLDY0IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9hc3NlbWJsZXIuZm1vdjw2ND4oZGVzdCwgc3JjKTsKICAgICB9CiAKKyAgICB2b2lk
IG1vdmVaZXJvVG9Eb3VibGUoRlBSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZtb3Y8NjQ+KHJlZywgQVJNNjRSZWdpc3RlcnM6OnpyKTsKKyAgICB9CisKICAgICB2
b2lkIG1vdmVEb3VibGVUbzY0KEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAg
ICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3Y8NjQ+KGRlc3QsIHNyYyk7CiAgICAgfQogCisg
ICAgdm9pZCBtb3ZlRmxvYXRUbzMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtb3Y8MzI+KGRlc3QsIHNyYyk7CisgICAgfQor
CiAgICAgdm9pZCBtb3ZlNjRUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5mbW92PDY0PihkZXN0LCBzcmMpOwogICAg
IH0KIAorICAgIHZvaWQgbW92ZTMyVG9GbG9hdChSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5mbW92PDMyPihkZXN0LCBzcmMpOwor
ICAgIH0KKworICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlEb3VibGUoRG91YmxlQ29uZGl0aW9u
IGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5mY21wPDY0
PihsZWZ0LCByaWdodCk7CisgICAgICAgIG1vdmVDb25kaXRpb25hbGx5QWZ0ZXJGbG9hdGluZ1Bv
aW50Q29tcGFyZTw2ND4oY29uZCwgc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVD
b25kaXRpb25hbGx5RmxvYXQoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0
LCBGUFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5mY21wPDMyPihsZWZ0LCByaWdodCk7CisgICAgICAg
IG1vdmVDb25kaXRpb25hbGx5QWZ0ZXJGbG9hdGluZ1BvaW50Q29tcGFyZTw2ND4oY29uZCwgc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CisgICAgdm9pZCBt
b3ZlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRpbmdQb2ludENvbXBhcmUoRG91YmxlQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBp
ZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkgeworICAgICAgICAgICAgSnVtcCB1bm9yZGVyZWQg
PSBtYWtlQnJhbmNoKEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25WUyk7CisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5jc2VsPGRhdGFzaXplPihkZXN0LCBzcmMsIGRlc3QsIEFSTTY0QXNzZW1ibGVy
OjpDb25kaXRpb25ORSk7CisgICAgICAgICAgICB1bm9yZGVyZWQubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVFcXVh
bE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY29tcGFyZSBpcyB1bm9yZGVy
ZWQsIHNyYyBpcyBjb3BpZWQgdG8gZGVzdCBhbmQgdGhlCisgICAgICAgICAgICAvLyBuZXh0IGNz
ZWwgaGFzIGFsbCBhcmd1bWVudHMgZXF1YWwgdG8gc3JjLgorICAgICAgICAgICAgLy8gSWYgdGhl
IGNvbXBhcmUgaXMgb3JkZXJlZCwgZGVzdCBpcyB1bmNoYW5nZWQgYW5kIEVRIGRlY2lkZXMKKyAg
ICAgICAgICAgIC8vIHdoYXQgdmFsdWUgdG8gc2V0LgorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y3NlbDxkYXRhc2l6ZT4oZGVzdCwgc3JjLCBkZXN0LCBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9u
VlMpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY3NlbDxkYXRhc2l6ZT4oZGVzdCwgc3JjLCBk
ZXN0LCBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uRVEpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLmNzZWw8ZGF0YXNpemU+KGRlc3QsIHNyYywg
ZGVzdCwgQVJNNjRDb25kaXRpb24oY29uZCkpOworICAgIH0KKwogICAgIHZvaWQgbXVsRG91Ymxl
KEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbXVs
RG91YmxlKGRlc3QsIHNyYywgZGVzdCk7CkBAIC0xNDM0LDYgKzE1MzQsMjEgQEAgcHVibGljOgog
ICAgICAgICBtdWxEb3VibGUoZnBUZW1wUmVnaXN0ZXIsIGRlc3QpOwogICAgIH0KIAorICAgIHZv
aWQgbXVsRmxvYXQoRlBSZWdpc3RlcklEIG9wMSwgRlBSZWdpc3RlcklEIG9wMiwgRlBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5mbXVsPDMyPihkZXN0LCBvcDEs
IG9wMik7CisgICAgfQorCisgICAgdm9pZCBhbmREb3VibGUoRlBSZWdpc3RlcklEIG9wMSwgRlBS
ZWdpc3RlcklEIG9wMiwgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci52YW5kPDY0PihkZXN0LCBvcDEsIG9wMik7CisgICAgfQorCisgICAgdm9pZCBhbmRGbG9h
dChGUFJlZ2lzdGVySUQgb3AxLCBGUFJlZ2lzdGVySUQgb3AyLCBGUFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIGFuZERvdWJsZShvcDEsIG9wMiwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCBuZWdhdGVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgewogICAgICAgICBtX2Fzc2VtYmxlci5mbmVnPDY0PihkZXN0LCBzcmMpOwpAQCAtMTQ0NCw2
ICsxNTU5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuZnNxcnQ8NjQ+KGRlc3Qs
IHNyYyk7CiAgICAgfQogCisgICAgdm9pZCBzcXJ0RmxvYXQoRlBSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5mc3FydDwzMj4oZGVz
dCwgc3JjKTsKKyAgICB9CisKICAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMs
IEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgaWYgKHRyeVN0b3JlV2l0
aE9mZnNldDw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KSkKQEAgLTE0OTks
NiArMTYxOSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHN1YkRvdWJsZShmcFRlbXBSZWdpc3Rlciwg
ZGVzdCk7CiAgICAgfQogCisgICAgdm9pZCBzdWJGbG9hdChGUFJlZ2lzdGVySUQgb3AxLCBGUFJl
Z2lzdGVySUQgb3AyLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmZzdWI8MzI+KGRlc3QsIG9wMSwgb3AyKTsKKyAgICB9CisKICAgICAvLyBSZXN1bHQgaXMg
dW5kZWZpbmVkIGlmIHRoZSB2YWx1ZSBpcyBvdXRzaWRlIG9mIHRoZSBpbnRlZ2VyIHJhbmdlLgog
ICAgIHZvaWQgdHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CkBAIC0xNjI4LDYgKzE3NTMsMTEgQEAgcHVibGljOgogICAgICAgICBt
b3ZlKHJlZzIsIHJlZzEpOwogICAgICAgICBtb3ZlKGRhdGFUZW1wUmVnaXN0ZXIsIHJlZzIpOwog
ICAgIH0KKworICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihpbW0ubV92YWx1ZSkpKSwgZGVz
dCk7CisgICAgfQogICAgIAogICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CkBAIC0xNjM5LDYgKzE3NjksMjkgQEAgcHVibGlj
OgogICAgICAgICBtX2Fzc2VtYmxlci51eHR3KGRlc3QsIHNyYyk7CiAgICAgfQogCisgICAgdm9p
ZCBtb3ZlQ29uZGl0aW9uYWxseTMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wPDMyPihsZWZ0LCByaWdodCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmNzZWw8MzI+KGRlc3QsIHNyYywgZGVzdCwgQVJNNjRDb25kaXRpb24o
Y29uZCkpOworICAgIH0KKworICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHk2NChSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCwgUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNt
cDw2ND4obGVmdCwgcmlnaHQpOworICAgICAgICBtX2Fzc2VtYmxlci5jc2VsPDY0PihkZXN0LCBz
cmMsIGRlc3QsIEFSTTY0Q29uZGl0aW9uKGNvbmQpKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVD
b25kaXRpb25hbGx5VGVzdDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHRlc3RS
ZWcsIFJlZ2lzdGVySUQgbWFzaywgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnRzdDwzMj4odGVzdFJlZywgbWFzayk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmNzZWw8MzI+KGRlc3QsIHNyYywgZGVzdCwgQVJNNjRDb25kaXRpb24oY29u
ZCkpOworICAgIH0KKworICAgIHZvaWQgbW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQoUmVzdWx0Q29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgdGVzdFJlZywgUmVnaXN0ZXJJRCBtYXNrLCBSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIudHN0
PDY0Pih0ZXN0UmVnLCBtYXNrKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY3NlbDw2ND4oZGVzdCwg
c3JjLCBkZXN0LCBBUk02NENvbmRpdGlvbihjb25kKSk7CisgICAgfQogCiAgICAgLy8gRm9yd2Fy
ZHMgLyBleHRlcm5hbCBjb250cm9sIGZsb3cgb3BlcmF0aW9uczoKICAgICAvLwpAQCAtMjMxNCw3
ICsyNDY3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShyaWdodCwgZ2V0Q2FjaGVkRGF0YVRl
bXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmQsIG1l
bW9yeVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3RlciwgZGVzdCk7CiAgICAgfQotICAgIAor
CisgICAgdm9pZCB0ZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBS
ZWdpc3RlcklEIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLnRzdDwzMj4oc3JjLCBtYXNrKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY3NldDwzMj4oZGVz
dCwgQVJNNjRDb25kaXRpb24oY29uZCkpOworICAgIH0KKwogICAgIHZvaWQgdGVzdDMyKFJlc3Vs
dENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIG1hc2ssIFJlZ2lz
dGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCkBAIC0y
MzU1LDYgKzI1MTQsMTAgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jc2V0PDMyPihk
ZXN0LCBBUk02NENvbmRpdGlvbihjb25kKSk7CiAgICAgfQogCisgICAgdm9pZCBzZXRDYXJyeShS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jc2V0PDMyPihkZXN0
LCBBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uQ1MpOworICAgIH0KIAogICAgIC8vIFBhdGNoYWJs
ZSBvcGVyYXRpb25zCiAKQEAgLTI3NDIsMTEgKzI5MDUsNiBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgfQogCi0gICAgdm9pZCBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCi0gICAgewotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGltbS5tX3ZhbHVlKSkpLCBk
ZXN0KTsKLSAgICB9Ci0KICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGxvYWQoY29uc3Qgdm9pZCogYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKQEAgLTI5MzMsNiArMzA5MSwyNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgSnVtcCBqdW1wQWZ0ZXJGbG9hdGluZ1BvaW50Q29tcGFyZShEb3VibGVD
b25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAgIGlmIChjb25kID09IERvdWJsZU5vdEVxdWFs
KSB7CisgICAgICAgICAgICAvLyBDb25kaXRpb25ORSBqdW1wcyBpZiBOb3RFcXVhbCAqb3IqIHVu
b3JkZXJlZCAtIGZvcmNlIHRoZSB1bm9yZGVyZWQgY2FzZXMgbm90IHRvIGp1bXAuCisgICAgICAg
ICAgICBKdW1wIHVub3JkZXJlZCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlv
blZTKTsKKyAgICAgICAgICAgIEp1bXAgcmVzdWx0ID0gbWFrZUJyYW5jaChBUk02NEFzc2VtYmxl
cjo6Q29uZGl0aW9uTkUpOworICAgICAgICAgICAgdW5vcmRlcmVkLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlmIChjb25kID09IERv
dWJsZUVxdWFsT3JVbm9yZGVyZWQpIHsKKyAgICAgICAgICAgIEp1bXAgdW5vcmRlcmVkID0gbWFr
ZUJyYW5jaChBUk02NEFzc2VtYmxlcjo6Q29uZGl0aW9uVlMpOworICAgICAgICAgICAgSnVtcCBu
b3RFcXVhbCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvbk5FKTsKKyAgICAg
ICAgICAgIHVub3JkZXJlZC5saW5rKHRoaXMpOworICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUg
aWYgZWl0aGVyIHVub3JkZXJlZCBvciBlcXVhbC4KKyAgICAgICAgICAgIEp1bXAgcmVzdWx0ID0g
anVtcCgpOworICAgICAgICAgICAgbm90RXF1YWwubGluayh0aGlzKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1ha2VCcmFuY2goY29uZCk7
CisgICAgfQorCiAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7CiAKICAgICBzdGF0aWMgdm9p
ZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4Ni5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Ni5oCmluZGV4IGQ4ZTk2NTI1OTY3YWYzMTBlZjg1ZTA5YjBjZTY1MDg0ZDJhYTRmZjkuLjFkMjM3
MGNhZjBlMTZlZDZiMzkxYzc5NzZkNjE2NjUyZjUyZGNkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2LmgKQEAgLTE3OSwxMyAr
MTc5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIucGV4dHJ3X2lycigyLCBzcmMs
IGRlc3QyKTsKICAgICAgICAgbHNoaWZ0MzIoVHJ1c3RlZEltbTMyKDE2KSwgZGVzdDEpOwogICAg
ICAgICBvcjMyKGRlc3QxLCBkZXN0Mik7Ci0gICAgICAgIG1vdmVQYWNrZWRUb0ludDMyKHNyYywg
ZGVzdDEpOworICAgICAgICBtb3ZlRmxvYXRUbzMyKHNyYywgZGVzdDEpOwogICAgIH0KIAogICAg
IHZvaWQgbW92ZUludHNUb0RvdWJsZShSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwg
RlBSZWdpc3RlcklEIGRlc3QsIEZQUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKLSAgICAgICAg
bW92ZUludDMyVG9QYWNrZWQoc3JjMSwgZGVzdCk7Ci0gICAgICAgIG1vdmVJbnQzMlRvUGFja2Vk
KHNyYzIsIHNjcmF0Y2gpOworICAgICAgICBtb3ZlMzJUb0Zsb2F0KHNyYzEsIGRlc3QpOworICAg
ICAgICBtb3ZlMzJUb0Zsb2F0KHNyYzIsIHNjcmF0Y2gpOwogICAgICAgICBsc2hpZnRQYWNrZWQo
VHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7CiAgICAgICAgIG9yUGFja2VkKHNjcmF0Y2gsIGRl
c3QpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAppbmRleCAyMmJiMWMyOTE3NzUyNWIwYjc1YmI4
NWNjOTI3ZTliOThmNzVmNThmLi44ZTYwYjVlMzQwMmZjNGJkYTAyOTRkZGU5NWVhOTMyODNkMjQ5
NWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCkBAIC0xMTg5LDEzICsxMTg5LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIucG9yX3JyKHNyYywgZHN0KTsKICAgICB9CiAKLSAgICB2b2lk
IG1vdmVJbnQzMlRvUGFja2VkKFJlZ2lzdGVySUQgc3JjLCBYTU1SZWdpc3RlcklEIGRzdCkKKyAg
ICB2b2lkIG1vdmUzMlRvRmxvYXQoUmVnaXN0ZXJJRCBzcmMsIFhNTVJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzU1NFMlByZXNlbnQoKSk7CiAgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmRfcnIoc3JjLCBkc3QpOwogICAgIH0KIAotICAgIHZvaWQgbW92ZVBhY2tlZFRvSW50
MzIoWE1NUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZHN0KQorICAgIHZvaWQgbW92ZUZsb2F0
VG8zMihYTU1SZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBB
U1NFUlQoaXNTU0UyUHJlc2VudCgpKTsKICAgICAgICAgbV9hc3NlbWJsZXIubW92ZF9ycihzcmMs
IGRzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWly
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IDY0
MzMxMGMwYTQyM2MyZjVkM2IxMGRmYmFlMzI1NTcwZTY3MjY4M2EuLmE0ZDllMjExODYzMTY3NGEy
YzIyNGIzOGQyYjZmZDYzN2FhY2JjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCkBAIC02NzAsMTQgKzY3MCwyNyBAQCBwcml2YXRlOgogICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKG9wY29kZTMyLCBvcGNvZGU2NCwgdmFsdWUt
PnR5cGUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoaW1tKGFtb3VudCkpIHsKLSAgICAgICAg
ICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAobV92YWx1ZSkpOwotICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgaW1tKGFtb3VudCksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICBp
ZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgewor
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcCh2YWx1ZSksIGltbShhbW91bnQpLCB0
bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVlKSwgdG1wKG1fdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0oYW1vdW50KSwgdG1wKG1fdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6
VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHZhbHVlKSwgdG1wKGFtb3Vu
dCksIHRtcChtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorI2lm
IENQVShYODYpCiAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAobV92YWx1ZSkp
OwogICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGFtb3VudCksIFRtcChYODZSZWdpc3RlcnM6OmVj
eCkpOwogICAgICAgICBhcHBlbmQob3Bjb2RlLCBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpLCB0bXAo
bV92YWx1ZSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bj
b2RlMzIsIEFpcjo6T3Bjb2RlIG9wY29kZTY0PgpAQCAtMTYxMSw4ICsxNjI0LDEwIEBAIHByaXZh
dGU6CiAKICAgICAgICAgY2FzZSBEaXY6IHsKICAgICAgICAgICAgIGlmIChpc0ludChtX3ZhbHVl
LT50eXBlKCkpKSB7CisjaWYgQ1BVKFg4NikKICAgICAgICAgICAgICAgICBsb3dlclg4NkRpdigp
OwogICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBUbXAoWDg2UmVnaXN0ZXJzOjplYXgpLCB0
bXAobV92YWx1ZSkpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQobV92YWx1ZS0+dHlwZSgpKSk7CkBAIC0x
NjIyLDggKzE2MzcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTW9k
OiB7CisjaWYgQ1BVKFg4NikKICAgICAgICAgICAgIGxvd2VyWDg2RGl2KCk7CiAgICAgICAgICAg
ICBhcHBlbmQoTW92ZSwgVG1wKFg4NlJlZ2lzdGVyczo6ZWR4KSwgdG1wKG1fdmFsdWUpKTsKKyNl
bmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE3MDMsNyArMTcyMCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEJpdHdpc2VDYXN0OiB7Ci0g
ICAgICAgICAgICBhcHBlbmRVbk9wPE1vdmVJbnQzMlRvUGFja2VkLCBNb3ZlNjRUb0RvdWJsZSwg
TW92ZURvdWJsZVRvNjQsIE1vdmVQYWNrZWRUb0ludDMyPihtX3ZhbHVlLT5jaGlsZCgwKSk7Cisg
ICAgICAgICAgICBhcHBlbmRVbk9wPE1vdmUzMlRvRmxvYXQsIE1vdmU2NFRvRG91YmxlLCBNb3Zl
RG91YmxlVG82NCwgTW92ZUZsb2F0VG8zMj4obV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIxNzEsNiArMjE4OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCisjaWYgQ1BVKFg4
NikKICAgICB2b2lkIGxvd2VyWDg2RGl2KCkKICAgICB7CiAgICAgICAgIFRtcCBlYXggPSBUbXAo
WDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtMjE5Niw3ICsyMjE0LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgYXBwZW5kKGNvbnZlcnRUb0RvdWJsZVdvcmQsIGVheCwgZWR4KTsKICAgICAgICAgYXBwZW5k
KGRpdiwgZWF4LCBlZHgsIHRtcChtX3ZhbHVlLT5jaGlsZCgxKSkpOwogICAgIH0KLSAgICAKKyNl
bmRpZgorCiAgICAgSW5kZXhTZXQ8VmFsdWU+IG1fbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVz
IHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBBaXIuCiAgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4g
bV92YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGlu
IEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVk
Ii4KICAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9j
a1RvQmxvY2s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3RJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVz
LmgKaW5kZXggMTk1YTU4N2IwMzY2MWIyZDUxMWI4NjgwZWE0NWFhN2FmMjRlMDY0Ni4uYTdkYmY4
NTc2MmY1M2VlNDBkYjNmZDFkZTQ1NmNkN2Y2NjA2MTg4OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaApAQCAtMTY3LDYgKzE2Nyw3IEBAIGlubGlu
ZSBib29sIGlzWDg2RGl2SGVscGVyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKICAgICByZXR1cm4g
aW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVheCkKICAgICAgICAgJiYgaW5zdC5h
cmdzWzFdID09IFRtcChYODZSZWdpc3RlcnM6OmVkeCk7CiAjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShpbnN0KTsKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCmluZGV4IDM3NmVlNjA5NGE1ZmM4ZWQw
ZjljMWM4MGEyZmE2YmEwZDQ0YTRiYjguLmNjOTQ5NDYzOGRjZmEyNjgxMWQ3MmRiNTgyZGNkMjVj
NTkzMDZjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2RlcwpAQCAtMTI4LDEzICsxMjgsMTkgQEAgQWRkMzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6
MzIKICAgICBJbW0sIFRtcCwgVG1wCiAgICAgVG1wLCBUbXAsIFRtcAogCi1BZGREb3VibGUgVTpG
OjY0LCBVRDpGOjY0Cithcm02NDogQWRkRG91YmxlIFU6Rjo2NCwgVTpGOjY0LCBEOkY6NjQKKyAg
ICBUbXAsIFRtcCwgVG1wCisKK3g4NjogQWRkRG91YmxlIFU6Rjo2NCwgVUQ6Rjo2NAogICAgIFRt
cCwgVG1wCi0gICAgeDg2OiBBZGRyLCBUbXAKKyAgICBBZGRyLCBUbXAKKworYXJtNjQ6IEFkZEZs
b2F0IFU6RjozMiwgVTpGOjMyLCBEOkY6MzIKKyAgICBUbXAsIFRtcCwgVG1wCiAKLUFkZEZsb2F0
IFU6RjozMiwgVUQ6RjozMgoreDg2OiBBZGRGbG9hdCBVOkY6MzIsIFVEOkY6MzIKICAgICBUbXAs
IFRtcAotICAgIHg4NjogQWRkciwgVG1wCisgICAgQWRkciwgVG1wCiAKIFN1YjMyIFU6RzozMiwg
VVpEOkc6MzIKICAgICBUbXAsIFRtcApAQCAtMTUwLDE3ICsxNTYsMjMgQEAgU3ViMzIgVTpHOjMy
LCBVWkQ6RzozMgogICAgIHg4NjogQWRkciwgVG1wCiAgICAgeDg2OiBUbXAsIEFkZHIKIAotU3Vi
RG91YmxlIFU6Rjo2NCwgVUQ6Rjo2NAorYXJtNjQ6IFN1YkRvdWJsZSBVOkY6NjQsIFU6Rjo2NCwg
RDpGOjY0CisgICAgVG1wLCBUbXAsIFRtcAorCit4ODY6IFN1YkRvdWJsZSBVOkY6NjQsIFVEOkY6
NjQKICAgICBUbXAsIFRtcAotICAgIHg4NjogQWRkciwgVG1wCisgICAgQWRkciwgVG1wCiAKLVN1
YkZsb2F0IFU6RjozMiwgVUQ6RjozMgorYXJtNjQ6IFN1YkZsb2F0IFU6RjozMiwgVTpGOjMyLCBE
OkY6MzIKKyAgICBUbXAsIFRtcCwgVG1wCisKK3g4NjogU3ViRmxvYXQgVTpGOjMyLCBVRDpGOjMy
CiAgICAgVG1wLCBUbXAKLSAgICB4ODY6IEFkZHIsIFRtcAorICAgIEFkZHIsIFRtcAogCiBOZWcz
MiBVWkQ6RzozMgogICAgIFRtcAotICAgIEFkZHIKKyAgICB4ODY6IEFkZHIKIAogNjQ6IE5lZzY0
IFVEOkc6NjQKICAgICBUbXAKQEAgLTE3NSwyMSArMTg3LDMzIEBAIE11bDMyIFU6RzozMiwgVTpH
OjMyLCBaRDpHOjMyCiA2NDogTXVsNjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wLCBUbXAKIAot
TXVsRG91YmxlIFU6Rjo2NCwgVUQ6Rjo2NAorYXJtNjQ6IE11bERvdWJsZSBVOkY6NjQsIFU6Rjo2
NCwgRDpGOjY0CisgICAgVG1wLCBUbXAsIFRtcAorCit4ODY6IE11bERvdWJsZSBVOkY6NjQsIFVE
OkY6NjQKICAgICBUbXAsIFRtcAotICAgIHg4NjogQWRkciwgVG1wCisgICAgQWRkciwgVG1wCisK
K2FybTY0OiBNdWxGbG9hdCBVOkY6MzIsIFU6RjozMiwgRDpGOjMyCisgICAgVG1wLCBUbXAsIFRt
cAogCi1NdWxGbG9hdCBVOkY6MzIsIFVEOkY6MzIKK3g4NjogTXVsRmxvYXQgVTpGOjMyLCBVRDpG
OjMyCiAgICAgVG1wLCBUbXAKLSAgICB4ODY6IEFkZHIsIFRtcAorICAgIEFkZHIsIFRtcAorCith
cm02NDogRGl2RG91YmxlIFU6RjozMiwgVTpGOjMyLCBEOkY6MzIKKyAgICBUbXAsIFRtcCwgVG1w
CiAKLURpdkRvdWJsZSBVOkY6MzIsIFVEOkY6MzIKK3g4NjogRGl2RG91YmxlIFU6RjozMiwgVUQ6
RjozMgogICAgIFRtcCwgVG1wCi0gICAgeDg2OiBBZGRyLCBUbXAKKyAgICBBZGRyLCBUbXAKIAot
RGl2RmxvYXQgVTpGOjMyLCBVRDpGOjMyCithcm02NDogRGl2RmxvYXQgVTpGOjMyLCBVOkY6MzIs
IEQ6RjozMgorICAgIFRtcCwgVG1wLCBUbXAKKworeDg2OiBEaXZGbG9hdCBVOkY6MzIsIFVEOkY6
MzIKICAgICBUbXAsIFRtcAotICAgIHg4NjogQWRkciwgVG1wCisgICAgQWRkciwgVG1wCiAKIHg4
NjogWDg2Q29udmVydFRvRG91YmxlV29yZDMyIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCosIFRt
cCoKQEAgLTIwMyw3ICsyMjcsNyBAQCB4ODY6IFg4NkRpdjMyIFVaRDpHOjMyLCBVWkQ6RzozMiwg
VTpHOjMyCiB4ODZfNjQ6IFg4NkRpdjY0IFVaRDpHOjY0LCBVWkQ6Rzo2NCwgVTpHOjY0CiAgICAg
VG1wKiwgVG1wKiwgVG1wCiAKLUxlYSBVQTpHOlB0ciwgRDpHOlB0cgoreDg2OiBMZWEgVUE6RzpQ
dHIsIEQ6RzpQdHIKICAgICBBZGRyLCBUbXAKIAogQW5kMzIgVTpHOjMyLCBVWkQ6RzozMgpAQCAt
MjE3LDMzICsyNDEsNjMgQEAgQW5kMzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCwgVG1wCiAg
ICAgSW1tLCBUbXAKIAotQW5kRG91YmxlIFU6Rjo2NCwgVUQ6Rjo2NAorYXJtNjQ6IEFuZERvdWJs
ZSBVOkY6NjQsIFU6Rjo2NCwgRDpGOjY0CisgICAgVG1wLCBUbXAsIFRtcAorCit4ODY6IEFuZERv
dWJsZSBVOkY6NjQsIFVEOkY6NjQKICAgICBUbXAsIFRtcAogCi1BbmRGbG9hdCBVOkY6MzIsIFVE
OkY6MzIKK2FybTY0OiBBbmRGbG9hdCBVOkY6MzIsIFU6RjozMiwgRDpGOjMyCisgICAgVG1wLCBU
bXAsIFRtcAorCit4ODY6IEFuZEZsb2F0IFU6RjozMiwgVUQ6RjozMgogICAgIFRtcCwgVG1wCiAK
LUxzaGlmdDMyIFU6RzozMiwgVVpEOkc6MzIKK2FybTY0OiBMc2hpZnQzMiBVOkc6MzIsIFU6Rzoz
MiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBUbXAKKyAgICBUbXAsIEltbSwgVG1wCisKK3g4NjpM
c2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wKiwgVG1wCiAgICAgSW1tLCBUbXAKIAot
NjQ6IExzaGlmdDY0IFU6Rzo2NCwgVUQ6Rzo2NAorYXJtNjQ6IExzaGlmdDY0IFU6Rzo2NCwgVTpH
OjY0LCBaRDpHOjY0CisgICAgVG1wLCBUbXAsIFRtcAorICAgIFRtcCwgSW1tLCBUbXAKKworeDg2
XzY0OiBMc2hpZnQ2NCBVOkc6NjQsIFVEOkc6NjQKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRt
cAogCi1Sc2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCithcm02NDogUnNoaWZ0MzIgVTpHOjMyLCBV
Okc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgVG1wCisgICAgVG1wLCBJbW0sIFRtcAorCit4
ODY6IFJzaGlmdDMyIFU6RzozMiwgVVpEOkc6MzIKICAgICBUbXAqLCBUbXAKICAgICBJbW0sIFRt
cAogCi02NDogUnNoaWZ0NjQgVTpHOjY0LCBVRDpHOjY0Cithcm02NDogUnNoaWZ0NjQgVTpHOjY0
LCBVOkc6NjQsIFpEOkc6NjQKKyAgICBUbXAsIFRtcCwgVG1wCisgICAgVG1wLCBJbW0sIFRtcAor
Cit4ODZfNjQ6IFJzaGlmdDY0IFU6Rzo2NCwgVUQ6Rzo2NAogICAgIFRtcCosIFRtcAogICAgIElt
bSwgVG1wCiAKLVVyc2hpZnQzMiBVOkc6MzIsIFVaRDpHOjMyCithcm02NDogdXJzaGlmdDMyIFU6
RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIFRtcAorICAgIFRtcCwgSW1tLCBU
bXAKKworeDg2OiBVcnNoaWZ0MzIgVTpHOjMyLCBVWkQ6RzozMgogICAgIFRtcCosIFRtcAogICAg
IEltbSwgVG1wCiAKLTY0OiBVcnNoaWZ0NjQgVTpHOjY0LCBVRDpHOjY0Cithcm02NDogVXJzaGlm
dDY0IFU6Rzo2NCwgVTpHOjY0LCBaRDpHOjY0CisgICAgVG1wLCBUbXAsIFRtcAorICAgIFRtcCwg
SW1tLCBUbXAKKworeDg2XzY0OiBVcnNoaWZ0NjQgVTpHOjY0LCBVRDpHOjY0CiAgICAgVG1wKiwg
VG1wCiAgICAgSW1tLCBUbXAKIApAQCAtMjcwLDIxICszMjQsMjcgQEAgWG9yMzIgVTpHOjMyLCBV
WkQ6RzozMgogICAgIHg4NjogVG1wLCBBZGRyCiAgICAgSW1tLCBUbXAKIAotTm90MzIgVVpEOkc6
MzIKK2FybTY0OiBOb3QzMiBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcAorCit4ODY6IE5v
dDMyIFVaRDpHOjMyCiAgICAgVG1wCi0gICAgeDg2OiBBZGRyCisgICAgQWRkcgorCithcm02NDog
Tm90NjQgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcAogCi02NDogTm90NjQgVUQ6Rzo2NAor
eDg2OiBOb3Q2NCBVRDpHOjY0CiAgICAgVG1wCi0gICAgeDg2OiBBZGRyCisgICAgQWRkcgogCiBD
ZWlsRG91YmxlIFU6Rjo2NCwgVUQ6Rjo2NAogICAgIFRtcCwgVG1wCi0gICAgQWRkciwgVG1wCisg
ICAgeDg2OiBBZGRyLCBUbXAKIAogQ2VpbEZsb2F0IFU6RjozMiwgVUQ6RjozMgogICAgIFRtcCwg
VG1wCi0gICAgQWRkciwgVG1wCisgICAgeDg2OiBBZGRyLCBUbXAKIAogU3FydERvdWJsZSBVOkY6
NjQsIFVEOkY6NjQKICAgICBUbXAsIFRtcApAQCAtMzI1LDI3ICszODUsMjcgQEAgTW92ZSBVOkc6
UHRyLCBEOkc6UHRyCiAgICAgVG1wLCBUbXAKICAgICBJbW0sIFRtcCBhcyBzaWduRXh0ZW5kMzJU
b1B0cgogICAgIEltbTY0LCBUbXAKLSAgICBBZGRyLCBUbXAgYXMgbG9hZFB0ciAjIFRoaXMgbWVh
bnMgdGhhdCAiTW92ZSBBZGRyLCBUbXAiIGlzIGNvZGUtZ2VuZXJhdGVkIGFzICJsb2FkIiBub3Qg
Im1vdmUiLgorICAgIHg4NjogQWRkciwgVG1wIGFzIGxvYWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQg
Ik1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4K
ICAgICBJbmRleCwgVG1wIGFzIGxvYWRQdHIKLSAgICBUbXAsIEFkZHIgYXMgc3RvcmVQdHIKKyAg
ICB4ODY6IFRtcCwgQWRkciBhcyBzdG9yZVB0cgogICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIK
LSAgICBJbW0sIEFkZHIgYXMgc3RvcmVQdHIKKyAgICB4ODY6IEltbSwgQWRkciBhcyBzdG9yZVB0
cgogCiBNb3ZlMzIgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMy
VG9QdHIKLSAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCisgICAgeDg2OiBBZGRyLCBUbXAgYXMgbG9h
ZDMyCiAgICAgSW5kZXgsIFRtcCBhcyBsb2FkMzIKLSAgICBUbXAsIEFkZHIgYXMgc3RvcmUzMgor
ICAgIHg4NjogVG1wLCBBZGRyIGFzIHN0b3JlMzIKICAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIK
LSAgICBJbW0sIEFkZHIgYXMgc3RvcmUzMgotICAgIEltbSwgSW5kZXggYXMgc3RvcmUzMgorICAg
IHg4NjogSW1tLCBBZGRyIGFzIHN0b3JlMzIKKyAgICB4ODY6IEltbSwgSW5kZXggYXMgc3RvcmUz
MgogCiBTaWduRXh0ZW5kMzJUb1B0ciBVOkc6MzIsIEQ6RzpQdHIKICAgICBUbXAsIFRtcAogCiBa
ZXJvRXh0ZW5kOFRvMzIgVTpHOjgsIFpEOkc6MzIKICAgICBUbXAsIFRtcAotICAgIEFkZHIsIFRt
cCBhcyBsb2FkOAorICAgIHg4NjogQWRkciwgVG1wIGFzIGxvYWQ4CiAgICAgSW5kZXgsIFRtcCBh
cyBsb2FkOAogCiBTaWduRXh0ZW5kOFRvMzIgVTpHOjgsIFpEOkc6MzIKQEAgLTM1NSwyNiArNDE1
LDI2IEBAIFNpZ25FeHRlbmQ4VG8zMiBVOkc6OCwgWkQ6RzozMgogCiBaZXJvRXh0ZW5kMTZUbzMy
IFU6RzoxNiwgWkQ6RzozMgogICAgIFRtcCwgVG1wCi0gICAgQWRkciwgVG1wIGFzIGxvYWQxNgor
ICAgIHg4NjogQWRkciwgVG1wIGFzIGxvYWQxNgogICAgIEluZGV4LCBUbXAgYXMgbG9hZDE2CiAK
IFNpZ25FeHRlbmQxNlRvMzIgVTpHOjE2LCBaRDpHOjMyCiAgICAgVG1wLCBUbXAKLSAgICBBZGRy
LCBUbXAgYXMgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMgorICAgIHg4NjogQWRkciwgVG1wIGFzIGxv
YWQxNlNpZ25lZEV4dGVuZFRvMzIKICAgICBJbmRleCwgVG1wIGFzIGxvYWQxNlNpZ25lZEV4dGVu
ZFRvMzIKIAogTW92ZUZsb2F0IFU6RjozMiwgRDpGOjMyCiAgICAgVG1wLCBUbXAgYXMgbW92ZURv
dWJsZQotICAgIEFkZHIsIFRtcCBhcyBsb2FkRmxvYXQKKyAgICB4ODY6IEFkZHIsIFRtcCBhcyBs
b2FkRmxvYXQKICAgICBJbmRleCwgVG1wIGFzIGxvYWRGbG9hdAotICAgIFRtcCwgQWRkciBhcyBz
dG9yZUZsb2F0CisgICAgeDg2OiBUbXAsIEFkZHIgYXMgc3RvcmVGbG9hdAogICAgIFRtcCwgSW5k
ZXggYXMgc3RvcmVGbG9hdAogCiBNb3ZlRG91YmxlIFU6Rjo2NCwgRDpGOjY0CiAgICAgVG1wLCBU
bXAKLSAgICBBZGRyLCBUbXAgYXMgbG9hZERvdWJsZQorICAgIHg4NjogQWRkciwgVG1wIGFzIGxv
YWREb3VibGUKICAgICBJbmRleCwgVG1wIGFzIGxvYWREb3VibGUKLSAgICBUbXAsIEFkZHIgYXMg
c3RvcmVEb3VibGUKKyAgICB4ODY6IFRtcCwgQWRkciBhcyBzdG9yZURvdWJsZQogICAgIFRtcCwg
SW5kZXggYXMgc3RvcmVEb3VibGUKIAogTW92ZVplcm9Ub0RvdWJsZSBEOkY6NjQKQEAgLTM4Miw0
NCArNDQyLDQ0IEBAIE1vdmVaZXJvVG9Eb3VibGUgRDpGOjY0CiAKIDY0OiBNb3ZlNjRUb0RvdWJs
ZSBVOkc6NjQsIEQ6Rjo2NAogICAgIFRtcCwgVG1wCi0gICAgQWRkciwgVG1wIGFzIGxvYWREb3Vi
bGUKKyAgICB4ODY6IEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCiAgICAgSW5kZXgsIFRtcCBhcyBs
b2FkRG91YmxlCiAKLU1vdmVJbnQzMlRvUGFja2VkIFU6RzozMiwgRDpGOjMyCitNb3ZlMzJUb0Zs
b2F0IFU6RzozMiwgRDpGOjMyCiAgICAgVG1wLCBUbXAKLSAgICBBZGRyLCBUbXAgYXMgbG9hZEZs
b2F0CisgICAgeDg2OiBBZGRyLCBUbXAgYXMgbG9hZEZsb2F0CiAgICAgSW5kZXgsIFRtcCBhcyBs
b2FkRmxvYXQKIAogNjQ6IE1vdmVEb3VibGVUbzY0IFU6Rjo2NCwgRDpHOjY0CiAgICAgVG1wLCBU
bXAKLSAgICBBZGRyLCBUbXAgYXMgbG9hZDY0CisgICAgeDg2OiBBZGRyLCBUbXAgYXMgbG9hZDY0
CiAgICAgSW5kZXgsIFRtcCBhcyBsb2FkNjQKIAotTW92ZVBhY2tlZFRvSW50MzIgVTpGOjMyLCBE
Okc6MzIKK01vdmVGbG9hdFRvMzIgVTpGOjMyLCBEOkc6MzIKICAgICBUbXAsIFRtcAotICAgIEFk
ZHIsIFRtcCBhcyBsb2FkMzIKKyAgICB4ODY6IEFkZHIsIFRtcCBhcyBsb2FkMzIKICAgICBJbmRl
eCwgVG1wIGFzIGxvYWQzMgogCiBMb2FkOCBVOkc6OCwgWkQ6RzozMgotICAgIEFkZHIsIFRtcAor
ICAgIHg4NjogQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCiBTdG9yZTggVTpHOjgsIEQ6Rzo4
CiAgICAgVG1wLCBJbmRleAotICAgIFRtcCwgQWRkcgotICAgIEltbSwgSW5kZXgKLSAgICBJbW0s
IEFkZHIKKyAgICB4ODY6IFRtcCwgQWRkcgorICAgIHg4NjogSW1tLCBJbmRleAorICAgIHg4Njog
SW1tLCBBZGRyCiAKIExvYWQ4U2lnbmVkRXh0ZW5kVG8zMiBVOkc6OCwgWkQ6RzozMgotICAgIEFk
ZHIsIFRtcAorICAgIHg4NjogQWRkciwgVG1wCiAgICAgSW5kZXgsIFRtcAogCiBMb2FkMTYgVTpH
OjE2LCBaRDpHOjMyCi0gICAgQWRkciwgVG1wCisgICAgeDg2OiBBZGRyLCBUbXAKICAgICBJbmRl
eCwgVG1wCiAKIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIgVTpHOjE2LCBaRDpHOjMyCi0gICAgQWRk
ciwgVG1wCisgICAgeDg2OiBBZGRyLCBUbXAKICAgICBJbmRleCwgVG1wCiAKIENvbXBhcmUzMiBV
Okc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCkBAIC01MzYsMTEgKzU5NiwxMSBAQCBNb3Zl
Q29uZGl0aW9uYWxseTMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFU6RzpQdHIsIFVEOkc6UHRy
CiAKIE1vdmVDb25kaXRpb25hbGx5VGVzdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFU6RzpQ
dHIsIFVEOkc6UHRyCiAgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1wCi0gICAgUmVzQ29u
ZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisgICAgeDg2OiBSZXNDb25kLCBUbXAsIEltbSwgVG1wLCBU
bXAKIAogNjQ6IE1vdmVDb25kaXRpb25hbGx5VGVzdDY0IFU6RzozMiwgVTpHOjY0LCBVOkc6NjQs
IFU6RzpQdHIsIFVEOkc6UHRyCiAgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1wCi0gICAg
UmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisgICAgeDg2OiBSZXNDb25kLCBUbXAsIEltbSwg
VG1wLCBUbXAKIAogTW92ZUNvbmRpdGlvbmFsbHlEb3VibGUgVTpHOjMyLCBVOkY6NjQsIFU6Rjo2
NCwgVTpHOlB0ciwgVUQ6RzpQdHIKICAgICBEb3VibGVDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IGIyNTE5
ZWM3MzY5MjBlZjhlYzJkMDY5ZjIzYWQ3OWNkYTM5MjFlNDkuLmIxM2I1MTMxYTM5NTdmOTMyNGI4
Yjk0ZThiMWMzZjg4Mzk2ZjZkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaApAQCAtNDM2LDEwICs0MzYsMTUgQEAgcHVibGljOgogICAgICAgICBtb3Zl
KHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CiAgICAgfQogCisg
ICAgdm9pZCBlbWl0RnVuY3Rpb25FcGlsb2d1ZVdpdGhFbXB0eUZyYW1lKCkKKyAgICB7CisgICAg
ICAgIHBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgfQor
CiAgICAgdm9pZCBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpCiAgICAgewogICAgICAgICBtb3ZlKGZy
YW1lUG9pbnRlclJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIHBvcFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlV2l0aEVtcHR5RnJhbWUoKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9GUFJJbmZvLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0ZQUkluZm8uaAppbmRleCA1NDRlOTA2MmNiN2NlOTRkYTVlOGNiNWUx
N2M1ZmU3NTgxM2NkNzkyLi5hMTlhMWFjMzg3MzgzYjU2OWVmNGM3MjI1OGIyNGRmZGMyN2NlN2Ex
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ZQUkluZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ZQUkluZm8uaApAQCAtMTg3LDYgKzE4Nyw3IEBAIGNs
YXNzIEZQUkluZm8gewogcHVibGljOgogICAgIHR5cGVkZWYgRlBSUmVnIFJlZ2lzdGVyVHlwZTsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnMgPSAyMzsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyA9IDg7CiAKICAg
ICAvLyBUZW1wb3JhcnkgcmVnaXN0ZXJzLgogICAgIC8vIHE4LXExNSBhcmUgY2FsbGVlIHNhdmVk
LCBxMzEgaXMgdXNlIGJ5IHRoZSBNYWNyb0Fzc2VtYmxlciBhcyBmcFRlbXBSZWdpc3Rlci4KQEAg
LTI1OCw2ICsyNTksMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAorICAgIHN0YXRpYyBGUFJSZWcgdG9Bcmd1bWVudFJlZ2lzdGVyKHVuc2lnbmVkIGluZGV4KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgOCk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxGUFJSZWc+KGluZGV4KTsKKyAgICB9CisKICAgICBzdGF0aWMgY29uc3QgY2hhciogZGVi
dWdOYW1lKEZQUlJlZyByZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnICE9IEludmFsaWRG
UFJSZWcpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>