<?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>23296</bug_id>
          
          <creation_ts>2009-01-13 10:30:34 -0800</creation_ts>
          <short_desc>add Android platform-specific files to WebCore/platform</short_desc>
          <delta_ts>2009-06-10 12:16:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</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="Feng Qian">feng</reporter>
          <assigned_to name="Feng Qian">feng</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105523</commentid>
    <comment_count>0</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-13 10:30:34 -0800</bug_when>
    <thetext>Part of upstreaming Android port to WebKit, this bug includes Android-specific files added to WebCore/platform/android directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105525</commentid>
    <comment_count>1</comment_count>
      <attachid>26674</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-13 10:36:21 -0800</bug_when>
    <thetext>Created attachment 26674
patch v1

Patch v1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105996</commentid>
    <comment_count>2</comment_count>
      <attachid>26778</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-15 17:17:36 -0800</bug_when>
    <thetext>Created attachment 26778
patch v2

This patch includes Android-specific files under WebCore/platform.

SharedTimerAndroid.cpp currently depends on JavaSharedClient.cpp, which lives in WebKit directory. I can separate this file into a different change list and wait until we find a solution for it.

Apologize for the big patch, lot of files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106086</commentid>
    <comment_count>3</comment_count>
      <attachid>26778</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-16 10:48:44 -0800</bug_when>
    <thetext>Comment on attachment 26778
patch v2

&gt; +        * platform/android/ClipboardAndroid.cpp: Added.
&gt; +        (WebCore::):
&gt; +        (WebCore::clipboardTypeFromMIMEType):
&gt; +        (WebCore::ClipboardAndroid::ClipboardAndroid):
&gt; +        (WebCore::ClipboardAndroid::~ClipboardAndroid):
&gt; +        (WebCore::ClipboardAndroid::clearData):
&gt; +        (WebCore::ClipboardAndroid::clearAllData):
&gt; +        (WebCore::ClipboardAndroid::getData):
&gt; +        (WebCore::ClipboardAndroid::setData):
&gt; +        (WebCore::ClipboardAndroid::types):
&gt; +        (WebCore::ClipboardAndroid::setDragImage):
&gt; +        (WebCore::ClipboardAndroid::setDragImageElement):
&gt; +        (WebCore::ClipboardAndroid::createDragImage):
&gt; +        (WebCore::ClipboardAndroid::declareAndWriteDragImage):
&gt; +        (WebCore::ClipboardAndroid::writeURL):
&gt; +        (WebCore::ClipboardAndroid::writeRange):
&gt; +        (WebCore::ClipboardAndroid::hasData):

Remember that prepare-ChangeLog is just a script to help you write a ChangeLog entry. Its output is not sacred.

As I said in another patch, I don&apos;t think it&apos;s useful to have a list of all functions for a new file, despite the fact that&apos;s what prepare-ChangeLog generates, if you&apos;re not going to comment on those individual functions. The reason the function names are there are so someone can search for a change that affected a particular function, and to encourage you to write more detailed comments. So it&apos;s better to omit them. And there&apos;s absolutely no reason to leave in a line like this:

&gt; +        (WebCore::):

This is generated by a buggy script, the human being working on the patch should just remove it!

&gt; +// format string for
&gt; +static const char szShellDotUrlTemplate[] = &quot;[InternetShortcut]\r\nURL=%s\r\n&quot;;

Not a good comment here.

&gt; +    //FIXME: Need to be able to write to the system clipboard &lt;rdar://problem/5015941&gt;

Doesn&apos;t make sense to have a Radar number in an Android-specific source file.

&gt; +    if (dataType == ClipboardDataTypeURL) {
&gt; +           }
&gt; +    if (dataType == ClipboardDataTypeText) {
&gt; +       
&gt; +    }
&gt; +
&gt; +}

Strange code here. This whole file seems to be an unmaintained shell, copy of an old version of a Mac file perhaps? I think a little housecleaning would be good.

This is huge, I&apos;m not going to be able to get through this quickly. I might not be able to review until next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106767</commentid>
    <comment_count>4</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-23 09:58:54 -0800</bug_when>
    <thetext>Darin, I am going to split the patch into several smaller ones so it is easier for you to review.

(In reply to comment #3)
&gt; (From update of attachment 26778 [review])
&gt; &gt; +        * platform/android/ClipboardAndroid.cpp: Added.
&gt; &gt; +        (WebCore::):
&gt; &gt; +        (WebCore::clipboardTypeFromMIMEType):
&gt; &gt; +        (WebCore::ClipboardAndroid::ClipboardAndroid):
&gt; &gt; +        (WebCore::ClipboardAndroid::~ClipboardAndroid):
&gt; &gt; +        (WebCore::ClipboardAndroid::clearData):
&gt; &gt; +        (WebCore::ClipboardAndroid::clearAllData):
&gt; &gt; +        (WebCore::ClipboardAndroid::getData):
&gt; &gt; +        (WebCore::ClipboardAndroid::setData):
&gt; &gt; +        (WebCore::ClipboardAndroid::types):
&gt; &gt; +        (WebCore::ClipboardAndroid::setDragImage):
&gt; &gt; +        (WebCore::ClipboardAndroid::setDragImageElement):
&gt; &gt; +        (WebCore::ClipboardAndroid::createDragImage):
&gt; &gt; +        (WebCore::ClipboardAndroid::declareAndWriteDragImage):
&gt; &gt; +        (WebCore::ClipboardAndroid::writeURL):
&gt; &gt; +        (WebCore::ClipboardAndroid::writeRange):
&gt; &gt; +        (WebCore::ClipboardAndroid::hasData):
&gt; 
&gt; Remember that prepare-ChangeLog is just a script to help you write a ChangeLog
&gt; entry. Its output is not sacred.
&gt; 
&gt; As I said in another patch, I don&apos;t think it&apos;s useful to have a list of all
&gt; functions for a new file, despite the fact that&apos;s what prepare-ChangeLog
&gt; generates, if you&apos;re not going to comment on those individual functions. The
&gt; reason the function names are there are so someone can search for a change that
&gt; affected a particular function, and to encourage you to write more detailed
&gt; comments. So it&apos;s better to omit them. And there&apos;s absolutely no reason to
&gt; leave in a line like this:
&gt; 
&gt; &gt; +        (WebCore::):
&gt; 
&gt; This is generated by a buggy script, the human being working on the patch
&gt; should just remove it!
&gt; 
&gt; &gt; +// format string for
&gt; &gt; +static const char szShellDotUrlTemplate[] = &quot;[InternetShortcut]\r\nURL=%s\r\n&quot;;
&gt; 
&gt; Not a good comment here.
&gt; 
&gt; &gt; +    //FIXME: Need to be able to write to the system clipboard &lt;rdar://problem/5015941&gt;
&gt; 
&gt; Doesn&apos;t make sense to have a Radar number in an Android-specific source file.
&gt; 
&gt; &gt; +    if (dataType == ClipboardDataTypeURL) {
&gt; &gt; +           }
&gt; &gt; +    if (dataType == ClipboardDataTypeText) {
&gt; &gt; +       
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +}
&gt; 
&gt; Strange code here. This whole file seems to be an unmaintained shell, copy of
&gt; an old version of a Mac file perhaps? I think a little housecleaning would be
&gt; good.
&gt; 
&gt; This is huge, I&apos;m not going to be able to get through this quickly. I might not
&gt; be able to review until next week.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106793</commentid>
    <comment_count>5</comment_count>
      <attachid>26778</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-23 13:52:14 -0800</bug_when>
    <thetext>Comment on attachment 26778
patch v2

Clearing the review flag based on that most-recent comment saying that smaller patches were coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106797</commentid>
    <comment_count>6</comment_count>
      <attachid>26982</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-23 14:10:46 -0800</bug_when>
    <thetext>Created attachment 26982
ClipboardAndroid.h/.cpp &amp; ChangeLog

Most functions of ClipboardAndroid.cpp are empty stubs to satisfy the linker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106873</commentid>
    <comment_count>7</comment_count>
      <attachid>26982</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-24 13:25:34 -0800</bug_when>
    <thetext>Comment on attachment 26982
ClipboardAndroid.h/.cpp &amp; ChangeLog

I don&apos;t understand why the ChangeLog lists files that aren&apos;t in this patch. But the ClipboardAndroid files look fine. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107044</commentid>
    <comment_count>8</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-26 11:12:19 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 26982 [review])
&gt; I don&apos;t understand why the ChangeLog lists files that aren&apos;t in this patch. But
&gt; the ClipboardAndroid files look fine. r=me
&gt; 

I am going to split other added files into small patches, but use the same bug id as this one.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107116</commentid>
    <comment_count>9</comment_count>
      <attachid>27055</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-26 17:03:50 -0800</bug_when>
    <thetext>Created attachment 27055
patch part 2

Second part of the patch with three more files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107214</commentid>
    <comment_count>10</comment_count>
      <attachid>27076</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-01-27 10:42:32 -0800</bug_when>
    <thetext>Created attachment 27076
patch part 2

A new version of part 2 with more cleanups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108774</commentid>
    <comment_count>11</comment_count>
      <attachid>27434</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-02-06 16:59:18 -0800</bug_when>
    <thetext>Created attachment 27434
patch part 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108775</commentid>
    <comment_count>12</comment_count>
      <attachid>27435</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-02-06 16:59:47 -0800</bug_when>
    <thetext>Created attachment 27435
patch part 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108776</commentid>
    <comment_count>13</comment_count>
      <attachid>27436</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-02-06 17:00:13 -0800</bug_when>
    <thetext>Created attachment 27436
patch part 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108777</commentid>
    <comment_count>14</comment_count>
      <attachid>27437</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-02-06 17:00:38 -0800</bug_when>
    <thetext>Created attachment 27437
patch part 6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108778</commentid>
    <comment_count>15</comment_count>
      <attachid>27438</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-02-06 17:01:05 -0800</bug_when>
    <thetext>Created attachment 27438
patch part 7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108779</commentid>
    <comment_count>16</comment_count>
      <attachid>27439</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-02-06 17:01:39 -0800</bug_when>
    <thetext>Created attachment 27439
patch part 8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108780</commentid>
    <comment_count>17</comment_count>
      <attachid>27440</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-02-06 17:02:27 -0800</bug_when>
    <thetext>Created attachment 27440
patch part 9</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112391</commentid>
    <comment_count>18</comment_count>
      <attachid>26982</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-03-05 09:34:13 -0800</bug_when>
    <thetext>Comment on attachment 26982
ClipboardAndroid.h/.cpp &amp; ChangeLog

Removed r+ flag so this shows up in Darin&apos;s review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115861</commentid>
    <comment_count>19</comment_count>
      <attachid>26982</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-03-30 11:56:52 -0700</bug_when>
    <thetext>Comment on attachment 26982
ClipboardAndroid.h/.cpp &amp; ChangeLog

Darin, can you review patches in this bug when you get chance? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115865</commentid>
    <comment_count>20</comment_count>
      <attachid>26982</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-03-30 12:13:38 -0700</bug_when>
    <thetext>Comment on attachment 26982
ClipboardAndroid.h/.cpp &amp; ChangeLog

The ChangeLog here doesn&apos;t match the files. The files look fine.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118077</commentid>
    <comment_count>21</comment_count>
      <attachid>27434</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-19 14:44:37 -0700</bug_when>
    <thetext>Comment on attachment 27434
patch part 3

Some of the comments in the file are strange, like the one that has Subversion change number of the version that added the new function. And it&apos;s strange to have unloadModule in this file, but none of the other module functions. But this won’t do any harm to any other platforms, so on that basis, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118079</commentid>
    <comment_count>22</comment_count>
      <attachid>27076</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-19 14:48:41 -0700</bug_when>
    <thetext>Comment on attachment 27076
patch part 2

There must be a better way to handle platforms with no cursors than this.

Is this #define LOG_TAG really needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118101</commentid>
    <comment_count>23</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-04-20 07:28:16 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 27076 [review])
&gt; There must be a better way to handle platforms with no cursors than this.
&gt; 
&gt; Is this #define LOG_TAG really needed?
&gt; 

Yes, it is the logging facility provided by Android utils/log.h.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119345</commentid>
    <comment_count>24</comment_count>
      <attachid>26982</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 14:26:21 -0700</bug_when>
    <thetext>Comment on attachment 26982
ClipboardAndroid.h/.cpp &amp; ChangeLog

I landed this as:
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	A	WebCore/platform/android/ClipboardAndroid.cpp
	A	WebCore/platform/android/ClipboardAndroid.h
Committed r43012


The ChangeLog was wrong, and there were Tabs in the header file, but otherwise it was fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119346</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-29 14:27:16 -0700</bug_when>
    <thetext>These should have individual ChangeLogs so they can be landed separately.  Unless you plan to land them yourself (which would be fine too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119469</commentid>
    <comment_count>26</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-04-30 09:08:23 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; These should have individual ChangeLogs so they can be landed separately. 
&gt; Unless you plan to land them yourself (which would be fine too).
&gt; 

Eric, I take your suggestion and will make ChangeLog for each patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119882</commentid>
    <comment_count>27</comment_count>
      <attachid>29997</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-05-04 16:16:25 -0700</bug_when>
    <thetext>Created attachment 29997
new patch part 2 with ChangeLog

Exact the same patch as reviewed part two with ChagneLog so it is easier to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119883</commentid>
    <comment_count>28</comment_count>
      <attachid>29998</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-05-04 16:21:41 -0700</bug_when>
    <thetext>Created attachment 29998
new patch part 3 with ChangeLog

new patch part 3 with ChangeLog, reviewed by darin@apple.com already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119885</commentid>
    <comment_count>29</comment_count>
      <attachid>29999</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-05-04 16:25:17 -0700</bug_when>
    <thetext>Created attachment 29999
new patch part 4 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119886</commentid>
    <comment_count>30</comment_count>
      <attachid>30000</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-05-04 16:27:34 -0700</bug_when>
    <thetext>Created attachment 30000
new patch part 5 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119888</commentid>
    <comment_count>31</comment_count>
      <attachid>30002</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-05-04 16:29:53 -0700</bug_when>
    <thetext>Created attachment 30002
new patch part 6 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119890</commentid>
    <comment_count>32</comment_count>
      <attachid>30003</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-05-04 16:32:18 -0700</bug_when>
    <thetext>Created attachment 30003
new patch part 7 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119891</commentid>
    <comment_count>33</comment_count>
      <attachid>30004</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-05-04 16:35:19 -0700</bug_when>
    <thetext>Created attachment 30004
new patch part 8 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119892</commentid>
    <comment_count>34</comment_count>
      <attachid>30005</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-05-04 16:38:12 -0700</bug_when>
    <thetext>Created attachment 30005
new patch part 9 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122508</commentid>
    <comment_count>35</comment_count>
      <attachid>29997</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-21 19:23:19 -0700</bug_when>
    <thetext>Comment on attachment 29997
new patch part 2 with ChangeLog

Seems fine.  I guess Andriod doesn&apos;t have cursors or drag/drop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122509</commentid>
    <comment_count>36</comment_count>
      <attachid>29998</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-21 19:27:17 -0700</bug_when>
    <thetext>Comment on attachment 29998
new patch part 3 with ChangeLog

Style violation:
     if (handle != -1) {
 63         return filename;
 64     }

No need to have filename outside of the while block.  Just put the if inside the while block. :)

I suggest breaking the filename generation stuff out into its own function.

temporaryFileName(name, number)

Doesn&apos;t write deal with size_t instead of int?

Sorry this took so long. I don&apos;t get any notification when you set a requestee.  I suggest not setting a requestee on patches you post.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122639</commentid>
    <comment_count>37</comment_count>
      <attachid>30000</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 06:32:15 -0700</bug_when>
    <thetext>Comment on attachment 30000
new patch part 5 with ChangeLog

I don&apos;t think you want to return a new string every time.  You should use function-local statics instead.  You also don&apos;t need to use fromUTF8 since those are just ascii strings. :)  Oh, and you should put a simple implementation of image title, since it&apos;s not that hard, and will fix viewing stand-alone image files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122640</commentid>
    <comment_count>38</comment_count>
      <attachid>29999</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 06:37:13 -0700</bug_when>
    <thetext>Comment on attachment 29999
new patch part 4 with ChangeLog

Does the Andriod project have a legal entity to assign copyright to?

case: statements should be alingned with switch statement per the WK style guidelines.

{ on it&apos;s own line:
 36 static int windowsKeyCodeForKeyEvent(unsigned int keyCode) {

It&apos;s sad that more of this logic can&apos;t be shared between platforms.

WK Style has no != 0
 218     , m_shiftKey((mods &amp; ShiftKey) != 0)

Otherwise looks fine.
If you had commit-bit I would just r+ this and you could fix them when landing.  Since you don&apos;t yet, please post a new patch for someone else to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122642</commentid>
    <comment_count>39</comment_count>
      <attachid>30002</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 06:43:04 -0700</bug_when>
    <thetext>Comment on attachment 30002
new patch part 6 with ChangeLog

WK style is to prefer constants over preprocessor #defines:
 39 #define MAX_COMBO_HEIGHT 20

Sad this can&apos;t share more with Chromium.  I guess eventually maybe it can.  Especially if a RenderThemeSkia is made (talk to Albert Wong)

It&apos;s nice to use longer variable names:
 62 static bool paintBrush(RenderSkinAndroid* rSkin, RenderObject* o, const RenderObject::PaintInfo&amp; i,  const IntRect&amp; ir)

Please use C++ style constructor initialization and OwnPtrs so you don&apos;t ahve to do manual memory management:
 83     m_radio = new RenderSkinRadio(false);
 90     delete m_radio;

Style:
     if (!element-&gt;isEnabled()) {
 203         RenderSkinButton::Draw(getCanvasFromInfo(i), ir, RenderSkinAndroid::kDisabled);
 204     } else {

Style:
46     if (o-&gt;isMenuList()) {
 247         return paintCombo(o, i, ir);
 248     }

Style:
 38     ThemeData() :m_part(0), m_state(0) {}

We don&apos;t name arguments in headers unless the names add clarity:
 51     virtual bool supportsFocusRing(const RenderStyle* style) const;

As noted above, these should be OwnPtrs:
 101     RenderSkinRadio*    m_radio;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122643</commentid>
    <comment_count>40</comment_count>
      <attachid>30003</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 06:44:54 -0700</bug_when>
    <thetext>Comment on attachment 30003
new patch part 7 with ChangeLog

Seems sane enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122644</commentid>
    <comment_count>41</comment_count>
      <attachid>30004</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 06:48:28 -0700</bug_when>
    <thetext>Comment on attachment 30004
new patch part 8 with ChangeLog

I&apos;m surprised we have any time code in WebCore?  Isn&apos;t that all down in WTF?

Why does andriod need its own different ICU code?  TextBoundaries.cpp?

IntRect() is the same as  54         return IntRect(0, 0, 0, 0);

Isn&apos;t there an easier way to get the FrameView than your manual crawl?

r- for the nits and questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122646</commentid>
    <comment_count>42</comment_count>
      <attachid>30005</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 06:52:06 -0700</bug_when>
    <thetext>Comment on attachment 30005
new patch part 9 with ChangeLog

We don&apos;t generally commit commented out code:
 97 //void FrameView::updateBorder() { verifiedOk(); }

I&apos;m surprised there are all these localized strings here when I just reviewed another patch with unimplemented localized strings.  Seems these shoudl be mvoed, no?

ASSERT(0);
we use ASSERT_NOT_REACHED()

In general this is fine.  Again if you were a commiter you could just fix it as you landed, but as is, you should re-post this for someone else to land.

Please remove all the commetned out ones:
 718 //void Frame::clearPlatformScriptObjects() { notImplemented(); }

I think you could make all these 1-line definitions to make them more readable.  Up to you.  But we generally found them more readable that way.  WK does not have an 80 col limit like google does.

r- for the nit above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124796</commentid>
    <comment_count>43</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 13:28:31 -0700</bug_when>
    <thetext>Eric, thanks for reviewing the patch.

(In reply to comment #36)
&gt; (From update of attachment 29998 [review])
&gt; Style violation:
&gt;      if (handle != -1) {
&gt;  63         return filename;
&gt;  64     }
&gt; 
&gt; No need to have filename outside of the while block.  Just put the if inside
&gt; the while block. :)
&gt; 

cute, thanks, fix it.

&gt; I suggest breaking the filename generation stuff out into its own function.
&gt; 
&gt; temporaryFileName(name, number)
&gt; 

Since the code is only used by openTemporaryFile, and the code is not long (16 lines), I don&apos;t feel it is worth to make it into a separate function. But if you insist, I can make such a change, please let me know your opinion.

&gt; Doesn&apos;t write deal with size_t instead of int?
&gt; 

Should I add a cast like, (size_t)(length - totalBytesWritten) ?

&gt; Sorry this took so long. I don&apos;t get any notification when you set a requestee.
&gt;  I suggest not setting a requestee on patches you post.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124797</commentid>
    <comment_count>44</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 13:36:07 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 30000 [review])
&gt; I don&apos;t think you want to return a new string every time.  You should use
&gt; function-local statics instead.  You also don&apos;t need to use fromUTF8 since
&gt; those are just ascii strings. :)  Oh, and you should put a simple
&gt; implementation of image title, since it&apos;s not that hard, and will fix viewing
&gt; stand-alone image files.
&gt; 

The code is mostly a copy-paste from gtk port. I am going to remove fromUTF8 part, but will image title as it is, and mostly this file is just used as a link stub.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124798</commentid>
    <comment_count>45</comment_count>
      <attachid>31059</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 13:44:22 -0700</bug_when>
    <thetext>Created attachment 31059
new patch part 3 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124800</commentid>
    <comment_count>46</comment_count>
      <attachid>31060</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 13:55:47 -0700</bug_when>
    <thetext>Created attachment 31060
new patch part 5 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124804</commentid>
    <comment_count>47</comment_count>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 14:06:57 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 29999 [review])
&gt; Does the Andriod project have a legal entity to assign copyright to?

I am not the original author of this file :-), but from comments, this file looks like a copy and modification of the one from gtk port, so I added copyrights info of GTK into it.
Is it all you mean here?

&gt; 
&gt; case: statements should be alingned with switch statement per the WK style
&gt; guidelines.
&gt; 

The counterpart in other ports are using the same style, really do I need to make this one different from others?

&gt; { on it&apos;s own line:
&gt;  36 static int windowsKeyCodeForKeyEvent(unsigned int keyCode) {
&gt; 

Fixed, thanks!

&gt; It&apos;s sad that more of this logic can&apos;t be shared between platforms.
&gt; 
&gt; WK Style has no != 0
&gt;  218     , m_shiftKey((mods &amp; ShiftKey) != 0)
&gt; 

Fixed!

&gt; Otherwise looks fine.
&gt; If you had commit-bit I would just r+ this and you could fix them when landing.
&gt;  Since you don&apos;t yet, please post a new patch for someone else to land.
&gt; 

A new patch is created.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124807</commentid>
    <comment_count>48</comment_count>
      <attachid>31061</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 14:11:25 -0700</bug_when>
    <thetext>Created attachment 31061
new patch part 4 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124813</commentid>
    <comment_count>49</comment_count>
      <attachid>31059</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-08 14:33:34 -0700</bug_when>
    <thetext>Comment on attachment 31059
new patch part 3 with ChangeLog

Various style violations:

35     if (m_filenames.size() == 0) {
 36         return String();
 37     }
isEmpty() no?  Also no extra {}

Don&apos;t we have methods to do ellipses already?
40     String output = m_filenames[0].copy();
 41     while (font.width(TextRun(output.impl())) &gt; width &amp;&amp; output.length() &gt; 4) {
 42         output = output.replace(output.length() - 4, 4, String(&quot;...&quot;));
 43     }

String has a printf method if you like:
54         String path = sPluginPath;
 55         path.append(&quot;/&quot;);
 56         path.append(prefix);
 57         path.append(String::number(number));

Style:
CString fileSystemRepresentation(const String&amp; path) {
 46     return path.utf8();
 47 }

Style:
 59         const char *fstr = filename.data();

Style:
         if (handle != -1) {
 64             return filename;
 65         }

Why the date comment here?
98 // new as of SVN change 36269, Sept 8, 2008
 99 String homeDirectoryPath() 

Or here?
 // new as of webkit4, Feb 28, 2009
 105 Vector&lt;String&gt; listDirectory(const String&amp; path, const String&amp; filter)
 106 {

Why the extra space?
112         struct dirent * dp;

Single line if style:
115             if (strcmp(name, &quot;.&quot;) == 0 || strcmp(name, &quot;..&quot;) == 0) {
 116                 continue;
 117             }
 118             if (fnmatch(cfilter.data(), name, 0) != 0) {
 119                 continue;
 120             }

WebKit uses ! instead of == NULL:
13         while ((dp = readdir(dir)) != NULL) {

Otherwise this seems sane enough.  Doing so many patches on one bug makes it really hard to read the comments after a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124814</commentid>
    <comment_count>50</comment_count>
      <attachid>31060</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-08 14:34:07 -0700</bug_when>
    <thetext>Comment on attachment 31060
new patch part 5 with ChangeLog

Looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124815</commentid>
    <comment_count>51</comment_count>
      <attachid>31061</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-08 14:36:24 -0700</bug_when>
    <thetext>Comment on attachment 31061
new patch part 4 with ChangeLog

It seems:
 199 static inline String singleCharacterString(int c) 

shoudl take a UChar32 instead of an &quot;int&quot;

So sad more of this code can&apos;t be shared between platforms.

Looks sane enough though.  When landing, please fix the one nit above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124841</commentid>
    <comment_count>52</comment_count>
      <attachid>31070</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 16:42:18 -0700</bug_when>
    <thetext>Created attachment 31070
new patch part 3 with ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124846</commentid>
    <comment_count>53</comment_count>
      <attachid>31061</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 17:16:50 -0700</bug_when>
    <thetext>Comment on attachment 31061
new patch part 4 with ChangeLog

&gt;&lt;html&gt;&lt;body&gt;&lt;pre style=&quot;word-wrap: break-word; white-space: pre-wrap;&quot;&gt;Index: WebCore/ChangeLog
&gt;===================================================================
&gt;--- WebCore/ChangeLog	(revision 44504)
&gt;+++ WebCore/ChangeLog	(working copy)
&gt;@@ -1,3 +1,14 @@
&gt;+
&gt;+2009-06-08  Feng Qian  &lt;feng@chromium.org&gt;
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        Add Android port files to WebCore/platform (part 4).
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=23296
&gt;+
&gt;+        * platform/android/KeyEventAndroid.cpp: Added.
&gt;+        * platform/android/KeyboardCodes.h: Added.
&gt;+
&gt; 2009-06-08  Adam Langley  &lt;agl@google.com&gt;
&gt; 
&gt;         Reviewed by Eric Siedel.
&gt;Index: WebCore/platform/android/KeyEventAndroid.cpp
&gt;===================================================================
&gt;--- WebCore/platform/android/KeyEventAndroid.cpp	(revision 0)
&gt;+++ WebCore/platform/android/KeyEventAndroid.cpp	(revision 0)
&gt;@@ -0,0 +1,273 @@
&gt;+/*
&gt;+ * Copyright 2007, The Android Open Source Project
&gt;+ * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
&gt;+ * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com
&gt;+ * Copyright (C) 2007 Holger Hans Peter Freyther
&gt;+ * Copyright (C) 2008 Collabora, Ltd.  All rights reserved.
&gt;+ * All rights reserved.
&gt;+ *
&gt;+ * Redistribution and use in source and binary forms, with or without
&gt;+ * modification, are permitted provided that the following conditions
&gt;+ * are met:
&gt;+ *  * Redistributions of source code must retain the above copyright
&gt;+ *    notice, this list of conditions and the following disclaimer.
&gt;+ *  * Redistributions in binary form must reproduce the above copyright
&gt;+ *    notice, this list of conditions and the following disclaimer in the
&gt;+ *    documentation and/or other materials provided with the distribution.
&gt;+ *
&gt;+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS&apos;&apos; AND ANY
&gt;+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt;+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt;+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt;+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt;+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt;+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt;+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt;+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt;+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt;+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt;+ */
&gt;+
&gt;+#include &quot;config.h&quot;
&gt;+#include &quot;PlatformKeyboardEvent.h&quot;
&gt;+
&gt;+#include &quot;KeyboardCodes.h&quot;
&gt;+#include &quot;NotImplemented.h&quot;
&gt;+#include &lt;ui/KeycodeLabels.h&gt;
&gt;+
&gt;+namespace WebCore {
&gt;+
&gt;+// compare to same function in gdk/KeyEventGdk.cpp
&gt;+static int windowsKeyCodeForKeyEvent(unsigned int keyCode)
&gt;+{
&gt;+    // Does not provide all key codes, and does not handle all keys.
&gt;+    switch(keyCode) {
&gt;+        case kKeyCodeDel:
&gt;+            return VK_BACK;
&gt;+        case kKeyCodeTab:
&gt;+            return VK_TAB;
&gt;+        case kKeyCodeClear:
&gt;+            return VK_CLEAR;
&gt;+        case kKeyCodeDpadCenter:
&gt;+        case kKeyCodeNewline:
&gt;+            return VK_RETURN;
&gt;+        case kKeyCodeShiftLeft:
&gt;+        case kKeyCodeShiftRight:
&gt;+            return VK_SHIFT;
&gt;+        // back will serve as escape, although we probably do not have access to it
&gt;+        case kKeyCodeBack:
&gt;+            return VK_ESCAPE;
&gt;+        case kKeyCodeSpace:
&gt;+            return VK_SPACE;
&gt;+        case kKeyCodeHome:
&gt;+            return VK_HOME;
&gt;+        case kKeyCodeDpadLeft:
&gt;+            return VK_LEFT;
&gt;+        case kKeyCodeDpadUp:
&gt;+            return VK_UP;
&gt;+        case kKeyCodeDpadRight:
&gt;+            return VK_RIGHT;
&gt;+        case kKeyCodeDpadDown:
&gt;+            return VK_DOWN;
&gt;+        case kKeyCode0:
&gt;+            return VK_0;
&gt;+        case kKeyCode1:
&gt;+            return VK_1;
&gt;+        case kKeyCode2:
&gt;+            return VK_2;
&gt;+        case kKeyCode3:
&gt;+            return VK_3;
&gt;+        case kKeyCode4:
&gt;+            return VK_4;
&gt;+        case kKeyCode5:
&gt;+            return VK_5;
&gt;+        case kKeyCode6:
&gt;+            return VK_6;
&gt;+        case kKeyCode7:
&gt;+            return VK_7;
&gt;+        case kKeyCode8:
&gt;+            return VK_8;
&gt;+        case kKeyCode9:
&gt;+            return VK_9;
&gt;+        case kKeyCodeA:
&gt;+            return VK_A;
&gt;+        case kKeyCodeB:
&gt;+            return VK_B;
&gt;+        case kKeyCodeC:
&gt;+            return VK_C;
&gt;+        case kKeyCodeD:
&gt;+            return VK_D;
&gt;+        case kKeyCodeE:
&gt;+            return VK_E;
&gt;+        case kKeyCodeF:
&gt;+            return VK_F;
&gt;+        case kKeyCodeG:
&gt;+            return VK_G;
&gt;+        case kKeyCodeH:
&gt;+            return VK_H;
&gt;+        case kKeyCodeI:
&gt;+            return VK_I;
&gt;+        case kKeyCodeJ:
&gt;+            return VK_J;
&gt;+        case kKeyCodeK:
&gt;+            return VK_K;
&gt;+        case kKeyCodeL:
&gt;+            return VK_L;
&gt;+        case kKeyCodeM:
&gt;+            return VK_M;
&gt;+        case kKeyCodeN:
&gt;+            return VK_N;
&gt;+        case kKeyCodeO:
&gt;+            return VK_O;
&gt;+        case kKeyCodeP:
&gt;+            return VK_P;
&gt;+        case kKeyCodeQ:
&gt;+            return VK_Q;
&gt;+        case kKeyCodeR:
&gt;+            return VK_R;
&gt;+        case kKeyCodeS:
&gt;+            return VK_S;
&gt;+        case kKeyCodeT:
&gt;+            return VK_T;
&gt;+        case kKeyCodeU:
&gt;+            return VK_U;
&gt;+        case kKeyCodeV:
&gt;+            return VK_V;
&gt;+        case kKeyCodeW:
&gt;+            return VK_W;
&gt;+        case kKeyCodeX:
&gt;+            return VK_X;
&gt;+        case kKeyCodeY:
&gt;+            return VK_Y;
&gt;+        case kKeyCodeZ:
&gt;+            return VK_Z;
&gt;+        // colon
&gt;+        case kKeyCodeSemicolon:
&gt;+            return VK_OEM_1;
&gt;+        case kKeyCodeComma:
&gt;+            return VK_OEM_COMMA;
&gt;+        case kKeyCodeMinus:
&gt;+            return VK_OEM_MINUS;
&gt;+        case kKeyCodeEquals:
&gt;+            return VK_OEM_PLUS;
&gt;+        case kKeyCodePeriod:
&gt;+            return VK_OEM_PERIOD;
&gt;+        case kKeyCodeSlash:
&gt;+            return VK_OEM_2;
&gt;+        // maybe not the right choice
&gt;+        case kKeyCodeLeftBracket:
&gt;+            return VK_OEM_4;
&gt;+        case kKeyCodeBackslash:
&gt;+            return VK_OEM_5;
&gt;+        case kKeyCodeRightBracket:
&gt;+            return VK_OEM_6;
&gt;+        default:
&gt;+            return 0;
&gt;+    }
&gt;+}
&gt;+
&gt;+static String keyIdentifierForAndroidKeyCode(int keyCode)
&gt;+{
&gt;+    // Does not return all of the same key identifiers, and
&gt;+    // does not handle all the keys.
&gt;+    switch (keyCode) {
&gt;+        case kKeyCodeClear:
&gt;+            return &quot;Clear&quot;;
&gt;+        case kKeyCodeNewline:
&gt;+        case kKeyCodeDpadCenter:
&gt;+            return &quot;Enter&quot;;
&gt;+        case kKeyCodeHome:
&gt;+            return &quot;Home&quot;;
&gt;+        case kKeyCodeDpadDown:
&gt;+            return &quot;Down&quot;;
&gt;+        case kKeyCodeDpadLeft:
&gt;+            return &quot;Left&quot;;
&gt;+        case kKeyCodeDpadRight:
&gt;+            return &quot;Right&quot;;
&gt;+        case kKeyCodeDpadUp:
&gt;+            return &quot;Up&quot;;
&gt;+        // Standard says that DEL becomes U+00007F.
&gt;+        case kKeyCodeDel:
&gt;+            return &quot;U+00007F&quot;;
&gt;+        default:
&gt;+            char upper[16];
&gt;+            sprintf(upper, &quot;U+%06X&quot;, windowsKeyCodeForKeyEvent(keyCode));
&gt;+            return String(upper);
&gt;+    }
&gt;+}
&gt;+
&gt;+static inline String singleCharacterString(UChar32 c) 
&gt;+{
&gt;+    if (!c)
&gt;+        return String();
&gt;+    if (c &gt; 0xffff) {
&gt;+        UChar lead = U16_LEAD(c);
&gt;+        UChar trail = U16_TRAIL(c);
&gt;+        UChar utf16[2] = {lead, trail};
&gt;+        return String(utf16, 2);
&gt;+    }
&gt;+    UChar n = (UChar)c;
&gt;+    return String(&amp;n, 1);
&gt;+}
&gt;+
&gt;+PlatformKeyboardEvent::PlatformKeyboardEvent(int keyCode, UChar32 unichar,
&gt;+                                             Type type, int repeatCount,
&gt;+                                             ModifierKey mods)
&gt;+    : m_type(type)
&gt;+    , m_text(singleCharacterString(unichar))
&gt;+    , m_unmodifiedText(singleCharacterString(unichar))
&gt;+    , m_keyIdentifier(keyIdentifierForAndroidKeyCode(keyCode))
&gt;+    , m_autoRepeat(repeatCount &gt; 0)
&gt;+    , m_windowsVirtualKeyCode(windowsKeyCodeForKeyEvent(keyCode))
&gt;+    , m_nativeVirtualKeyCode(keyCode)
&gt;+    , m_isKeypad(false)
&gt;+    , m_shiftKey((mods &amp; ShiftKey))
&gt;+    , m_ctrlKey((mods &amp; CtrlKey))
&gt;+    , m_altKey((mods &amp; AltKey))
&gt;+    , m_metaKey((mods &amp; MetaKey))
&gt;+    // added for android
&gt;+    , m_repeatCount(repeatCount)
&gt;+    , m_unichar(unichar)
&gt;+{
&gt;+    // Copied from the mac port
&gt;+    if (m_windowsVirtualKeyCode == &apos;\r&apos;) {
&gt;+        m_text = &quot;\r&quot;;
&gt;+        m_unmodifiedText = &quot;\r&quot;;
&gt;+    }
&gt;+
&gt;+    if (m_text == &quot;\x7F&quot;)
&gt;+        m_text = &quot;\x8&quot;;
&gt;+    if (m_unmodifiedText == &quot;\x7F&quot;)
&gt;+        m_unmodifiedText = &quot;\x8&quot;;
&gt;+
&gt;+    if (m_windowsVirtualKeyCode == 9) {
&gt;+        m_text = &quot;\x9&quot;;
&gt;+        m_unmodifiedText = &quot;\x9&quot;;
&gt;+    }
&gt;+}
&gt;+
&gt;+bool PlatformKeyboardEvent::currentCapsLockState()
&gt;+{
&gt;+    notImplemented();
&gt;+    return false;
&gt;+}
&gt;+
&gt;+void PlatformKeyboardEvent::disambiguateKeyDownEvent(Type type, bool backwardCompatibilityMode)
&gt;+{
&gt;+    // Copied with modification from the mac port.
&gt;+    ASSERT(m_type == KeyDown);
&gt;+    ASSERT(type == RawKeyDown || type == Char);
&gt;+    m_type = type;
&gt;+    if (backwardCompatibilityMode)
&gt;+        return;
&gt;+
&gt;+    if (type == RawKeyDown) {
&gt;+        m_text = String();
&gt;+        m_unmodifiedText = String();
&gt;+    } else {
&gt;+        m_keyIdentifier = String();
&gt;+        m_windowsVirtualKeyCode = 0;
&gt;+    }
&gt;+}
&gt;+
&gt;+} // namespace WebCore
&gt;Index: WebCore/platform/android/KeyboardCodes.h
&gt;===================================================================
&gt;--- WebCore/platform/android/KeyboardCodes.h	(revision 0)
&gt;+++ WebCore/platform/android/KeyboardCodes.h	(revision 0)
&gt;@@ -0,0 +1,545 @@
&gt;+/*
&gt;+ * Copyright 2009, The Android Open Source Project
&gt;+ * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com 
&gt;+ *
&gt;+ * All rights reserved.
&gt;+ *
&gt;+ * Redistribution and use in source and binary forms, with or without
&gt;+ * modification, are permitted provided that the following conditions
&gt;+ * are met:
&gt;+ * 1. Redistributions of source code must retain the above copyright
&gt;+ *    notice, this list of conditions and the following disclaimer.
&gt;+ * 2. Redistributions in binary form must reproduce the above copyright
&gt;+ *    notice, this list of conditions and the following disclaimer in the
&gt;+ *    documentation and/or other materials provided with the distribution.
&gt;+ *
&gt;+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt;+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
&gt;+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
&gt;+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
&gt;+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
&gt;+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
&gt;+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
&gt;+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
&gt;+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt;+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt;+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
&gt;+ */
&gt;+
&gt;+#ifndef KeyboardCodes_H
&gt;+#define KeyboardCodes_H
&gt;+
&gt;+namespace WebCore {
&gt;+
&gt;+// VK_LBUTTON (01) Left mouse button
&gt;+// VK_RBUTTON (02) Right mouse button
&gt;+// VK_CANCEL (03) Control-break processing
&gt;+// VK_MBUTTON (04) Middle mouse button (three-button mouse)
&gt;+// VK_XBUTTON1 (05)
&gt;+// VK_XBUTTON2 (06)
&gt;+
&gt;+// VK_BACK (08) BACKSPACE key
&gt;+const int VK_BACK = 0x08;
&gt;+
&gt;+// VK_TAB (09) TAB key
&gt;+const int VK_TAB = 0x09;
&gt;+
&gt;+// VK_CLEAR (0C) CLEAR key
&gt;+const int VK_CLEAR = 0x0C;
&gt;+
&gt;+// VK_RETURN (0D)
&gt;+const int VK_RETURN = 0x0D;
&gt;+
&gt;+// VK_SHIFT (10) SHIFT key
&gt;+const int VK_SHIFT = 0x10;
&gt;+
&gt;+// VK_CONTROL (11) CTRL key
&gt;+const int VK_CONTROL = 0x11;
&gt;+
&gt;+// VK_MENU (12) ALT key
&gt;+const int VK_MENU = 0x12;
&gt;+
&gt;+// VK_PAUSE (13) PAUSE key
&gt;+const int VK_PAUSE = 0x13;
&gt;+
&gt;+// VK_CAPITAL (14) CAPS LOCK key
&gt;+const int VK_CAPITAL = 0x14;
&gt;+
&gt;+// VK_KANA (15) Input Method Editor (IME) Kana mode
&gt;+const int VK_KANA = 0x15;
&gt;+
&gt;+// VK_HANGUEL (15) IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
&gt;+// VK_HANGUL (15) IME Hangul mode
&gt;+const int VK_HANGUL = 0x15;
&gt;+
&gt;+// VK_JUNJA (17) IME Junja mode
&gt;+const int VK_JUNJA = 0x17;
&gt;+
&gt;+// VK_FINAL (18) IME final mode
&gt;+const int VK_FINAL = 0x18;
&gt;+
&gt;+// VK_HANJA (19) IME Hanja mode
&gt;+const int VK_HANJA = 0x19;
&gt;+
&gt;+// VK_KANJI (19) IME Kanji mode
&gt;+const int VK_KANJI = 0x19;
&gt;+
&gt;+// VK_ESCAPE (1B) ESC key
&gt;+const int VK_ESCAPE = 0x1B;
&gt;+
&gt;+// VK_CONVERT (1C) IME convert
&gt;+const int VK_CONVERT = 0x1C;
&gt;+
&gt;+// VK_NONCONVERT (1D) IME nonconvert
&gt;+const int VK_NONCONVERT = 0x1D;
&gt;+
&gt;+// VK_ACCEPT (1E) IME accept
&gt;+const int VK_ACCEPT = 0x1E;
&gt;+
&gt;+// VK_MODECHANGE (1F) IME mode change request
&gt;+const int VK_MODECHANGE = 0x1F;
&gt;+
&gt;+// VK_SPACE (20) SPACEBAR
&gt;+const int VK_SPACE = 0x20;
&gt;+
&gt;+// VK_PRIOR (21) PAGE UP key
&gt;+const int VK_PRIOR = 0x21;
&gt;+
&gt;+// VK_NEXT (22) PAGE DOWN key
&gt;+const int VK_NEXT = 0x22;
&gt;+
&gt;+// VK_END (23) END key
&gt;+const int VK_END = 0x23;
&gt;+
&gt;+// VK_HOME (24) HOME key
&gt;+const int VK_HOME = 0x24;
&gt;+
&gt;+// VK_LEFT (25) LEFT ARROW key
&gt;+const int VK_LEFT = 0x25;
&gt;+
&gt;+// VK_UP (26) UP ARROW key
&gt;+const int VK_UP = 0x26;
&gt;+
&gt;+// VK_RIGHT (27) RIGHT ARROW key
&gt;+const int VK_RIGHT = 0x27;
&gt;+
&gt;+// VK_DOWN (28) DOWN ARROW key
&gt;+const int VK_DOWN = 0x28;
&gt;+
&gt;+// VK_SELECT (29) SELECT key
&gt;+const int VK_SELECT = 0x29;
&gt;+
&gt;+// VK_PRINT (2A) PRINT key
&gt;+const int VK_PRINT = 0x2A;
&gt;+
&gt;+// VK_EXECUTE (2B) EXECUTE key
&gt;+const int VK_EXECUTE = 0x2B;
&gt;+
&gt;+// VK_SNAPSHOT (2C) PRINT SCREEN key
&gt;+const int VK_SNAPSHOT = 0x2C;
&gt;+
&gt;+// VK_INSERT (2D) INS key
&gt;+const int VK_INSERT = 0x2D;
&gt;+
&gt;+// VK_DELETE (2E) DEL key
&gt;+const int VK_DELETE = 0x2E;
&gt;+
&gt;+// VK_HELP (2F) HELP key
&gt;+const int VK_HELP = 0x2F;
&gt;+
&gt;+// (30) 0 key
&gt;+const int VK_0 = 0x30;
&gt;+
&gt;+// (31) 1 key
&gt;+const int VK_1 = 0x31;
&gt;+
&gt;+// (32) 2 key
&gt;+const int VK_2 = 0x32;
&gt;+
&gt;+// (33) 3 key
&gt;+const int VK_3 = 0x33;
&gt;+
&gt;+// (34) 4 key
&gt;+const int VK_4 = 0x34;
&gt;+
&gt;+// (35) 5 key;
&gt;+
&gt;+const int VK_5 = 0x35;
&gt;+
&gt;+// (36) 6 key
&gt;+const int VK_6 = 0x36;
&gt;+
&gt;+// (37) 7 key
&gt;+const int VK_7 = 0x37;
&gt;+
&gt;+// (38) 8 key
&gt;+const int VK_8 = 0x38;
&gt;+
&gt;+// (39) 9 key
&gt;+const int VK_9 = 0x39;
&gt;+
&gt;+// (41) A key
&gt;+const int VK_A = 0x41;
&gt;+
&gt;+// (42) B key
&gt;+const int VK_B = 0x42;
&gt;+
&gt;+// (43) C key
&gt;+const int VK_C = 0x43;
&gt;+
&gt;+// (44) D key
&gt;+const int VK_D = 0x44;
&gt;+
&gt;+// (45) E key
&gt;+const int VK_E = 0x45;
&gt;+
&gt;+// (46) F key
&gt;+const int VK_F = 0x46;
&gt;+
&gt;+// (47) G key
&gt;+const int VK_G = 0x47;
&gt;+
&gt;+// (48) H key
&gt;+const int VK_H = 0x48;
&gt;+
&gt;+// (49) I key
&gt;+const int VK_I = 0x49;
&gt;+
&gt;+// (4A) J key
&gt;+const int VK_J = 0x4A;
&gt;+
&gt;+// (4B) K key
&gt;+const int VK_K = 0x4B;
&gt;+
&gt;+// (4C) L key
&gt;+const int VK_L = 0x4C;
&gt;+
&gt;+// (4D) M key
&gt;+const int VK_M = 0x4D;
&gt;+
&gt;+// (4E) N key
&gt;+const int VK_N = 0x4E;
&gt;+
&gt;+// (4F) O key
&gt;+const int VK_O = 0x4F;
&gt;+
&gt;+// (50) P key
&gt;+const int VK_P = 0x50;
&gt;+
&gt;+// (51) Q key
&gt;+const int VK_Q = 0x51;
&gt;+
&gt;+// (52) R key
&gt;+const int VK_R = 0x52;
&gt;+
&gt;+// (53) S key
&gt;+const int VK_S = 0x53;
&gt;+
&gt;+// (54) T key
&gt;+const int VK_T = 0x54;
&gt;+
&gt;+// (55) U key
&gt;+const int VK_U = 0x55;
&gt;+
&gt;+// (56) V key
&gt;+const int VK_V = 0x56;
&gt;+
&gt;+// (57) W key
&gt;+const int VK_W = 0x57;
&gt;+
&gt;+// (58) X key
&gt;+const int VK_X = 0x58;
&gt;+
&gt;+// (59) Y key
&gt;+const int VK_Y = 0x59;
&gt;+
&gt;+// (5A) Z key
&gt;+const int VK_Z = 0x5A;
&gt;+
&gt;+// VK_LWIN (5B) Left Windows key (Microsoft Natural keyboard)
&gt;+const int VK_LWIN = 0x5B;
&gt;+
&gt;+// VK_RWIN (5C) Right Windows key (Natural keyboard)
&gt;+const int VK_RWIN = 0x5C;
&gt;+
&gt;+// VK_APPS (5D) Applications key (Natural keyboard)
&gt;+const int VK_APPS = 0x5D;
&gt;+
&gt;+// VK_SLEEP (5F) Computer Sleep key
&gt;+const int VK_SLEEP = 0x5F;
&gt;+
&gt;+// VK_NUMPAD0 (60) Numeric keypad 0 key
&gt;+const int VK_NUMPAD0 = 0x60;
&gt;+
&gt;+// VK_NUMPAD1 (61) Numeric keypad 1 key
&gt;+const int VK_NUMPAD1 = 0x61;
&gt;+
&gt;+// VK_NUMPAD2 (62) Numeric keypad 2 key
&gt;+const int VK_NUMPAD2 = 0x62;
&gt;+
&gt;+// VK_NUMPAD3 (63) Numeric keypad 3 key
&gt;+const int VK_NUMPAD3 = 0x63;
&gt;+
&gt;+// VK_NUMPAD4 (64) Numeric keypad 4 key
&gt;+const int VK_NUMPAD4 = 0x64;
&gt;+
&gt;+// VK_NUMPAD5 (65) Numeric keypad 5 key
&gt;+const int VK_NUMPAD5 = 0x65;
&gt;+
&gt;+// VK_NUMPAD6 (66) Numeric keypad 6 key
&gt;+const int VK_NUMPAD6 = 0x66;
&gt;+
&gt;+// VK_NUMPAD7 (67) Numeric keypad 7 key
&gt;+const int VK_NUMPAD7 = 0x67;
&gt;+
&gt;+// VK_NUMPAD8 (68) Numeric keypad 8 key
&gt;+const int VK_NUMPAD8 = 0x68;
&gt;+
&gt;+// VK_NUMPAD9 (69) Numeric keypad 9 key
&gt;+const int VK_NUMPAD9 = 0x69;
&gt;+
&gt;+// VK_MULTIPLY (6A) Multiply key
&gt;+const int VK_MULTIPLY = 0x6A;
&gt;+
&gt;+// VK_ADD (6B) Add key
&gt;+const int VK_ADD = 0x6B;
&gt;+
&gt;+// VK_SEPARATOR (6C) Separator key
&gt;+const int VK_SEPARATOR = 0x6C;
&gt;+
&gt;+// VK_SUBTRACT (6D) Subtract key
&gt;+const int VK_SUBTRACT = 0x6D;
&gt;+
&gt;+// VK_DECIMAL (6E) Decimal key
&gt;+const int VK_DECIMAL = 0x6E;
&gt;+
&gt;+// VK_DIVIDE (6F) Divide key
&gt;+const int VK_DIVIDE = 0x6F;
&gt;+
&gt;+// VK_F1 (70) F1 key
&gt;+const int VK_F1 = 0x70;
&gt;+
&gt;+// VK_F2 (71) F2 key
&gt;+const int VK_F2 = 0x71;
&gt;+
&gt;+// VK_F3 (72) F3 key
&gt;+const int VK_F3 = 0x72;
&gt;+
&gt;+// VK_F4 (73) F4 key
&gt;+const int VK_F4 = 0x73;
&gt;+
&gt;+// VK_F5 (74) F5 key
&gt;+const int VK_F5 = 0x74;
&gt;+
&gt;+// VK_F6 (75) F6 key
&gt;+const int VK_F6 = 0x75;
&gt;+
&gt;+// VK_F7 (76) F7 key
&gt;+const int VK_F7 = 0x76;
&gt;+
&gt;+// VK_F8 (77) F8 key
&gt;+const int VK_F8 = 0x77;
&gt;+
&gt;+// VK_F9 (78) F9 key
&gt;+const int VK_F9 = 0x78;
&gt;+
&gt;+// VK_F10 (79) F10 key
&gt;+const int VK_F10 = 0x79;
&gt;+
&gt;+// VK_F11 (7A) F11 key
&gt;+const int VK_F11 = 0x7A;
&gt;+
&gt;+// VK_F12 (7B) F12 key
&gt;+const int VK_F12 = 0x7B;
&gt;+
&gt;+// VK_F13 (7C) F13 key
&gt;+const int VK_F13 = 0x7C;
&gt;+
&gt;+// VK_F14 (7D) F14 key
&gt;+const int VK_F14 = 0x7D;
&gt;+
&gt;+// VK_F15 (7E) F15 key
&gt;+const int VK_F15 = 0x7E;
&gt;+
&gt;+// VK_F16 (7F) F16 key
&gt;+const int VK_F16 = 0x7F;
&gt;+
&gt;+// VK_F17 (80H) F17 key
&gt;+const int VK_F17 = 0x80;
&gt;+
&gt;+// VK_F18 (81H) F18 key
&gt;+const int VK_F18 = 0x81;
&gt;+
&gt;+// VK_F19 (82H) F19 key
&gt;+const int VK_F19 = 0x82;
&gt;+
&gt;+// VK_F20 (83H) F20 key
&gt;+const int VK_F20 = 0x83;
&gt;+
&gt;+// VK_F21 (84H) F21 key
&gt;+const int VK_F21 = 0x84;
&gt;+
&gt;+// VK_F22 (85H) F22 key
&gt;+const int VK_F22 = 0x85;
&gt;+
&gt;+// VK_F23 (86H) F23 key
&gt;+const int VK_F23 = 0x86;
&gt;+
&gt;+// VK_F24 (87H) F24 key
&gt;+const int VK_F24 = 0x87;
&gt;+
&gt;+// VK_NUMLOCK (90) NUM LOCK key
&gt;+const int VK_NUMLOCK = 0x90;
&gt;+
&gt;+// VK_SCROLL (91) SCROLL LOCK key
&gt;+const int VK_SCROLL = 0x91;
&gt;+
&gt;+// VK_LSHIFT (A0) Left SHIFT key
&gt;+const int VK_LSHIFT = 0xA0;
&gt;+
&gt;+// VK_RSHIFT (A1) Right SHIFT key
&gt;+const int VK_RSHIFT = 0xA1;
&gt;+
&gt;+// VK_LCONTROL (A2) Left CONTROL key
&gt;+const int VK_LCONTROL = 0xA2;
&gt;+
&gt;+// VK_RCONTROL (A3) Right CONTROL key
&gt;+const int VK_RCONTROL = 0xA3;
&gt;+
&gt;+// VK_LMENU (A4) Left MENU key
&gt;+const int VK_LMENU = 0xA4;
&gt;+
&gt;+// VK_RMENU (A5) Right MENU key
&gt;+const int VK_RMENU = 0xA5;
&gt;+
&gt;+// VK_BROWSER_BACK (A6) Windows 2000/XP: Browser Back key
&gt;+const int VK_BROWSER_BACK = 0xA6;
&gt;+
&gt;+// VK_BROWSER_FORWARD (A7) Windows 2000/XP: Browser Forward key
&gt;+const int VK_BROWSER_FORWARD = 0xA7;
&gt;+
&gt;+// VK_BROWSER_REFRESH (A8) Windows 2000/XP: Browser Refresh key
&gt;+const int VK_BROWSER_REFRESH = 0xA8;
&gt;+
&gt;+// VK_BROWSER_STOP (A9) Windows 2000/XP: Browser Stop key
&gt;+const int VK_BROWSER_STOP = 0xA9;
&gt;+
&gt;+// VK_BROWSER_SEARCH (AA) Windows 2000/XP: Browser Search key
&gt;+const int VK_BROWSER_SEARCH = 0xAA;
&gt;+
&gt;+// VK_BROWSER_FAVORITES (AB) Windows 2000/XP: Browser Favorites key
&gt;+const int VK_BROWSER_FAVORITES = 0xAB;
&gt;+
&gt;+// VK_BROWSER_HOME (AC) Windows 2000/XP: Browser Start and Home key
&gt;+const int VK_BROWSER_HOME = 0xAC;
&gt;+
&gt;+// VK_VOLUME_MUTE (AD) Windows 2000/XP: Volume Mute key
&gt;+const int VK_VOLUME_MUTE = 0xAD;
&gt;+
&gt;+// VK_VOLUME_DOWN (AE) Windows 2000/XP: Volume Down key
&gt;+const int VK_VOLUME_DOWN = 0xAE;
&gt;+
&gt;+// VK_VOLUME_UP (AF) Windows 2000/XP: Volume Up key
&gt;+const int VK_VOLUME_UP = 0xAF;
&gt;+
&gt;+// VK_MEDIA_NEXT_TRACK (B0) Windows 2000/XP: Next Track key
&gt;+const int VK_MEDIA_NEXT_TRACK = 0xB0;
&gt;+
&gt;+// VK_MEDIA_PREV_TRACK (B1) Windows 2000/XP: Previous Track key
&gt;+const int VK_MEDIA_PREV_TRACK = 0xB1;
&gt;+
&gt;+// VK_MEDIA_STOP (B2) Windows 2000/XP: Stop Media key
&gt;+const int VK_MEDIA_STOP = 0xB2;
&gt;+
&gt;+// VK_MEDIA_PLAY_PAUSE (B3) Windows 2000/XP: Play/Pause Media key
&gt;+const int VK_MEDIA_PLAY_PAUSE = 0xB3;
&gt;+
&gt;+// VK_LAUNCH_MAIL (B4) Windows 2000/XP: Start Mail key
&gt;+const int VK_MEDIA_LAUNCH_MAIL = 0xB4;
&gt;+
&gt;+// VK_LAUNCH_MEDIA_SELECT (B5) Windows 2000/XP: Select Media key
&gt;+const int VK_MEDIA_LAUNCH_MEDIA_SELECT = 0xB5;
&gt;+
&gt;+// VK_LAUNCH_APP1 (B6) Windows 2000/XP: Start Application 1 key
&gt;+const int VK_MEDIA_LAUNCH_APP1 = 0xB6;
&gt;+
&gt;+// VK_LAUNCH_APP2 (B7) Windows 2000/XP: Start Application 2 key
&gt;+const int VK_MEDIA_LAUNCH_APP2 = 0xB7;
&gt;+
&gt;+// VK_OEM_1 (BA) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the &apos;;:&apos; key
&gt;+const int VK_OEM_1 = 0xBA;
&gt;+
&gt;+// VK_OEM_PLUS (BB) Windows 2000/XP: For any country/region, the &apos;+&apos; key
&gt;+const int VK_OEM_PLUS = 0xBB;
&gt;+
&gt;+// VK_OEM_COMMA (BC) Windows 2000/XP: For any country/region, the &apos;,&apos; key
&gt;+const int VK_OEM_COMMA = 0xBC;
&gt;+
&gt;+// VK_OEM_MINUS (BD) Windows 2000/XP: For any country/region, the &apos;-&apos; key
&gt;+const int VK_OEM_MINUS = 0xBD;
&gt;+
&gt;+// VK_OEM_PERIOD (BE) Windows 2000/XP: For any country/region, the &apos;.&apos; key
&gt;+const int VK_OEM_PERIOD = 0xBE;
&gt;+
&gt;+// VK_OEM_2 (BF) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the &apos;/?&apos; key
&gt;+const int VK_OEM_2 = 0xBF;
&gt;+
&gt;+// VK_OEM_3 (C0) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the &apos;`~&apos; key
&gt;+const int VK_OEM_3 = 0xC0;
&gt;+
&gt;+// VK_OEM_4 (DB) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the &apos;[{&apos; key
&gt;+const int VK_OEM_4 = 0xDB;
&gt;+
&gt;+// VK_OEM_5 (DC) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the &apos;\|&apos; key
&gt;+const int VK_OEM_5 = 0xDC;
&gt;+
&gt;+// VK_OEM_6 (DD) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the &apos;]}&apos; key
&gt;+const int VK_OEM_6 = 0xDD;
&gt;+
&gt;+// VK_OEM_7 (DE) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the &apos;single-quote/double-quote&apos; key
&gt;+const int VK_OEM_7 = 0xDE;
&gt;+
&gt;+// VK_OEM_8 (DF) Used for miscellaneous characters; it can vary by keyboard.
&gt;+const int VK_OEM_8 = 0xDF;
&gt;+
&gt;+// VK_OEM_102 (E2) Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
&gt;+const int VK_OEM_102 = 0xE2;
&gt;+
&gt;+// VK_PROCESSKEY (E5) Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
&gt;+const int VK_PROCESSKEY = 0xE5;
&gt;+
&gt;+// VK_PACKET (E7) Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT,SendInput, WM_KEYDOWN, and WM_KEYUP
&gt;+const int VK_PACKET = 0xE7;
&gt;+
&gt;+// VK_ATTN (F6) Attn key
&gt;+const int VK_ATTN = 0xF6;
&gt;+
&gt;+// VK_CRSEL (F7) CrSel key
&gt;+const int VK_CRSEL = 0xF7;
&gt;+
&gt;+// VK_EXSEL (F8) ExSel key
&gt;+const int VK_EXSEL = 0xF8;
&gt;+
&gt;+// VK_EREOF (F9) Erase EOF key
&gt;+const int VK_EREOF = 0xF9;
&gt;+
&gt;+// VK_PLAY (FA) Play key
&gt;+const int VK_PLAY = 0xFA;
&gt;+
&gt;+// VK_ZOOM (FB) Zoom key
&gt;+const int VK_ZOOM = 0xFB;
&gt;+
&gt;+// VK_NONAME (FC) Reserved for future use
&gt;+const int VK_NONAME = 0xFC;
&gt;+
&gt;+// VK_PA1 (FD) PA1 key
&gt;+const int VK_PA1 = 0xFD;
&gt;+
&gt;+// VK_OEM_CLEAR (FE) Clear key
&gt;+const int VK_OEM_CLEAR = 0xFE;
&gt;+
&gt;+const int VK_UNKNOWN = 0;
&gt;+
&gt;+}
&gt;+
&gt;+#endif // KeyboardCodes_h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124848</commentid>
    <comment_count>54</comment_count>
      <attachid>31074</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 17:20:59 -0700</bug_when>
    <thetext>Created attachment 31074
new patch part 4 with ChangeLog

The same reviewed and approved patch as the previous one, except change the signature from singleCharacterString(int c) to singleCharacterString(UChar32 c)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124857</commentid>
    <comment_count>55</comment_count>
      <attachid>30004</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 17:56:43 -0700</bug_when>
    <thetext>Comment on attachment 30004
new patch part 8 with ChangeLog

spin off</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124858</commentid>
    <comment_count>56</comment_count>
      <attachid>30005</attachid>
    <who name="Feng Qian">feng</who>
    <bug_when>2009-06-08 17:57:01 -0700</bug_when>
    <thetext>Comment on attachment 30005
new patch part 9 with ChangeLog

spin off</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124868</commentid>
    <comment_count>57</comment_count>
      <attachid>31070</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-08 18:14:47 -0700</bug_when>
    <thetext>Comment on attachment 31070
new patch part 3 with ChangeLog

lgtm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124869</commentid>
    <comment_count>58</comment_count>
      <attachid>31074</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-08 18:15:14 -0700</bug_when>
    <thetext>Comment on attachment 31074
new patch part 4 with ChangeLog

lgtm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125180</commentid>
    <comment_count>59</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-10 11:53:43 -0700</bug_when>
    <thetext>Patch #1 was landed in http://trac.webkit.org/changeset/43012.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125182</commentid>
    <comment_count>60</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-10 12:01:50 -0700</bug_when>
    <thetext>Patch #2 landed in @r44580.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125183</commentid>
    <comment_count>61</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-10 12:05:21 -0700</bug_when>
    <thetext>Part 3 landed in @r44581.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125185</commentid>
    <comment_count>62</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-10 12:07:22 -0700</bug_when>
    <thetext>Patch #4 landed in @r44582.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125187</commentid>
    <comment_count>63</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-10 12:09:16 -0700</bug_when>
    <thetext>Patch #5 landed in @r44583.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125188</commentid>
    <comment_count>64</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-10 12:12:23 -0700</bug_when>
    <thetext>Patch #7 landed in @r44584.

Patches 6, 8, and 9 appear to have been disabled and I assume are not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125191</commentid>
    <comment_count>65</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-10 12:16:32 -0700</bug_when>
    <thetext>I see:

Patch #6 was moved to https://bugs.webkit.org/show_bug.cgi?id=26264.
Patch #8 was moved to https://bugs.webkit.org/show_bug.cgi?id=26265.
Patch #9 was moved to https://bugs.webkit.org/show_bug.cgi?id=26266.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26674</attachid>
            <date>2009-01-13 10:36:21 -0800</date>
            <delta_ts>2009-01-15 17:17:36 -0800</delta_ts>
            <desc>patch v1</desc>
            <filename>23296patch.txt</filename>
            <type>text/plain</type>
            <size>141045</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTg2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcxIEBACisKKzIwMDktMDEtMTMgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBBbmRyb2lkLXNwZWNpZmljIGZpbGVzIHRvIFdlYkNvcmUvcGxhdGZvcm0uCisJaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAgKiBlZGl0aW5n
L2FuZHJvaWQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvYW5kcm9pZC9FZGl0b3JBbmRyb2lk
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9h
cmQpOgorICAgICAgICAqIHBhZ2UvYW5kcm9pZDogQWRkZWQuCisgICAgICAgICogcGFnZS9hbmRy
b2lkL0RyYWdDb250cm9sbGVyQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Nv
bnRyb2xsZXI6OmRyYWdPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xs
ZXI6Om1heERyYWdJbWFnZVNpemUpOgorICAgICAgICAqIHBhZ2UvYW5kcm9pZC9FdmVudEhhbmRs
ZXJBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRh
YnNUb0FsbENvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Zm9jdXNE
b2N1bWVudFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0
TW91c2VEb3duRXZlbnRUb1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2Fy
ZCk6CisgICAgICAgICogcGFnZS9hbmRyb2lkL0luc3BlY3RvckNvbnRyb2xsZXJBbmRyb2lkLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0
b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6On5J
bnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVDb250ZW50TGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmZyYW1lRGV0YWNoZWRGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OmFkZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGlkT3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjp3aW5kb3dWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
aW5zcGVjdGVkUGFnZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xl
YXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydEdyb3Vw
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmVuZEdyb3VwKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlTW91c2VQcmVzc09uTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpmYWlsZWRUb1BhcnNlU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhcnNlU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFBhdXNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRy
b2lkL0NsaXBib2FyZEFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZEFuZHJvaWQ6OkNsaXBib2FyZEFuZHJvaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQW5kcm9pZDo6fkNsaXBib2FyZEFuZHJvaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQW5kcm9pZDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZEFuZHJvaWQ6OmNsZWFyQWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRBbmRyb2lkOjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEFuZHJvaWQ6
OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQW5kcm9pZDo6dHlwZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQW5kcm9pZDo6c2V0RHJhZ0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZEFuZHJvaWQ6OnNldERyYWdJbWFnZUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQW5kcm9pZDo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZEFuZHJvaWQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRBbmRyb2lkOjp3cml0ZVVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRBbmRyb2lkOjp3cml0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZEFuZHJvaWQ6Omhhc0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJv
aWQvQ2xpcGJvYXJkQW5kcm9pZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lk
L0NvbnRleHRNZW51Q2xpZW50QW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dE1lbnVDbGllbnRBbmRyb2lkOjpjb250ZXh0TWVudURlc3Ryb3llZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNsaWVudEFuZHJvaWQ6OmdldEN1c3RvbU1lbnVGcm9tRGVm
YXVsdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50QW5kcm9pZDo6
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVD
bGllbnRBbmRyb2lkOjpkb3dubG9hZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVu
dUNsaWVudEFuZHJvaWQ6OmNvcHlJbWFnZVRvQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRleHRNZW51Q2xpZW50QW5kcm9pZDo6c2VhcmNoV2l0aEdvb2dsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZXh0TWVudUNsaWVudEFuZHJvaWQ6Omxvb2tVcEluRGljdGlvbmFyeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNsaWVudEFuZHJvaWQ6OnNwZWFrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50QW5kcm9pZDo6c3RvcFNwZWFraW5nKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0NvbnRleHRNZW51Q2xpZW50QW5kcm9pZC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0N1cnNvckFuZHJvaWQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cnNvcjo6fkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXZWJDb3JlOjpwb2ludGVyQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyb3Nz
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6bW92ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjppQmVhbUN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjp3YWl0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmhlbHBDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6ZWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpu
b3J0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aEVhc3RSZXNpemVDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OnNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OnNvdXRoRWFz
dFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFdlc3RSZXNpemVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6d2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpub3J0aFNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmVhc3RXZXN0UmVz
aXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OnJvd1Jlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjp2ZXJ0aWNhbFRleHRDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2VsbEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub0Ryb3BDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpwcm9ncmVzc0N1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjphbGlhc0N1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpub25lQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om1pZGRsZVBhbm5pbmdDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6ZWFzdFBhbm5pbmdDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
bm9ydGhQYW5uaW5nQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoRWFzdFBhbm5pbmdD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0UGFubmluZ0N1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzb3V0aFBhbm5pbmdDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6c291
dGhFYXN0UGFubmluZ0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFdlc3RQYW5uaW5n
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Ondlc3RQYW5uaW5nQ3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OmdyYWJDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Z3JhYmJpbmdDdXJzb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvRHJhZ0RhdGFBbmRyb2lkLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdEYXRhOjpjb250YWluc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6
YXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNyZWF0ZUNsaXBib2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6Y29udGFpbnNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6
OmFzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnRGF0YTo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9FdmVu
dExvb3BBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudExvb3A6OmN5
Y2xlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0ZpbGVDaG9vc2VyQW5kcm9pZC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCk6CisgICAgICAgICogcGxh
dGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVtQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5U
ZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnVubG9hZE1vZHVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpjbG9zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6aG9tZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAqIHBsYXRmb3Jt
L2FuZHJvaWQvS2V5RXZlbnRBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp3
aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZp
ZXJGb3JBbmRyb2lkS2V5Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjpzaW5nbGVDaGFyYWN0ZXJT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVudCk6CisgICAgICAgICogcGxhdGZvcm0v
YW5kcm9pZC9LZXlib2FyZENvZGVzLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJv
aWQvTG9jYWxpemVkU3RyaW5nc0FuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnVu
a25vd25GaWxlU2l6ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VUaXRsZSk6CisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9Qb3B1cE1lbnVBbmRyb2lkLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OlBvcHVwTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpQ
b3B1cE1lbnU6On5Qb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpzaG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6aGlkZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnU6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVw
TWVudTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpnZXRDYW52YXNGcm9tSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpwYWludEJydXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5k
cm9pZDo6UmVuZGVyVGhlbWVBbmRyb2lkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
QW5kcm9pZDo6flJlbmRlclRoZW1lQW5kcm9pZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUFuZHJvaWQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9p
ZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6
cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6cGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVBbmRyb2lkOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6cGxhdGZvcm1UZXh0U2VhcmNo
SGlnaGxpZ2h0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpi
YXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6
YWRkSW50cmluc2ljTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJv
aWQ6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lk
OjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJv
aWQ6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lk
OjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnBh
aW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpzZXRDaGVj
a2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpzZXRSYWRp
b1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RUZXh0
RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50
VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0
VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnBh
aW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1
c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9p
ZDo6cGFpbnRTZWFyY2hGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJv
aWQ6OmFkanVzdExpc3Rib3hTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFu
ZHJvaWQ6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVBbmRyb2lkOjpwYWludENvbWJvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5k
cm9pZDo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJv
aWQ6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVBbmRyb2lkOjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQW5kcm9pZDo6c3VwcG9ydHNGb2N1c1JpbmcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
VGhlbWVEYXRhOjptX3N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9p
ZDo6c3VwcG9ydHNIb3Zlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6
OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjptaW5p
bXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1NjcmVlbkFuZHJv
aWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW46Om9yaWVudGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
ZWVuQXZhaWxhYmxlUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9TY3JvbGxWaWV3
QW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZv
cm1WaXNpYmxlQ29udGVudFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxh
dGZvcm1Db250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZv
cm1TZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0
Zm9ybVNjcm9sbGJhck1vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRm
b3JtUHJvaGliaXRzU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBs
YXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6cGxhdGZvcm1PZmZzY3JlZW5Db250ZW50UmVjdGFuZ2xlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hbmRyb2lkL1NlYXJjaFBvcHVwTWVudUFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudTo6c2F2ZVJlY2VudFNlYXJjaGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVudTo6U2VhcmNoUG9wdXBNZW51KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlYXJjaFBvcHVwTWVudTo6ZW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vYW5k
cm9pZC9TaGFyZWRUaW1lckFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNl
dFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRU
aW1lckZpcmVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3BTaGFyZWRUaW1lcik6CisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9TeXN0ZW1UaW1lQW5kcm9pZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y3VycmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0X3RocmVh
ZF9tc2VjKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdExhbmd1YWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hl
Y2tDYWNoZU9iamVjdFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjp+SWNvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpzdWJtaXRC
dXR0b25EZWZhdWx0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6cmVzZXRCdXR0b25EZWZhdWx0
TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Zm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFn
T3BlbkxpbmtJbk5ld1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZExpbmtUb0Rpc2spOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnQ29weUxpbmtUb0NsaXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRN
ZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRl
eHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ0NvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnR29CYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2Fy
ZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdDdXQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnUGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2Vz
Rm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdCb2xkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z0l0YWxpYyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSk6CisgICAg
ICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KToKKyAgICAgICAgKFBhc3RlYm9h
cmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKToKKyAgICAgICAgKFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0
aW9uKToKKyAgICAgICAgKFBhc3RlYm9hcmQ6OndyaXRlVVJMKToKKyAgICAgICAgKFBhc3RlYm9h
cmQ6OmNsZWFyKToKKyAgICAgICAgKFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAg
ICAgIChQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKFBhc3RlYm9hcmQ6
OnBsYWluVGV4dCk6CisgICAgICAgIChQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKToKKyAgICAgICAg
KFBhc3RlYm9hcmQ6On5QYXN0ZWJvYXJkKToKKyAgICAgICAgKENvbnRleHRNZW51OjpDb250ZXh0
TWVudSk6CisgICAgICAgIChDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KToKKyAgICAgICAgKENv
bnRleHRNZW51OjphcHBlbmRJdGVtKToKKyAgICAgICAgKENvbnRleHRNZW51OjpzZXRQbGF0Zm9y
bURlc2NyaXB0aW9uKToKKyAgICAgICAgKENvbnRleHRNZW51OjpwbGF0Zm9ybURlc2NyaXB0aW9u
KToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKToKKyAgICAgICAg
KENvbnRleHRNZW51SXRlbTo6fkNvbnRleHRNZW51SXRlbSk6CisgICAgICAgIChDb250ZXh0TWVu
dUl0ZW06OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKToKKyAgICAgICAgKENvbnRleHRNZW51
SXRlbTo6dHlwZSk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnNldFR5cGUpOgorICAgICAg
ICAoQ29udGV4dE1lbnVJdGVtOjphY3Rpb24pOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpz
ZXRBY3Rpb24pOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjp0aXRsZSk6CisgICAgICAgIChD
b250ZXh0TWVudUl0ZW06OnNldFRpdGxlKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6cGxh
dGZvcm1TdWJNZW51KToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudSk6Cisg
ICAgICAgIChDb250ZXh0TWVudUl0ZW06OnNldENoZWNrZWQpOgorICAgICAgICAoQ29udGV4dE1l
bnVJdGVtOjpzZXRFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnVzZXJJZGxlVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzeXN0ZW1CZWVwKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpk
cmFnSW1hZ2VGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3Ry
eTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6d3JpdGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmFnSW1hZ2VTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlbGV0ZURyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVE
cmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzc29sdmVEcmFnSW1hZ2VU
b0ZyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNo
ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjp6b29tSW5DdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6em9vbU91dEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3RBbGxvd2VkQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjYWxlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6c2VhcmNo
TWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlYXJjaE1lbnVD
bGVhclJlY2VudFNlYXJjaGVzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpzdXBwb3J0ZWRLZXlT
aXplcyk6CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQpOgor
ICAgICAgICAoS1VSTDo6ZmlsZVN5c3RlbVBhdGgpOgorICAgICAgICAoU2hhcmVkQnVmZmVyOjpj
cmVhdGVXaXRoQ29udGVudHNPZkZpbGUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGlzcGF0
Y2hKTklDYWxsKToKKyAgICAgICAgKGRpcm5hbWUpOgorICAgICAgICAoRGF0YWJhc2U6OmRhdGFi
YXNlSW5mb1RhYmxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVmZXRjaEROUyk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRTdXBwb3J0ZWRLZXlTaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
Y29uOjpjcmVhdGVJY29uRm9yRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJ
Y29uRm9yRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoRmlsZUxpc3Q6OkZpbGVM
aXN0KToKKyAgICAgICAgKEZpbGVMaXN0OjppdGVtKToKKyAgICAgICAgKEFYT2JqZWN0Q2FjaGU6
On5BWE9iamVjdENhY2hlKToKKyAgICAgICAgKEFYT2JqZWN0Q2FjaGU6OmNoaWxkcmVuQ2hhbmdl
ZCk6CisgICAgICAgIChBWE9iamVjdENhY2hlOjpyZW1vdmUpOgorICAgICAgICAoT3BhcXVlSlND
bGFzczo6fk9wYXF1ZUpTQ2xhc3MpOgorICAgICAgICAoT3BhcXVlSlNDbGFzc0NvbnRleHREYXRh
Ojp+T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3Jp
cHRDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxs
RnJhbWU6OnNjb3BlQ2hhaW4pOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFt
ZTo6dGhpc09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OmNhbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUpOgorICAg
ICAgICAoSmF2YVNjcmlwdERlYnVnU2VydmVyOjpKYXZhU2NyaXB0RGVidWdTZXJ2ZXIpOgorICAg
ICAgICAoSmF2YVNjcmlwdERlYnVnU2VydmVyOjp+SmF2YVNjcmlwdERlYnVnU2VydmVyKToKKyAg
ICAgICAgKEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKToKKyAgICAgICAgKEphdmFTY3Jp
cHREZWJ1Z1NlcnZlcjo6YXRTdGF0ZW1lbnQpOgorICAgICAgICAoSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjpjYWxsRXZlbnQpOgorICAgICAgICAoSmF2YVNjcmlwdERlYnVnU2VydmVyOjpkaWRFeGVj
dXRlUHJvZ3JhbSk6CisgICAgICAgIChKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmRpZFJlYWNoQnJl
YWtwb2ludCk6CisgICAgICAgIChKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbik6Cisg
ICAgICAgIChKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZCk6CisgICAgICAgIChK
YXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnBhZ2VDcmVhdGVkKToKKyAgICAgICAgKEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6cmV0dXJuRXZlbnQpOgorICAgICAgICAoSmF2YVNjcmlwdERlYnVnU2VydmVy
Ojp3aWxsRXhlY3V0ZVByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvVGV4dEJv
dW5kYXJpZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmROZXh0V29yZEZyb21J
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hbmRyb2lkL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCk6CisgICAgICAgICog
cGxhdGZvcm0vYW5kcm9pZC9XaWRnZXRBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldpZGdldDo6cmV0YWluUGxhdGZvcm1XaWRnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0OjpzZXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzaG93
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6aGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpX
aWRnZXQ6OnNldEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldElzU2Vs
ZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzY3JlZW5XaWR0aCk6CisKIDIwMDkt
MDEtMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFkZWxlIFBldGVyc29uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0NsaXBi
b2FyZEFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9D
bGlwYm9hcmRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5k
cm9pZC9DbGlwYm9hcmRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRBbmRy
b2lkLmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNTU0hlbHBlci5o
IgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkRyYWdEYXRhLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxl
ci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorLy8jaW5jbHVkZSAiTWltZVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIm1hcmt1cC5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCisvLyBmb3JtYXQgc3RyaW5nIGZvciAKK3N0YXRpYyBjb25zdCBjaGFyIHN6U2hlbGxE
b3RVcmxUZW1wbGF0ZVtdID0gIltJbnRlcm5ldFNob3J0Y3V0XVxyXG5VUkw9JXNcclxuIjsKKwor
Ly8gV2UgcHJvdmlkZSB0aGUgSUUgY2xpcGJvYXJkIHR5cGVzIChVUkwgYW5kIFRleHQpLCBhbmQg
dGhlIGNsaXBib2FyZCB0eXBlcyBzcGVjaWZpZWQgaW4gdGhlIFdIQVRXRyBXZWIgQXBwbGljYXRp
b25zIDEuMCBkcmFmdAorLy8gc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBw
cy9jdXJyZW50LXdvcmsvIFNlY3Rpb24gNi4zLjUuMworCitlbnVtIENsaXBib2FyZERhdGFUeXBl
IHsgQ2xpcGJvYXJkRGF0YVR5cGVOb25lLCBDbGlwYm9hcmREYXRhVHlwZVVSTCwgQ2xpcGJvYXJk
RGF0YVR5cGVUZXh0IH07CisKK3N0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBjbGlwYm9hcmRUeXBl
RnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBTdHJpbmcgcVR5cGUgPSB0
eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisKKyAgICAvLyB0d28gc3BlY2lhbCBjYXNl
cyBmb3IgSUUgY29tcGF0aWJpbGl0eQorICAgIGlmIChxVHlwZSA9PSAidGV4dCIgfHwgcVR5cGUg
PT0gInRleHQvcGxhaW4iIHx8IHFUeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCisgICAg
ICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVRleHQ7CisgICAgaWYgKHFUeXBlID09ICJ1cmwi
IHx8IHFUeXBlID09ICJ0ZXh0L3VyaS1saXN0IikKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERh
dGFUeXBlVVJMOworCisgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlTm9uZTsKK30KKworQ2xp
cGJvYXJkQW5kcm9pZDo6Q2xpcGJvYXJkQW5kcm9pZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9s
aWN5LCBib29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBDbGlwYm9hcmQocG9saWN5LCBpc0ZvckRy
YWdnaW5nKQoreworfQorCitDbGlwYm9hcmRBbmRyb2lkOjp+Q2xpcGJvYXJkQW5kcm9pZCgpCit7
Cit9CisKK3ZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSkKK3sKKyAgICAvL0ZJWE1FOiBOZWVkIHRvIGJlIGFibGUgdG8gd3JpdGUgdG8gdGhlIHN5c3Rl
bSBjbGlwYm9hcmQgPHJkYXI6Ly9wcm9ibGVtLzUwMTU5NDE+CisgICAgQVNTRVJUKGlzRm9yRHJh
Z2dpbmcoKSk7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5
cGVGcm9tTUlNRVR5cGUodHlwZSk7CisKKyAgICBpZiAoZGF0YVR5cGUgPT0gQ2xpcGJvYXJkRGF0
YVR5cGVVUkwpIHsKKyAgICAgICAgICAgfQorICAgIGlmIChkYXRhVHlwZSA9PSBDbGlwYm9hcmRE
YXRhVHlwZVRleHQpIHsKKyAgICAgICAKKyAgICB9CisKK30KKwordm9pZCBDbGlwYm9hcmRBbmRy
b2lkOjpjbGVhckFsbERhdGEoKQoreworICAgIC8vRklYTUU6IE5lZWQgdG8gYmUgYWJsZSB0byB3
cml0ZSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZCA8cmRhcjovL3Byb2JsZW0vNTAxNTk0MT4KKyAg
ICBBU1NFUlQoaXNGb3JEcmFnZ2luZygpKTsKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJk
V3JpdGFibGUpCisgICAgICAgIHJldHVybjsKKyAgICAKK30KKworU3RyaW5nIENsaXBib2FyZEFu
ZHJvaWQ6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAor
eyAgICAgCisgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9h
cmRSZWFkYWJsZSkgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgQ2xpcGJvYXJk
RGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKHR5cGUpOworICAg
LyogaWYgKGRhdGFUeXBlID09IENsaXBib2FyZERhdGFUeXBlVGV4dCkKKyAgICAgICAgcmV0dXJu
IGdldFBsYWluVGV4dChtX2RhdGFPYmplY3QuZ2V0KCksIHN1Y2Nlc3MpOworICAgIGVsc2UgaWYg
KGRhdGFUeXBlID09IENsaXBib2FyZERhdGFUeXBlVVJMKSAKKyAgICAgICAgcmV0dXJuIGdldFVS
TChtX2RhdGFPYmplY3QuZ2V0KCksIHN1Y2Nlc3MpOworICAgICovCisgICAgcmV0dXJuICIiOwor
fQorCitib29sIENsaXBib2FyZEFuZHJvaWQ6OnNldERhdGEoY29uc3QgU3RyaW5nICZ0eXBlLCBj
b25zdCBTdHJpbmcgJmRhdGEpCit7CisgICAgLy9GSVhNRTogTmVlZCB0byBiZSBhYmxlIHRvIHdy
aXRlIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkIDxyZGFyOi8vcHJvYmxlbS81MDE1OTQxPgorICAg
IEFTU0VSVChpc0ZvckRyYWdnaW5nKCkpOworICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRX
cml0YWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2xpcGJvYXJkRGF0YVR5cGUg
cGxhdGZvcm1UeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsKKworICAgIGlm
IChwbGF0Zm9ybVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIHsKKyAgICAgICAgS1VSTCB1
cmwgPSBLVVJMKGRhdGEpOworI2lmIDAgJiYgZGVmaW5lZCBBTkRST0lEIC8vIEZJWE1FIEhBQ0sg
OiBLVVJMIG5vIGxvbmdlciBkZWZpbmVzIGEgcHVibGljIG1ldGhvZCBpc1ZhbGlkKCkKKyAgICAg
ICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gV2ViQ29yZTo6d3JpdGVVUkwobV93cml0YWJsZURh
dGFPYmplY3QuZ2V0KCksIHVybCwgU3RyaW5nKCksIGZhbHNlLCB0cnVlKTsKKyAgICB9IGVsc2Ug
aWYgKCBwbGF0Zm9ybVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0KSB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKKy8vIGV4dGVuc2lv
bnMgYmV5b25kIElFJ3MgQVBJCitIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQW5kcm9pZDo6dHlw
ZXMoKSBjb25zdAoreyAKKyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsgCisgICAgaWYgKHBv
bGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVz
UmVhZGFibGUpCisgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAgcmV0dXJuIHJlc3VsdHM7
Cit9CisKK3ZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiBp
bWFnZSwgTm9kZSAqbm9kZSwgY29uc3QgSW50UG9pbnQgJmxvYykKK3sKKyAgICBpZiAocG9saWN5
KCkgIT0gQ2xpcGJvYXJkSW1hZ2VXcml0YWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0
YWJsZSkgCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgaWYgKG1fZHJhZ0ltYWdlKQor
ICAgICAgICBtX2RyYWdJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgIG1fZHJhZ0ltYWdl
ID0gaW1hZ2U7CisgICAgaWYgKG1fZHJhZ0ltYWdlKQorICAgICAgICBtX2RyYWdJbWFnZS0+YWRk
Q2xpZW50KHRoaXMpOworCisgICAgbV9kcmFnTG9jID0gbG9jOworICAgIG1fZHJhZ0ltYWdlRWxl
bWVudCA9IG5vZGU7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6c2V0RHJhZ0ltYWdlKENh
Y2hlZEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW50ICZsb2MpCit7CisgICAgc2V0RHJhZ0ltYWdl
KGltZywgMCwgbG9jKTsKK30KKwordm9pZCBDbGlwYm9hcmRBbmRyb2lkOjpzZXREcmFnSW1hZ2VF
bGVtZW50KE5vZGUgKm5vZGUsIGNvbnN0IEludFBvaW50ICZsb2MpCit7CisgICAgc2V0RHJhZ0lt
YWdlKDAsIG5vZGUsIGxvYyk7Cit9CisKK0RyYWdJbWFnZVJlZiBDbGlwYm9hcmRBbmRyb2lkOjpj
cmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGxvYykgY29uc3QKK3sKKyAgICB2b2lkKiByZXN1bHQg
PSAwOworICAgIC8vRklYTUU6IE5lZWQgdG8gYmUgYWJsZSB0byBkcmF3IGVsZW1lbnQgPHJkYXI6
Ly9wcm9ibGVtLzUwMTU5NDI+CisgICAgaWYgKG1fZHJhZ0ltYWdlKSB7CisgICAgICAgIHJlc3Vs
dCA9IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShtX2RyYWdJbWFnZS0+aW1hZ2UoKSk7ICAgICAg
ICAKKyAgICAgICAgbG9jID0gbV9kcmFnTG9jOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCisKK3ZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJh
bWUqIGZyYW1lKQoreworCit9CisKK3ZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6d3JpdGVVUkwoY29u
c3QgS1VSTCYga3VybCwgY29uc3QgU3RyaW5nJiB0aXRsZVN0ciwgRnJhbWUqKQoreworCit9CisK
K3ZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6d3JpdGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5nZSwg
RnJhbWUqIGZyYW1lKQoreworICAgIEFTU0VSVChzZWxlY3RlZFJhbmdlKTsKK30KKworYm9vbCBD
bGlwYm9hcmRBbmRyb2lkOjpoYXNEYXRhKCkKK3sKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0Ns
aXBib2FyZEFuZHJvaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
Q2xpcGJvYXJkQW5kcm9pZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL0NsaXBib2FyZEFuZHJvaWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBDbGlwYm9hcmRBbmRyb2lkX2gKKyNkZWZpbmUgQ2xpcGJvYXJkQW5k
cm9pZF9oCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291
cmNlQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENhY2hlZElt
YWdlOworCisgICAgY2xhc3MgQ2xpcGJvYXJkQW5kcm9pZCA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBDbGlwYm9h
cmRBbmRyb2lkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIGJvb2wgaXNGb3JEcmFnZ2lu
Zyk7CisgICAgICAgIH5DbGlwYm9hcmRBbmRyb2lkKCk7CisgICAgCisgICAgICAgIHZvaWQgY2xl
YXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7
CisgICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vz
cykgY29uc3Q7CisgICAgICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgZGF0YSk7CisgICAgCisgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3Mg
QVBJCisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIAorICAgICAg
ICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CisgICAg
ICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKKwkJ
CisgICAgICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYg
ZHJhZ0xvYykgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFn
SW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSop
OworICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYsIEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJh
bWUqKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgdm9pZCByZXNldEZyb21DbGlwYm9hcmQoKTsKKyAgICAgICAgdm9pZCBzZXREcmFn
SW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICAgICAgRnJh
bWUqIG1fZnJhbWU7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gQ2xpcGJvYXJkQW5kcm9pZF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ29u
dGV4dE1lbnVDbGllbnRBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvQ29udGV4dE1lbnVDbGllbnRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9Db250ZXh0TWVudUNsaWVudEFuZHJvaWQuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50QW5kcm9pZC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAid3RmL0Fzc2VydGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAordm9pZCBDb250ZXh0TWVudUNsaWVudEFuZHJvaWQ6OmNvbnRleHRNZW51RGVzdHJv
eWVkKCkgeyBkZWxldGUgdGhpczsgfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0
TWVudUNsaWVudEFuZHJvaWQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKENvbnRleHRN
ZW51KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQordm9pZCBDb250ZXh0TWVudUNs
aWVudEFuZHJvaWQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSosIGNv
bnN0IENvbnRleHRNZW51KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK3ZvaWQgQ29udGV4dE1l
bnVDbGllbnRBbmRyb2lkOjpkb3dubG9hZFVSTChjb25zdCBLVVJMJiB1cmwpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQordm9pZCBDb250ZXh0TWVudUNsaWVudEFuZHJvaWQ6OmNvcHlJbWFnZVRvQ2xp
cGJvYXJkKGNvbnN0IEhpdFRlc3RSZXN1bHQmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQg
Q29udGV4dE1lbnVDbGllbnRBbmRyb2lkOjpzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IEZyYW1lKikg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIENvbnRleHRNZW51Q2xpZW50QW5kcm9pZDo6bG9v
a1VwSW5EaWN0aW9uYXJ5KEZyYW1lKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIENvbnRl
eHRNZW51Q2xpZW50QW5kcm9pZDo6c3BlYWsoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9Cit2b2lkIENvbnRleHRNZW51Q2xpZW50QW5kcm9pZDo6c3RvcFNwZWFraW5nKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9D
b250ZXh0TWVudUNsaWVudEFuZHJvaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvQ29udGV4dE1lbnVDbGllbnRBbmRyb2lkLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvQ29udGV4dE1lbnVDbGllbnRBbmRyb2lkLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQg
T3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbnRleHRNZW51Q2xpZW50QW5k
cm9pZF9oCisjZGVmaW5lIENvbnRleHRNZW51Q2xpZW50QW5kcm9pZF9oCisKKyNpbmNsdWRlICJD
b250ZXh0TWVudUNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRl
eHRNZW51Q2xpZW50QW5kcm9pZCA6IHB1YmxpYyBDb250ZXh0TWVudUNsaWVudCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51RGVzdHJveWVkKCk7CisgICAgCisgICAgdmly
dHVhbCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVt
cyhDb250ZXh0TWVudSopOworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3Rl
ZChDb250ZXh0TWVudUl0ZW0qLCBjb25zdCBDb250ZXh0TWVudSopOworICAgIAorICAgIHZpcnR1
YWwgdm9pZCBkb3dubG9hZFVSTChjb25zdCBLVVJMJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBj
b3B5SW1hZ2VUb0NsaXBib2FyZChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CisgICAgdmlydHVhbCB2
b2lkIHNlYXJjaFdpdGhHb29nbGUoY29uc3QgRnJhbWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9v
a1VwSW5EaWN0aW9uYXJ5KEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIHNwZWFrKGNvbnN0IFN0
cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wU3BlYWtpbmcoKTsKK307CisKK30KKworI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5kcm9pZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0N1cnNvckFuZHJvaWQuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0N1cnNvckFuZHJvaWQuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBU
aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjZGVm
aW5lIExPR19UQUcgIldlYkNvcmUiCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
dXJzb3IuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0N1cnNvcjo6Q3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmICkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3Im
IG90aGVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9y
PShjb25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitjb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQor
Citjb25zdCBDdXJzb3ImIGNyb3NzQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBo
YW5kQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3Ig
YzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsK
K30KKworY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNv
ciYgd2FpdEN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vy
c29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJu
IGM7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2Nv
bnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3Im
IG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBz
dGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhX
ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBD
dXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1
cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7Cisg
ICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1
cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOwor
fQorCitjb25zdCBDdXJzb3ImIHdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBD
dXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3Im
IGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0
YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aEVh
c3RTb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
c3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRo
V2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY29s
dW1uUmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBD
dXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJz
b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAg
IHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgY2VsbEN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNv
ciYgY29udGV4dE1lbnVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3Rh
dGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1
cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7Cisg
ICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY29weUN1cnNvcigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisK
K2NvbnN0IEN1cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3Im
IGFsaWFzQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJz
b3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4g
YzsKK30KKworICAgIC8vIG5ldyBhcyBvZiBTVk4gY2hhbmdlIDM2MjY5LCBTZXB0IDgsIDIwMDgK
K2NvbnN0IEN1cnNvciYgbWlkZGxlUGFubmluZ0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1
cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
c3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRo
UGFubmluZ0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vy
c29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0UGFubmlu
Z0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7
CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNv
cigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAg
cmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhQYW5uaW5nQ3Vyc29yKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsK
K30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKwor
Y29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3Qg
Q3Vyc29yJiB3ZXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKKyAgICAvLyBuZXcgYXMgb2Yg
U1ZOIGNoYW5nZSAzODA2OCwgTm92IDUsIDIwMDgKK2NvbnN0IEN1cnNvciYgZ3JhYkN1cnNvcigp
IHt9Citjb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkge30KKworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9hbmRyb2lkL0RyYWdEYXRhQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL0RyYWdEYXRhQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRHJhZ0RhdGFBbmRyb2lkLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBP
cGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRyYWdEYXRhLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIERyYWdEYXRhOjpjYW5T
bWFydFJlcGxhY2UoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jvb2wg
RHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorICAgIAorQ29sb3IgRHJhZ0RhdGE6OmFzQ29sb3IoKSBj
b25zdAoreworICAgIHJldHVybiBDb2xvcigpOworfQorICAgIAorY2xhc3MgQ2xpcGJvYXJkIDog
cHVibGljIFJlZkNvdW50ZWQ8Q2xpcGJvYXJkPiB7fTsKKworUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IERyYWdEYXRhOjpjcmVhdGVDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5KSBjb25zdAor
eworICAgIHJldHVybiBQYXNzUmVmUHRyPENsaXBib2FyZD4oTlVMTCk7Cit9CisgICAgCitib29s
IERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisgICAgCitib29sIERyYWdEYXRhOjpjb250YWluc1VSTCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorU3RyaW5nIERyYWdEYXRhOjphc1VSTChTdHJp
bmcqIHRpdGxlKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKKyAgICAK
K1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRG9jdW1l
bnQqKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCisvLyBmdW5jdGlvbnMgbmV3IHRvIEp1
bi0wNyB0aXAgb2YgdHJlZSBtZXJnZToKK3ZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3Rv
cjxTdHJpbmc+JikgY29uc3Qge30KK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
RXZlbnRMb29wQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL0V2ZW50TG9vcEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL0V2ZW50TG9vcEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3
IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgor
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBFdmVudExvb3A6OmN5Y2xlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRmlsZUNo
b29zZXJBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
RmlsZUNob29zZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9GaWxlQ2hvb3NlckFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgi
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkljb24uaCIKKyNpbmNsdWRlICJMb2NhbGl6
ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9u
dCYgZm9udCwgaW50IHdpZHRoKSBjb25zdCAKK3sgCisgICAgLy8gRklYTUU6IFRoaXMgY291bGQg
YmUgYSBsb3QgZmFzdGVyLCBidXQgYXNzdW1pbmcgdGhlIGRhdGEgd2lsbCBub3Qgb2Z0ZW4gYmUg
CisgICAgLy8gbXVjaCBsb25nZXIgdGhhbiB0aGUgcHJvdmlkZWQgd2lkdGgsIHRoaXMgbWF5IGJl
IGZhc3QgZW5vdWdoLgorICAgIFN0cmluZyBvdXRwdXQgPSBtX2ZpbGVuYW1lc1swXS5jb3B5KCk7
CisgICAgd2hpbGUgKGZvbnQud2lkdGgoVGV4dFJ1bihvdXRwdXQuaW1wbCgpKSkgPiB3aWR0aCAm
JiBvdXRwdXQubGVuZ3RoKCkgPiA0KSB7CisgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNl
KG91dHB1dC5sZW5ndGgoKSAtIDQsIDQsIFN0cmluZygiLi4uIikpOworICAgIH0KKyAgICByZXR1
cm4gb3V0cHV0OworICAgIAorfQorCisKKy8vIFRoZSBmb2xsb3dpbmcgdHdvIHN0cmluZ3MgYXJl
IHVzZWQgZm9yIEZpbGUgVXBsb2FkIGZvcm0gY29udHJvbCwgaWUKKy8vIDxpbnB1dCB0eXBlPSJm
aWxlIj4uIFRoZSBmaXJzdCBpcyB0aGUgdGV4dCB0aGF0IGFwcGVhcnMgb24gdGhlIGJ1dHRvbgor
Ly8gdGhhdCB3aGVuIHByZXNzZWQsIHRoZSB1c2VyIGNhbiBicm93c2UgZm9yIGFuZCBzZWxlY3Qg
YSBmaWxlLiBUaGUKKy8vIHNlY29uZCBzdHJpbmcgaXMgcmVuZGVyZWQgb24gdGhlIHNjcmVlbiB3
aGVuIG5vIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWQuCitTdHJpbmcgZmlsZUJ1dHRvbkNob29zZUZp
bGVMYWJlbCgpIHsgcmV0dXJuIFN0cmluZygiVXBsb2FkcyBEaXNhYmxlZCIpOyB9CitTdHJpbmcg
ZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKSB7IHJldHVybiBTdHJpbmcoIk5vIGZpbGUg
c2VsZWN0ZWQiKTsgfQorCit9ICAgLy8gV2ViQ29yZQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVtQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVu
IFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUg
PGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlICJjdXRpbHMvbG9nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gR2xvYmFsIHN0YXRpYyB1c2VkIHRvIHN0b3Jl
IHRoZSBiYXNlIHRvIHRoZSBwbHVnaW4gcGF0aC4KKy8vIFRoaXMgaXMgc2V0IGluIFdlYlNldHRp
bmdzLmNwcAorU3RyaW5nIHNQbHVnaW5QYXRoOworCitDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpIHsKKyAgICByZXR1cm4gcGF0aC51dGY4KCk7Cit9
CisKK0NTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9y
bUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpbnQgbnVtYmVyID0gcmFuZCgpICUgMTAwMDAg
KyAxOworICAgIENTdHJpbmcgZmlsZW5hbWU7CisgICAgZG8geworICAgICAgICBTdHJpbmcgcGF0
aCA9IHNQbHVnaW5QYXRoOworICAgICAgICBwYXRoLmFwcGVuZCgiLyIpOworICAgICAgICBwYXRo
LmFwcGVuZChwcmVmaXgpOworICAgICAgICBwYXRoLmFwcGVuZChTdHJpbmc6Om51bWJlcihudW1i
ZXIpKTsKKyAgICAgICAgZmlsZW5hbWUgPSBwYXRoLnV0ZjgoKTsKKyAgICAgICAgY29uc3QgY2hh
ciAqZnN0ciA9IGZpbGVuYW1lLmRhdGEoKTsKKyAgICAgICAgaGFuZGxlID0gb3BlbihmaWxlbmFt
ZS5kYXRhKCksIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgU19JUlVTUiB8IFNfSVdVU1Ip
OworICAgICAgICBudW1iZXIrKzsKKyAgICB9IHdoaWxlIChoYW5kbGUgPT0gLTEgJiYgZXJybm8g
PT0gRUVYSVNUKTsKKyAgICAKKyAgICBpZiAoaGFuZGxlICE9IC0xKSB7CisgICAgICAgIHJldHVy
biBmaWxlbmFtZTsKKyAgICB9CisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKworYm9vbCB1bmxv
YWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQoreworICAgIHJldHVybiBkbGNsb3NlKG1v
ZHVsZSkgPT0gMDsKK30KKwordm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5k
bGUpCit7CisgICAgaWYgKGlzSGFuZGxlVmFsaWQoaGFuZGxlKSkgeworICAgICAgICBjbG9zZSho
YW5kbGUpOworICAgICAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAg
IH0KK30KKworaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgaW50IHRvdGFsQnl0ZXNXcml0dGVuID0g
MDsKKyAgICB3aGlsZSAodG90YWxCeXRlc1dyaXR0ZW4gPCBsZW5ndGgpIHsKKyAgICAgICAgaW50
IGJ5dGVzV3JpdHRlbiA9IHdyaXRlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoIC0gdG90YWxCeXRlc1dy
aXR0ZW4pOworICAgICAgICBpZiAoYnl0ZXNXcml0dGVuIDwgMCAmJiBlcnJubyAhPSBFSU5UUikK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZWxzZSBpZiAoYnl0ZXNXcml0dGVuID4g
MCkKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IGJ5dGVzV3JpdHRlbjsKKyAgICB9
CisKKyAgICByZXR1cm4gdG90YWxCeXRlc1dyaXR0ZW47Cit9CisKKyAgICAvLyBuZXcgYXMgb2Yg
U1ZOIGNoYW5nZSAzNjI2OSwgU2VwdCA4LCAyMDA4CitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgo
KSAKK3sKKyAgICByZXR1cm4gc1BsdWdpblBhdGg7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vYW5kcm9pZC9LZXlFdmVudEFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9LZXlFdmVudEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleUV2ZW50QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4g
U291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktl
eWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgPHVpL0tleWNvZGVMYWJlbHMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBjb21wYXJlIHRvIHNhbWUgZnVuY3Rpb24gaW4gZ2Rr
L0tleUV2ZW50R2RrLmNwcAorc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVu
c2lnbmVkIGludCBrZXlDb2RlKSB7CisvLyBEb2VzIG5vdCBwcm92aWRlIGFsbCBrZXkgY29kZXMs
IGFuZCBkb2VzIG5vdCBoYW5kbGUgYWxsIGtleXMuCisgICAgc3dpdGNoKGtleUNvZGUpIHsKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZURlbDoKKyAgICAgICAgICAgIHJldHVybiBWS19CQUNLOworICAg
ICAgICBjYXNlIGtLZXlDb2RlVGFiOgorICAgICAgICAgICAgcmV0dXJuIFZLX1RBQjsKKyAgICAg
ICAgY2FzZSBrS2V5Q29kZUNsZWFyOgorICAgICAgICAgICAgcmV0dXJuIFZLX0NMRUFSOworICAg
ICAgICBjYXNlIGtLZXlDb2RlRHBhZENlbnRlcjoKKyAgICAgICAgY2FzZSBrS2V5Q29kZU5ld2xp
bmU6CisgICAgICAgICAgICByZXR1cm4gVktfUkVUVVJOOworICAgICAgICBjYXNlIGtLZXlDb2Rl
U2hpZnRMZWZ0OgorICAgICAgICBjYXNlIGtLZXlDb2RlU2hpZnRSaWdodDoKKyAgICAgICAgICAg
IHJldHVybiBWS19TSElGVDsKKyAgICAgICAgLy8gYmFjayB3aWxsIHNlcnZlIGFzIGVzY2FwZSwg
YWx0aG91Z2ggd2UgcHJvYmFibHkgZG8gbm90IGhhdmUgYWNjZXNzIHRvIGl0CisgICAgICAgIGNh
c2Uga0tleUNvZGVCYWNrOgorICAgICAgICAgICAgcmV0dXJuIFZLX0VTQ0FQRTsKKyAgICAgICAg
Y2FzZSBrS2V5Q29kZVNwYWNlOgorICAgICAgICAgICAgcmV0dXJuIFZLX1NQQUNFOworICAgICAg
ICBjYXNlIGtLZXlDb2RlSG9tZToKKyAgICAgICAgICAgIHJldHVybiBWS19IT01FOworICAgICAg
ICBjYXNlIGtLZXlDb2RlRHBhZExlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfTEVGVDsKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZURwYWRVcDoKKyAgICAgICAgICAgIHJldHVybiBWS19VUDsKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZURwYWRSaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19SSUdI
VDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWREb3duOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0RPV047CisgICAgICAgIGNhc2Uga0tleUNvZGUwOgorICAgICAgICAgICAgcmV0dXJuIFZLXzA7
CisgICAgICAgIGNhc2Uga0tleUNvZGUxOgorICAgICAgICAgICAgcmV0dXJuIFZLXzE7CisgICAg
ICAgIGNhc2Uga0tleUNvZGUyOgorICAgICAgICAgICAgcmV0dXJuIFZLXzI7CisgICAgICAgIGNh
c2Uga0tleUNvZGUzOgorICAgICAgICAgICAgcmV0dXJuIFZLXzM7CisgICAgICAgIGNhc2Uga0tl
eUNvZGU0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAgICAgIGNhc2Uga0tleUNvZGU1
OgorICAgICAgICAgICAgcmV0dXJuIFZLXzU7CisgICAgICAgIGNhc2Uga0tleUNvZGU2OgorICAg
ICAgICAgICAgcmV0dXJuIFZLXzY7CisgICAgICAgIGNhc2Uga0tleUNvZGU3OgorICAgICAgICAg
ICAgcmV0dXJuIFZLXzc7CisgICAgICAgIGNhc2Uga0tleUNvZGU4OgorICAgICAgICAgICAgcmV0
dXJuIFZLXzg7CisgICAgICAgIGNhc2Uga0tleUNvZGU5OgorICAgICAgICAgICAgcmV0dXJuIFZL
Xzk7CisgICAgICAgIGNhc2Uga0tleUNvZGVBOgorICAgICAgICAgICAgcmV0dXJuIFZLX0E7Cisg
ICAgICAgIGNhc2Uga0tleUNvZGVCOgorICAgICAgICAgICAgcmV0dXJuIFZLX0I7CisgICAgICAg
IGNhc2Uga0tleUNvZGVDOgorICAgICAgICAgICAgcmV0dXJuIFZLX0M7CisgICAgICAgIGNhc2Ug
a0tleUNvZGVEOgorICAgICAgICAgICAgcmV0dXJuIFZLX0Q7CisgICAgICAgIGNhc2Uga0tleUNv
ZGVFOgorICAgICAgICAgICAgcmV0dXJuIFZLX0U7CisgICAgICAgIGNhc2Uga0tleUNvZGVGOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0Y7CisgICAgICAgIGNhc2Uga0tleUNvZGVHOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0c7CisgICAgICAgIGNhc2Uga0tleUNvZGVIOgorICAgICAgICAgICAg
cmV0dXJuIFZLX0g7CisgICAgICAgIGNhc2Uga0tleUNvZGVJOgorICAgICAgICAgICAgcmV0dXJu
IFZLX0k7CisgICAgICAgIGNhc2Uga0tleUNvZGVKOgorICAgICAgICAgICAgcmV0dXJuIFZLX0o7
CisgICAgICAgIGNhc2Uga0tleUNvZGVLOgorICAgICAgICAgICAgcmV0dXJuIFZLX0s7CisgICAg
ICAgIGNhc2Uga0tleUNvZGVMOgorICAgICAgICAgICAgcmV0dXJuIFZLX0w7CisgICAgICAgIGNh
c2Uga0tleUNvZGVNOgorICAgICAgICAgICAgcmV0dXJuIFZLX007CisgICAgICAgIGNhc2Uga0tl
eUNvZGVOOgorICAgICAgICAgICAgcmV0dXJuIFZLX047CisgICAgICAgIGNhc2Uga0tleUNvZGVP
OgorICAgICAgICAgICAgcmV0dXJuIFZLX087CisgICAgICAgIGNhc2Uga0tleUNvZGVQOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX1A7CisgICAgICAgIGNhc2Uga0tleUNvZGVROgorICAgICAgICAg
ICAgcmV0dXJuIFZLX1E7CisgICAgICAgIGNhc2Uga0tleUNvZGVSOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1I7CisgICAgICAgIGNhc2Uga0tleUNvZGVTOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1M7CisgICAgICAgIGNhc2Uga0tleUNvZGVUOgorICAgICAgICAgICAgcmV0dXJuIFZLX1Q7Cisg
ICAgICAgIGNhc2Uga0tleUNvZGVVOgorICAgICAgICAgICAgcmV0dXJuIFZLX1U7CisgICAgICAg
IGNhc2Uga0tleUNvZGVWOgorICAgICAgICAgICAgcmV0dXJuIFZLX1Y7CisgICAgICAgIGNhc2Ug
a0tleUNvZGVXOgorICAgICAgICAgICAgcmV0dXJuIFZLX1c7CisgICAgICAgIGNhc2Uga0tleUNv
ZGVYOgorICAgICAgICAgICAgcmV0dXJuIFZLX1g7CisgICAgICAgIGNhc2Uga0tleUNvZGVZOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX1k7CisgICAgICAgIGNhc2Uga0tleUNvZGVaOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX1o7CisgICAgICAgIC8vIGNvbG9uCisgICAgICAgIGNhc2Uga0tleUNv
ZGVTZW1pY29sb246CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzE7CisgICAgICAgIGNhc2Ug
a0tleUNvZGVDb21tYToKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fQ09NTUE7CisgICAgICAg
IGNhc2Uga0tleUNvZGVNaW51czoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7Cisg
ICAgICAgIGNhc2Uga0tleUNvZGVFcXVhbHM6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNX1BM
VVM7CisgICAgICAgIGNhc2Uga0tleUNvZGVQZXJpb2Q6CisgICAgICAgICAgICByZXR1cm4gVktf
T0VNX1BFUklPRDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVNsYXNoOgorICAgICAgICAgICAgcmV0
dXJuIFZLX09FTV8yOworICAgICAgICAvLyBtYXliZSBub3QgdGhlIHJpZ2h0IGNob2ljZQorICAg
ICAgICBjYXNlIGtLZXlDb2RlTGVmdEJyYWNrZXQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VN
XzQ7CisgICAgICAgIGNhc2Uga0tleUNvZGVCYWNrc2xhc2g6CisgICAgICAgICAgICByZXR1cm4g
VktfT0VNXzU7CisgICAgICAgIGNhc2Uga0tleUNvZGVSaWdodEJyYWNrZXQ6CisgICAgICAgICAg
ICByZXR1cm4gVktfT0VNXzY7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK3N0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmllckZvckFuZHJvaWRLZXlD
b2RlKGludCBrZXlDb2RlKQoreworLyogIERvZXMgbm90IHJldHVybiBhbGwgb2YgdGhlIHNhbWUg
a2V5IGlkZW50aWZpZXJzLCBhbmQKKyAqICBkb2VzIG5vdCBoYW5kbGUgYWxsIHRoZSBrZXlzLgor
ICovCisgICAgc3dpdGNoIChrZXlDb2RlKSB7CisgICAgICAgIGNhc2Uga0tleUNvZGVDbGVhcjoK
KyAgICAgICAgICAgIHJldHVybiAiQ2xlYXIiOworICAgICAgICBjYXNlIGtLZXlDb2RlTmV3bGlu
ZToKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRDZW50ZXI6CisgICAgICAgICAgICByZXR1cm4g
IkVudGVyIjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUhvbWU6CisgICAgICAgICAgICByZXR1cm4g
IkhvbWUiOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZERvd246CisgICAgICAgICAgICByZXR1
cm4gIkRvd24iOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZExlZnQ6CisgICAgICAgICAgICBy
ZXR1cm4gIkxlZnQiOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZFJpZ2h0OgorICAgICAgICAg
ICAgcmV0dXJuICJSaWdodCI7CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFkVXA6CisgICAgICAg
ICAgICByZXR1cm4gIlVwIjsKKyAgICAgICAgICAgIC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwg
YmVjb21lcyBVKzAwMDA3Ri4KKyAgICAgICAgY2FzZSBrS2V5Q29kZURlbDoKKyAgICAgICAgICAg
IHJldHVybiAiVSswMDAwN0YiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY2hhciB1
cHBlclsxNl07CisgICAgICAgICAgICBzcHJpbnRmKHVwcGVyLCAiVSslMDZYIiwgd2luZG93c0tl
eUNvZGVGb3JLZXlFdmVudChrZXlDb2RlKSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVw
cGVyKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHNpbmdsZUNoYXJhY3RlclN0
cmluZyhpbnQgYykgCit7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgaWYgKGMgPiAweGZmZmYpIHsKKyAgICAgICAgVUNoYXIgbGVhZCA9IFUxNl9MRUFEKGMpOwor
ICAgICAgICBVQ2hhciB0cmFpbCA9IFUxNl9UUkFJTChjKTsKKyAgICAgICAgVUNoYXIgdXRmMTZb
Ml0gPSB7bGVhZCwgdHJhaWx9OworICAgICAgICByZXR1cm4gU3RyaW5nKHV0ZjE2LCAyKTsKKyAg
ICB9CisgICAgVUNoYXIgbiA9IChVQ2hhciljOworICAgIHJldHVybiBTdHJpbmcoJm4sIDEpOwor
fQorCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChpbnQga2V5
Q29kZSwgVUNoYXIzMiB1bmljaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHlwZSB0eXBlLCBpbnQgcmVwZWF0Q291bnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllcktleSBtb2RzKQorICAgIDogbV90
eXBlKHR5cGUpCisgICAgLCBtX3RleHQoc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHVuaWNoYXIpKQor
ICAgICwgbV91bm1vZGlmaWVkVGV4dChzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5pY2hhcikpCisg
ICAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckZvckFuZHJvaWRLZXlDb2RlKGtleUNv
ZGUpKQorICAgICwgbV9hdXRvUmVwZWF0KHJlcGVhdENvdW50ID4gMCkKKyAgICAsIG1fd2luZG93
c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoa2V5Q29kZSkpCisgICAg
LCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKGtleUNvZGUpCisgICAgLCBtX2lzS2V5cGFkKGZhbHNl
KQorICAgICwgbV9zaGlmdEtleSgobW9kcyAmIFNoaWZ0S2V5KSAhPSAwKQorICAgICwgbV9jdHJs
S2V5KChtb2RzICYgQ3RybEtleSkgIT0gMCkKKyAgICAsIG1fYWx0S2V5KChtb2RzICYgQWx0S2V5
KSAhPSAwKQorICAgICwgbV9tZXRhS2V5KChtb2RzICYgTWV0YUtleSkgIT0gMCkKKyAgICAvLyBh
ZGRlZCBmb3IgYW5kcm9pZAorICAgICwgbV9yZXBlYXRDb3VudChyZXBlYXRDb3VudCkKKyAgICAs
IG1fdW5pY2hhcih1bmljaGFyKQoreworICAgIC8vIENvcGllZCBmcm9tIHRoZSBtYWMgcG9ydAor
ICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSAnXHInKSB7CisgICAgICAgIG1fdGV4
dCA9ICJcciI7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHIiOworICAgIH0KKworICAg
IGlmIChtX3RleHQgPT0gIlx4N0YiKQorICAgICAgICBtX3RleHQgPSAiXHg4IjsKKyAgICBpZiAo
bV91bm1vZGlmaWVkVGV4dCA9PSAiXHg3RiIpCisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAi
XHg4IjsKKworICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSA5KSB7CisgICAgICAg
IG1fdGV4dCA9ICJceDkiOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gIlx4OSI7CisgICAg
fQorfQorCitib29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBm
dW5jdGlvbnMgbmV3IHRvIEZlYi0xOSB0aXAgb2YgdHJlZSBtZXJnZToKK3ZvaWQgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJh
Y2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCit7CisgICAgLy8gQ29waWVkIHdpdGggbW9kaWZpY2F0
aW9uIGZyb20gdGhlIG1hYyBwb3J0LgorICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5RG93bik7Cisg
ICAgQVNTRVJUKHR5cGUgPT0gUmF3S2V5RG93biB8fCB0eXBlID09IENoYXIpOworICAgIG1fdHlw
ZSA9IHR5cGU7CisgICAgaWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICh0eXBlID09IFJhd0tleURvd24pIHsKKyAgICAgICAgbV90ZXh0ID0g
U3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKKyAgICAgICAgbV93aW5k
b3dzVmlydHVhbEtleUNvZGUgPSAwOworICAgIH0KK30KKworfSAgIC8vIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlib2FyZENvZGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleWJvYXJkQ29kZXMuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlib2FyZENvZGVzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4g
U291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tIAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgS2V5Ym9hcmRDb2Rlc19ICisjZGVmaW5lIEtleWJvYXJkQ29kZXNfSAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIFZLX0xCVVRUT04gKDAxKSBMZWZ0IG1vdXNlIGJ1dHRvbgorLy8g
VktfUkJVVFRPTiAoMDIpIFJpZ2h0IG1vdXNlIGJ1dHRvbgorLy8gVktfQ0FOQ0VMICgwMykgQ29u
dHJvbC1icmVhayBwcm9jZXNzaW5nCisvLyBWS19NQlVUVE9OICgwNCkgTWlkZGxlIG1vdXNlIGJ1
dHRvbiAodGhyZWUtYnV0dG9uIG1vdXNlKQorLy8gVktfWEJVVFRPTjEgKDA1KQorLy8gVktfWEJV
VFRPTjIgKDA2KQorCisvLyBWS19CQUNLICgwOCkgQkFDS1NQQUNFIGtleQorY29uc3QgaW50IFZL
X0JBQ0sgPSAweDA4OworCisvLyBWS19UQUIgKDA5KSBUQUIga2V5Citjb25zdCBpbnQgVktfVEFC
ID0gMHgwOTsKKworLy8gVktfQ0xFQVIgKDBDKSBDTEVBUiBrZXkKK2NvbnN0IGludCBWS19DTEVB
UiA9IDB4MEM7CisKKy8vIFZLX1JFVFVSTiAoMEQpCitjb25zdCBpbnQgVktfUkVUVVJOID0gMHgw
RDsKKworLy8gVktfU0hJRlQgKDEwKSBTSElGVCBrZXkKK2NvbnN0IGludCBWS19TSElGVCA9IDB4
MTA7CisKKy8vIFZLX0NPTlRST0wgKDExKSBDVFJMIGtleQorY29uc3QgaW50IFZLX0NPTlRST0wg
PSAweDExOworCisvLyBWS19NRU5VICgxMikgQUxUIGtleQorY29uc3QgaW50IFZLX01FTlUgPSAw
eDEyOworCisvLyBWS19QQVVTRSAoMTMpIFBBVVNFIGtleQorY29uc3QgaW50IFZLX1BBVVNFID0g
MHgxMzsKKworLy8gVktfQ0FQSVRBTCAoMTQpIENBUFMgTE9DSyBrZXkKK2NvbnN0IGludCBWS19D
QVBJVEFMID0gMHgxNDsKKworLy8gVktfS0FOQSAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElN
RSkgS2FuYSBtb2RlCitjb25zdCBpbnQgVktfS0FOQSA9IDB4MTU7CisKKy8vIFZLX0hBTkdVRUwg
KDE1KSBJTUUgSGFuZ3VlbCBtb2RlIChtYWludGFpbmVkIGZvciBjb21wYXRpYmlsaXR5OyB1c2Ug
VktfSEFOR1VMKQorLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCitjb25zdCBpbnQg
VktfSEFOR1VMID0gMHgxNTsKKworLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVuamEgbW9kZQorY29u
c3QgaW50IFZLX0pVTkpBID0gMHgxNzsKKworLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwgbW9k
ZQorY29uc3QgaW50IFZLX0ZJTkFMID0gMHgxODsKKworLy8gVktfSEFOSkEgKDE5KSBJTUUgSGFu
amEgbW9kZQorY29uc3QgaW50IFZLX0hBTkpBID0gMHgxOTsKKworLy8gVktfS0FOSkkgKDE5KSBJ
TUUgS2FuamkgbW9kZQorY29uc3QgaW50IFZLX0tBTkpJID0gMHgxOTsKKworLy8gVktfRVNDQVBF
ICgxQikgRVNDIGtleQorY29uc3QgaW50IFZLX0VTQ0FQRSA9IDB4MUI7CisKKy8vIFZLX0NPTlZF
UlQgKDFDKSBJTUUgY29udmVydAorY29uc3QgaW50IFZLX0NPTlZFUlQgPSAweDFDOworCisvLyBW
S19OT05DT05WRVJUICgxRCkgSU1FIG5vbmNvbnZlcnQKK2NvbnN0IGludCBWS19OT05DT05WRVJU
ID0gMHgxRDsKKworLy8gVktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAorY29uc3QgaW50IFZLX0FD
Q0VQVCA9IDB4MUU7CisKKy8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVx
dWVzdAorY29uc3QgaW50IFZLX01PREVDSEFOR0UgPSAweDFGOworCisvLyBWS19TUEFDRSAoMjAp
IFNQQUNFQkFSCitjb25zdCBpbnQgVktfU1BBQ0UgPSAweDIwOworCisvLyBWS19QUklPUiAoMjEp
IFBBR0UgVVAga2V5Citjb25zdCBpbnQgVktfUFJJT1IgPSAweDIxOworCisvLyBWS19ORVhUICgy
MikgUEFHRSBET1dOIGtleQorY29uc3QgaW50IFZLX05FWFQgPSAweDIyOworCisvLyBWS19FTkQg
KDIzKSBFTkQga2V5Citjb25zdCBpbnQgVktfRU5EID0gMHgyMzsKKworLy8gVktfSE9NRSAoMjQp
IEhPTUUga2V5Citjb25zdCBpbnQgVktfSE9NRSA9IDB4MjQ7CisKKy8vIFZLX0xFRlQgKDI1KSBM
RUZUIEFSUk9XIGtleQorY29uc3QgaW50IFZLX0xFRlQgPSAweDI1OworCisvLyBWS19VUCAoMjYp
IFVQIEFSUk9XIGtleQorY29uc3QgaW50IFZLX1VQID0gMHgyNjsKKworLy8gVktfUklHSFQgKDI3
KSBSSUdIVCBBUlJPVyBrZXkKK2NvbnN0IGludCBWS19SSUdIVCA9IDB4Mjc7CisKKy8vIFZLX0RP
V04gKDI4KSBET1dOIEFSUk9XIGtleQorY29uc3QgaW50IFZLX0RPV04gPSAweDI4OworCisvLyBW
S19TRUxFQ1QgKDI5KSBTRUxFQ1Qga2V5Citjb25zdCBpbnQgVktfU0VMRUNUID0gMHgyOTsKKwor
Ly8gVktfUFJJTlQgKDJBKSBQUklOVCBrZXkKK2NvbnN0IGludCBWS19QUklOVCA9IDB4MkE7CisK
Ky8vIFZLX0VYRUNVVEUgKDJCKSBFWEVDVVRFIGtleQorY29uc3QgaW50IFZLX0VYRUNVVEUgPSAw
eDJCOworCisvLyBWS19TTkFQU0hPVCAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKK2NvbnN0IGludCBW
S19TTkFQU0hPVCA9IDB4MkM7CisKKy8vIFZLX0lOU0VSVCAoMkQpIElOUyBrZXkKK2NvbnN0IGlu
dCBWS19JTlNFUlQgPSAweDJEOworCisvLyBWS19ERUxFVEUgKDJFKSBERUwga2V5Citjb25zdCBp
bnQgVktfREVMRVRFID0gMHgyRTsKKworLy8gVktfSEVMUCAoMkYpIEhFTFAga2V5Citjb25zdCBp
bnQgVktfSEVMUCA9IDB4MkY7CisKKy8vICgzMCkgMCBrZXkKK2NvbnN0IGludCBWS18wID0gMHgz
MDsKKworLy8gKDMxKSAxIGtleQorY29uc3QgaW50IFZLXzEgPSAweDMxOworCisvLyAoMzIpIDIg
a2V5Citjb25zdCBpbnQgVktfMiA9IDB4MzI7CisKKy8vICgzMykgMyBrZXkKK2NvbnN0IGludCBW
S18zID0gMHgzMzsKKworLy8gKDM0KSA0IGtleQorY29uc3QgaW50IFZLXzQgPSAweDM0OworCisv
LyAoMzUpIDUga2V5OworCitjb25zdCBpbnQgVktfNSA9IDB4MzU7CisKKy8vICgzNikgNiBrZXkK
K2NvbnN0IGludCBWS182ID0gMHgzNjsKKworLy8gKDM3KSA3IGtleQorY29uc3QgaW50IFZLXzcg
PSAweDM3OworCisvLyAoMzgpIDgga2V5Citjb25zdCBpbnQgVktfOCA9IDB4Mzg7CisKKy8vICgz
OSkgOSBrZXkKK2NvbnN0IGludCBWS185ID0gMHgzOTsKKworLy8gKDQxKSBBIGtleQorY29uc3Qg
aW50IFZLX0EgPSAweDQxOworCisvLyAoNDIpIEIga2V5Citjb25zdCBpbnQgVktfQiA9IDB4NDI7
CisKKy8vICg0MykgQyBrZXkKK2NvbnN0IGludCBWS19DID0gMHg0MzsKKworLy8gKDQ0KSBEIGtl
eQorY29uc3QgaW50IFZLX0QgPSAweDQ0OworCisvLyAoNDUpIEUga2V5Citjb25zdCBpbnQgVktf
RSA9IDB4NDU7CisKKy8vICg0NikgRiBrZXkKK2NvbnN0IGludCBWS19GID0gMHg0NjsKKworLy8g
KDQ3KSBHIGtleQorY29uc3QgaW50IFZLX0cgPSAweDQ3OworCisvLyAoNDgpIEgga2V5Citjb25z
dCBpbnQgVktfSCA9IDB4NDg7CisKKy8vICg0OSkgSSBrZXkKK2NvbnN0IGludCBWS19JID0gMHg0
OTsKKworLy8gKDRBKSBKIGtleQorY29uc3QgaW50IFZLX0ogPSAweDRBOworCisvLyAoNEIpIEsg
a2V5Citjb25zdCBpbnQgVktfSyA9IDB4NEI7CisKKy8vICg0QykgTCBrZXkKK2NvbnN0IGludCBW
S19MID0gMHg0QzsKKworLy8gKDREKSBNIGtleQorY29uc3QgaW50IFZLX00gPSAweDREOworCisv
LyAoNEUpIE4ga2V5Citjb25zdCBpbnQgVktfTiA9IDB4NEU7CisKKy8vICg0RikgTyBrZXkKK2Nv
bnN0IGludCBWS19PID0gMHg0RjsKKworLy8gKDUwKSBQIGtleQorY29uc3QgaW50IFZLX1AgPSAw
eDUwOworCisvLyAoNTEpIFEga2V5Citjb25zdCBpbnQgVktfUSA9IDB4NTE7CisKKy8vICg1Mikg
UiBrZXkKK2NvbnN0IGludCBWS19SID0gMHg1MjsKKworLy8gKDUzKSBTIGtleQorY29uc3QgaW50
IFZLX1MgPSAweDUzOworCisvLyAoNTQpIFQga2V5Citjb25zdCBpbnQgVktfVCA9IDB4NTQ7CisK
Ky8vICg1NSkgVSBrZXkKK2NvbnN0IGludCBWS19VID0gMHg1NTsKKworLy8gKDU2KSBWIGtleQor
Y29uc3QgaW50IFZLX1YgPSAweDU2OworCisvLyAoNTcpIFcga2V5Citjb25zdCBpbnQgVktfVyA9
IDB4NTc7CisKKy8vICg1OCkgWCBrZXkKK2NvbnN0IGludCBWS19YID0gMHg1ODsKKworLy8gKDU5
KSBZIGtleQorY29uc3QgaW50IFZLX1kgPSAweDU5OworCisvLyAoNUEpIFoga2V5Citjb25zdCBp
bnQgVktfWiA9IDB4NUE7CisKKy8vIFZLX0xXSU4gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNy
b3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKK2NvbnN0IGludCBWS19MV0lOID0gMHg1QjsKKworLy8g
VktfUldJTiAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQorY29uc3Qg
aW50IFZLX1JXSU4gPSAweDVDOworCisvLyBWS19BUFBTICg1RCkgQXBwbGljYXRpb25zIGtleSAo
TmF0dXJhbCBrZXlib2FyZCkKK2NvbnN0IGludCBWS19BUFBTID0gMHg1RDsKKworLy8gVktfU0xF
RVAgKDVGKSBDb21wdXRlciBTbGVlcCBrZXkKK2NvbnN0IGludCBWS19TTEVFUCA9IDB4NUY7CisK
Ky8vIFZLX05VTVBBRDAgKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorY29uc3QgaW50IFZLX05V
TVBBRDAgPSAweDYwOworCisvLyBWS19OVU1QQUQxICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkK
K2NvbnN0IGludCBWS19OVU1QQUQxID0gMHg2MTsKKworLy8gVktfTlVNUEFEMiAoNjIpIE51bWVy
aWMga2V5cGFkIDIga2V5Citjb25zdCBpbnQgVktfTlVNUEFEMiA9IDB4NjI7CisKKy8vIFZLX05V
TVBBRDMgKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorY29uc3QgaW50IFZLX05VTVBBRDMgPSAw
eDYzOworCisvLyBWS19OVU1QQUQ0ICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKK2NvbnN0IGlu
dCBWS19OVU1QQUQ0ID0gMHg2NDsKKworLy8gVktfTlVNUEFENSAoNjUpIE51bWVyaWMga2V5cGFk
IDUga2V5Citjb25zdCBpbnQgVktfTlVNUEFENSA9IDB4NjU7CisKKy8vIFZLX05VTVBBRDYgKDY2
KSBOdW1lcmljIGtleXBhZCA2IGtleQorY29uc3QgaW50IFZLX05VTVBBRDYgPSAweDY2OworCisv
LyBWS19OVU1QQUQ3ICg2NykgTnVtZXJpYyBrZXlwYWQgNyBrZXkKK2NvbnN0IGludCBWS19OVU1Q
QUQ3ID0gMHg2NzsKKworLy8gVktfTlVNUEFEOCAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5Citj
b25zdCBpbnQgVktfTlVNUEFEOCA9IDB4Njg7CisKKy8vIFZLX05VTVBBRDkgKDY5KSBOdW1lcmlj
IGtleXBhZCA5IGtleQorY29uc3QgaW50IFZLX05VTVBBRDkgPSAweDY5OworCisvLyBWS19NVUxU
SVBMWSAoNkEpIE11bHRpcGx5IGtleQorY29uc3QgaW50IFZLX01VTFRJUExZID0gMHg2QTsKKwor
Ly8gVktfQUREICg2QikgQWRkIGtleQorY29uc3QgaW50IFZLX0FERCA9IDB4NkI7CisKKy8vIFZL
X1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkKK2NvbnN0IGludCBWS19TRVBBUkFUT1IgPSAw
eDZDOworCisvLyBWS19TVUJUUkFDVCAoNkQpIFN1YnRyYWN0IGtleQorY29uc3QgaW50IFZLX1NV
QlRSQUNUID0gMHg2RDsKKworLy8gVktfREVDSU1BTCAoNkUpIERlY2ltYWwga2V5Citjb25zdCBp
bnQgVktfREVDSU1BTCA9IDB4NkU7CisKKy8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKK2Nv
bnN0IGludCBWS19ESVZJREUgPSAweDZGOworCisvLyBWS19GMSAoNzApIEYxIGtleQorY29uc3Qg
aW50IFZLX0YxID0gMHg3MDsKKworLy8gVktfRjIgKDcxKSBGMiBrZXkKK2NvbnN0IGludCBWS19G
MiA9IDB4NzE7CisKKy8vIFZLX0YzICg3MikgRjMga2V5Citjb25zdCBpbnQgVktfRjMgPSAweDcy
OworCisvLyBWS19GNCAoNzMpIEY0IGtleQorY29uc3QgaW50IFZLX0Y0ID0gMHg3MzsKKworLy8g
VktfRjUgKDc0KSBGNSBrZXkKK2NvbnN0IGludCBWS19GNSA9IDB4NzQ7CisKKy8vIFZLX0Y2ICg3
NSkgRjYga2V5Citjb25zdCBpbnQgVktfRjYgPSAweDc1OworCisvLyBWS19GNyAoNzYpIEY3IGtl
eQorY29uc3QgaW50IFZLX0Y3ID0gMHg3NjsKKworLy8gVktfRjggKDc3KSBGOCBrZXkKK2NvbnN0
IGludCBWS19GOCA9IDB4Nzc7CisKKy8vIFZLX0Y5ICg3OCkgRjkga2V5Citjb25zdCBpbnQgVktf
RjkgPSAweDc4OworCisvLyBWS19GMTAgKDc5KSBGMTAga2V5Citjb25zdCBpbnQgVktfRjEwID0g
MHg3OTsKKworLy8gVktfRjExICg3QSkgRjExIGtleQorY29uc3QgaW50IFZLX0YxMSA9IDB4N0E7
CisKKy8vIFZLX0YxMiAoN0IpIEYxMiBrZXkKK2NvbnN0IGludCBWS19GMTIgPSAweDdCOworCisv
LyBWS19GMTMgKDdDKSBGMTMga2V5Citjb25zdCBpbnQgVktfRjEzID0gMHg3QzsKKworLy8gVktf
RjE0ICg3RCkgRjE0IGtleQorY29uc3QgaW50IFZLX0YxNCA9IDB4N0Q7CisKKy8vIFZLX0YxNSAo
N0UpIEYxNSBrZXkKK2NvbnN0IGludCBWS19GMTUgPSAweDdFOworCisvLyBWS19GMTYgKDdGKSBG
MTYga2V5Citjb25zdCBpbnQgVktfRjE2ID0gMHg3RjsKKworLy8gVktfRjE3ICg4MEgpIEYxNyBr
ZXkKK2NvbnN0IGludCBWS19GMTcgPSAweDgwOworCisvLyBWS19GMTggKDgxSCkgRjE4IGtleQor
Y29uc3QgaW50IFZLX0YxOCA9IDB4ODE7CisKKy8vIFZLX0YxOSAoODJIKSBGMTkga2V5Citjb25z
dCBpbnQgVktfRjE5ID0gMHg4MjsKKworLy8gVktfRjIwICg4M0gpIEYyMCBrZXkKK2NvbnN0IGlu
dCBWS19GMjAgPSAweDgzOworCisvLyBWS19GMjEgKDg0SCkgRjIxIGtleQorY29uc3QgaW50IFZL
X0YyMSA9IDB4ODQ7CisKKy8vIFZLX0YyMiAoODVIKSBGMjIga2V5Citjb25zdCBpbnQgVktfRjIy
ID0gMHg4NTsKKworLy8gVktfRjIzICg4NkgpIEYyMyBrZXkKK2NvbnN0IGludCBWS19GMjMgPSAw
eDg2OworCisvLyBWS19GMjQgKDg3SCkgRjI0IGtleQorY29uc3QgaW50IFZLX0YyNCA9IDB4ODc7
CisKKy8vIFZLX05VTUxPQ0sgKDkwKSBOVU0gTE9DSyBrZXkKK2NvbnN0IGludCBWS19OVU1MT0NL
ID0gMHg5MDsKKworLy8gVktfU0NST0xMICg5MSkgU0NST0xMIExPQ0sga2V5Citjb25zdCBpbnQg
VktfU0NST0xMID0gMHg5MTsKKworLy8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKK2Nv
bnN0IGludCBWS19MU0hJRlQgPSAweEEwOworCisvLyBWS19SU0hJRlQgKEExKSBSaWdodCBTSElG
VCBrZXkKK2NvbnN0IGludCBWS19SU0hJRlQgPSAweEExOworCisvLyBWS19MQ09OVFJPTCAoQTIp
IExlZnQgQ09OVFJPTCBrZXkKK2NvbnN0IGludCBWS19MQ09OVFJPTCA9IDB4QTI7CisKKy8vIFZL
X1JDT05UUk9MIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKK2NvbnN0IGludCBWS19SQ09OVFJPTCA9
IDB4QTM7CisKKy8vIFZLX0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQorY29uc3QgaW50IFZLX0xN
RU5VID0gMHhBNDsKKworLy8gVktfUk1FTlUgKEE1KSBSaWdodCBNRU5VIGtleQorY29uc3QgaW50
IFZLX1JNRU5VID0gMHhBNTsKKworLy8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAw
L1hQOiBCcm93c2VyIEJhY2sga2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9CQUNLID0gMHhBNjsK
KworLy8gVktfQlJPV1NFUl9GT1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZv
cndhcmQga2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9GT1JXQVJEID0gMHhBNzsKKworLy8gVktf
QlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5
Citjb25zdCBpbnQgVktfQlJPV1NFUl9SRUZSRVNIID0gMHhBODsKKworLy8gVktfQlJPV1NFUl9T
VE9QIChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5Citjb25zdCBpbnQgVktf
QlJPV1NFUl9TVE9QID0gMHhBOTsKKworLy8gVktfQlJPV1NFUl9TRUFSQ0ggKEFBKSBXaW5kb3dz
IDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfU0VBUkNI
ID0gMHhBQTsKKworLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgRmF2b3JpdGVzIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfRkFWT1JJVEVTID0g
MHhBQjsKKworLy8gVktfQlJPV1NFUl9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93c2Vy
IFN0YXJ0IGFuZCBIb21lIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfSE9NRSA9IDB4QUM7CisK
Ky8vIFZLX1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkK
K2NvbnN0IGludCBWS19WT0xVTUVfTVVURSA9IDB4QUQ7CisKKy8vIFZLX1ZPTFVNRV9ET1dOIChB
RSkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgRG93biBrZXkKK2NvbnN0IGludCBWS19WT0xVTUVf
RE9XTiA9IDB4QUU7CisKKy8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9s
dW1lIFVwIGtleQorY29uc3QgaW50IFZLX1ZPTFVNRV9VUCA9IDB4QUY7CisKKy8vIFZLX01FRElB
X05FWFRfVFJBQ0sgKEIwKSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5Citjb25zdCBp
bnQgVktfTUVESUFfTkVYVF9UUkFDSyA9IDB4QjA7CisKKy8vIFZLX01FRElBX1BSRVZfVFJBQ0sg
KEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQorY29uc3QgaW50IFZLX01F
RElBX1BSRVZfVFJBQ0sgPSAweEIxOworCisvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAy
MDAwL1hQOiBTdG9wIE1lZGlhIGtleQorY29uc3QgaW50IFZLX01FRElBX1NUT1AgPSAweEIyOwor
CisvLyBWS19NRURJQV9QTEFZX1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQbGF5L1BhdXNl
IE1lZGlhIGtleQorY29uc3QgaW50IFZLX01FRElBX1BMQVlfUEFVU0UgPSAweEIzOworCisvLyBW
S19MQVVOQ0hfTUFJTCAoQjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKK2NvbnN0
IGludCBWS19NRURJQV9MQVVOQ0hfTUFJTCA9IDB4QjQ7CisKKy8vIFZLX0xBVU5DSF9NRURJQV9T
RUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKK2NvbnN0IGludCBW
S19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUID0gMHhCNTsKKworLy8gVktfTEFVTkNIX0FQUDEg
KEI2KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDEga2V5Citjb25zdCBpbnQg
VktfTUVESUFfTEFVTkNIX0FQUDEgPSAweEI2OworCisvLyBWS19MQVVOQ0hfQVBQMiAoQjcpIFdp
bmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkKK2NvbnN0IGludCBWS19NRURJ
QV9MQVVOQ0hfQVBQMiA9IDB4Qjc7CisKKy8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2Vs
bGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAw
L1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKK2NvbnN0IGlu
dCBWS19PRU1fMSA9IDB4QkE7CisKKy8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAyMDAwL1hQ
OiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJysnIGtleQorY29uc3QgaW50IFZLX09FTV9Q
TFVTID0gMHhCQjsKKworLy8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBGb3Ig
YW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQorY29uc3QgaW50IFZLX09FTV9DT01NQSA9
IDB4QkM7CisKKy8vIFZLX09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBj
b3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKK2NvbnN0IGludCBWS19PRU1fTUlOVVMgPSAweEJE
OworCisvLyBWS19PRU1fUEVSSU9EIChCRSkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50
cnkvcmVnaW9uLCB0aGUgJy4nIGtleQorY29uc3QgaW50IFZLX09FTV9QRVJJT0QgPSAweEJFOwor
CisvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICcvPycga2V5Citjb25zdCBpbnQgVktfT0VNXzIgPSAweEJGOworCisv
LyBWS19PRU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICdgficga2V5Citjb25zdCBpbnQgVktfT0VNXzMgPSAweEMwOworCisvLyBW
S19PRU1fNCAoREIpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZh
cnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXli
b2FyZCwgdGhlICdbeycga2V5Citjb25zdCBpbnQgVktfT0VNXzQgPSAweERCOworCisvLyBWS19P
RU1fNSAoREMpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkg
Ynkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2Fy
ZCwgdGhlICdcfCcga2V5Citjb25zdCBpbnQgVktfT0VNXzUgPSAweERDOworCisvLyBWS19PRU1f
NiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkg
a2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwg
dGhlICddfScga2V5Citjb25zdCBpbnQgVktfT0VNXzYgPSAweEREOworCisvLyBWS19PRU1fNyAo
REUpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5
Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhl
ICdzaW5nbGUtcXVvdGUvZG91YmxlLXF1b3RlJyBrZXkKK2NvbnN0IGludCBWS19PRU1fNyA9IDB4
REU7CisKKy8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KK2NvbnN0IGludCBWS19PRU1fOCA9IDB4REY7CisK
Ky8vIFZLX09FTV8xMDIgKEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJh
Y2tldCBrZXkgb3IgdGhlIGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQK
K2NvbnN0IGludCBWS19PRU1fMTAyID0gMHhFMjsKKworLy8gVktfUFJPQ0VTU0tFWSAoRTUpIFdp
bmRvd3MgOTUvOTgvTWUsIFdpbmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQUk9D
RVNTIGtleQorY29uc3QgaW50IFZLX1BST0NFU1NLRVkgPSAweEU1OworCisvLyBWS19QQUNLRVQg
KEU3KSBXaW5kb3dzIDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMg
aWYgdGhleSB3ZXJlIGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29y
ZCBvZiBhIDMyLWJpdCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5w
dXQgbWV0aG9kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBV
VCxTZW5kSW5wdXQsIFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAorY29uc3QgaW50IFZLX1BBQ0tF
VCA9IDB4RTc7CisKKy8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQorY29uc3QgaW50IFZLX0FUVE4g
PSAweEY2OworCisvLyBWS19DUlNFTCAoRjcpIENyU2VsIGtleQorY29uc3QgaW50IFZLX0NSU0VM
ID0gMHhGNzsKKworLy8gVktfRVhTRUwgKEY4KSBFeFNlbCBrZXkKK2NvbnN0IGludCBWS19FWFNF
TCA9IDB4Rjg7CisKKy8vIFZLX0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQorY29uc3QgaW50IFZL
X0VSRU9GID0gMHhGOTsKKworLy8gVktfUExBWSAoRkEpIFBsYXkga2V5Citjb25zdCBpbnQgVktf
UExBWSA9IDB4RkE7CisKKy8vIFZLX1pPT00gKEZCKSBab29tIGtleQorY29uc3QgaW50IFZLX1pP
T00gPSAweEZCOworCisvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQor
Y29uc3QgaW50IFZLX05PTkFNRSA9IDB4RkM7CisKKy8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKK2Nv
bnN0IGludCBWS19QQTEgPSAweEZEOworCisvLyBWS19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkK
K2NvbnN0IGludCBWS19PRU1fQ0xFQVIgPSAweEZFOworCitjb25zdCBpbnQgVktfVU5LTk9XTiA9
IDA7CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvTG9jYWxp
emVkU3RyaW5nc0FuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5k
cm9pZC9Mb2NhbGl6ZWRTdHJpbmdzQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2FuZHJvaWQvTG9jYWxpemVkU3RyaW5nc0FuZHJvaWQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9w
ZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1t
ZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiSW5zcGVjdCBFbGVtZW50Iik7Cit9
CisKK1N0cmluZyB1bmtub3duRmlsZVNpemVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOCgiVW5rbm93biIpOworfQorCitTdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Fu
ZHJvaWQvUG9wdXBNZW51QW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9hbmRyb2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1w
bGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCisgKgorICogQ29w
eXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQb3B1cE1lbnUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBOb3cgd2Ug
aGFuZGxlIGFsbCBvZiB0aGlzIGluIFdlYlZpZXdDb3JlLmNwcAorUG9wdXBNZW51OjpQb3B1cE1l
bnUoUG9wdXBNZW51Q2xpZW50KiBtZW51TGlzdCkgOiBtX3BvcHVwQ2xpZW50KG1lbnVMaXN0KQor
eworfQorCitQb3B1cE1lbnU6On5Qb3B1cE1lbnUoKQoreworfQorCit2b2lkIFBvcHVwTWVudTo6
c2hvdyhjb25zdCBJbnRSZWN0JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKK3sK
KworfQorCit2b2lkIFBvcHVwTWVudTo6aGlkZSgpCit7Cit9CisKK3ZvaWQgUG9wdXBNZW51Ojp1
cGRhdGVGcm9tRWxlbWVudCgpIAoreworfQorCisvLyBmdW5jdGlvbnMgbmV3IHRvIEp1bi0wNyB0
aXAgb2YgdHJlZSBtZXJnZToKK2Jvb2wgUG9wdXBNZW51OjppdGVtV3JpdGluZ0RpcmVjdGlvbklz
TmF0dXJhbCgpIHsgcmV0dXJuIGZhbHNlOyB9CisKK30KKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQg
T3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVGhlbWVBbmRyb2lkLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51LmgiCisjaW5jbHVk
ZSAiUmVuZGVyU2tpbkFuZHJvaWQuaCIKKyNpbmNsdWRlICJSZW5kZXJTa2luQnV0dG9uLmgiCisj
aW5jbHVkZSAiUmVuZGVyU2tpbkNvbWJvLmgiCisjaW5jbHVkZSAiUmVuZGVyU2tpblJhZGlvLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKworI2RlZmluZSBNQVhfQ09N
Qk9fSEVJR0hUIDIwCisKKy8vIEFkZCBhIGNvbnN0YW50IGFtb3VudCBvZiBwYWRkaW5nIHRvIHRo
ZSB0ZXh0c2l6ZSB0byBnZXQgdGhlIGZpbmFsIGhlaWdodCBvZiBidXR0b25zLAorLy8gc28gdGhh
dCBvdXIgYnV0dG9uIGltYWdlcyBhcmUgbGFyZ2UgZW5vdWdoIHRvIHByb3Blcmx5IGZpdCB0aGUg
dGV4dC4KKyNkZWZpbmUgQlVUVE9OX1BBRERJTkcgMTgKKworLy8gQWRkIHBhZGRpbmcgdG8gdGhl
IGZvbnRTaXplIG9mIExpc3RCb3hlcyB0byBnZXQgdGhlaXIgbWF4aW11bSBzaXplcy4KKy8vIExp
c3Rib3hlcyBvZnRlbiBoYXZlIGEgc3BlY2lmaWVkIHNpemUuICBTaW5jZSB3ZSBjaGFuZ2UgdGhl
bSBpbnRvIGRyb3Bkb3ducywKKy8vIHdlIHdhbnQgYSBtdWNoIHNtYWxsZXIgaGVpZ2h0LCB3aGlj
aCBlbmNvbXBhc3NlcyB0aGUgdGV4dC4KKyNkZWZpbmUgTElTVEJPWF9QQURESU5HIDUKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworc3RhdGljIFNrQ2FudmFzKiBnZXRDYW52YXNGcm9tSW5mbyhjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaW5mbykKK3sKKyAgICByZXR1cm4gaW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+bUNhbnZhczsKK30KKworLyogIEhlbHBlciBmdW5jdGlv
biB0aGF0IHBhaW50cyB0aGUgUmVuZGVyT2JqZWN0CisgKiAgcGFyYW10ZXJzOgorICogICAgICB0
aGUgc2tpbiB0byB1c2UsIAorICogICAgICB0aGUgb2JqZWN0IHRvIGJlIHBhaW50ZWQsIHRoZSBQ
YWludEluZm8sIGZyb20gd2hpY2ggd2UgZ2V0IHRoZSBjYW52YXMsIHRoZSBib3VuZGluZyByZWN0
YW5nbGUsIAorICogIHJldHVybnMgZmFsc2UsIG1lYW5pbmcgbm8gb25lIGVsc2UgaGFzIHRvIHBh
aW50IGl0CisqLworCitzdGF0aWMgYm9vbCBwYWludEJydXNoKFJlbmRlclNraW5BbmRyb2lkKiBy
U2tpbiwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
IGNvbnN0IEludFJlY3QmIGlyKQoreworICAgIE5vZGUqIGVsZW1lbnQgPSBvLT5lbGVtZW50KCk7
CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IGdldENhbnZhc0Zyb21JbmZvKGkpOworICAgIGNhbnZh
cy0+c2F2ZSgpOworICAgIGNhbnZhcy0+dHJhbnNsYXRlKFNrSW50VG9TY2FsYXIoaXIueCgpKSwg
U2tJbnRUb1NjYWxhcihpci55KCkpKTsKKyAgICByU2tpbi0+c2V0RGltKGlyLndpZHRoKCksIGly
LmhlaWdodCgpKTsKKyAgICByU2tpbi0+bm90aWZ5U3RhdGUoZWxlbWVudCk7CisgICAgclNraW4t
PmRyYXcoaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2FudmFzLT5yZXN0b3Jl
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK1JlbmRlclRoZW1lKiB0aGVtZSgpCit7Cisg
ICAgc3RhdGljIFJlbmRlclRoZW1lQW5kcm9pZCBhbmRyb2lkVGhlbWU7CisgICAgcmV0dXJuICZh
bmRyb2lkVGhlbWU7Cit9CisKK1JlbmRlclRoZW1lQW5kcm9pZDo6UmVuZGVyVGhlbWVBbmRyb2lk
KCkKK3sKKyAgICBtX3JhZGlvID0gbmV3IFJlbmRlclNraW5SYWRpbyhmYWxzZSk7CisgICAgbV9j
aGVja2JveCA9IG5ldyBSZW5kZXJTa2luUmFkaW8odHJ1ZSk7CisgICAgbV9jb21ibyA9IG5ldyBS
ZW5kZXJTa2luQ29tYm8oKTsKK30KKworUmVuZGVyVGhlbWVBbmRyb2lkOjp+UmVuZGVyVGhlbWVB
bmRyb2lkKCkKK3sKKyAgICBkZWxldGUgbV9yYWRpbzsKKyAgICBkZWxldGUgbV9jaGVja2JveDsK
KyAgICBkZWxldGUgbV9jb21ibzsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmNsb3Nl
KCkKK3sKKworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6c3RhdGVDaGFuZ2VkKFJlbmRl
ck9iamVjdCogbywgQ29udHJvbFN0YXRlIHN0YXRlKSBjb25zdAoreworICAgIGlmIChDaGVja2Vk
U3RhdGUgPT0gc3RhdGUpIHsKKyAgICAgICAgby0+cmVwYWludCgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb2xvciBSZW5kZXJUaGVtZUFu
ZHJvaWQ6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gQ29sb3IoNDYsIDI1MSwgMCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lQW5k
cm9pZDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwLCAyNTUpOworfQorCitDb2xvciBSZW5kZXJU
aGVtZUFuZHJvaWQ6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBSZW5kZXJUaGVtZUFu
ZHJvaWQ6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAor
eworICAgIHJldHVybiBDb2xvcjo6YmxhY2s7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lQW5kcm9p
ZDo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBDb2xvcigxOTIsIDE5MiwgMTkyKTsKK30KKworaW50IFJlbmRlclRoZW1lQW5kcm9pZDo6YmFz
ZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG9iaikgY29uc3QKK3sKKyAgICAvLyBG
cm9tIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGluIFJlbmRlclRoZW1lLmg6Cisg
ICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVh
ZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQorICAgIC8v
IHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50
LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgorICAgIC8vIGNv
bnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgorICAgIC8vCisgICAgLy8gT3VyIGNoZWNrYm94
ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgbmVlZCB0byBiZSBvZmZzZXQgdG8gbGluZSB1cCBwcm9wZXJs
eS4KKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24ob2JqKSAtIDU7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBDdXQgb3V0IHRoZSBpbnRyaW5zaWMgbWFyZ2lu
cyBjb21wbGV0ZWx5IGlmIHdlIGVuZCB1cCB1c2luZyBhIHNtYWxsIGZvbnQgc2l6ZQorICAgIGlm
IChzdHlsZS0+Zm9udFNpemUoKSA8IDExKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
SW50cmluc2ljIG1hcmdpbiB2YWx1ZS4KKyAgICBjb25zdCBpbnQgbSA9IDI7CisgICAgCisgICAg
Ly8gRklYTUU6IFVzaW5nIHdpZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGluZyB3
aXRoIG1pbi13aWR0aC9tYXgtd2lkdGggaXMgZmxhd2VkLgorICAgIGlmIChzdHlsZS0+d2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpKSB7CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luTGVmdCgp
LnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luTGVmdChMZW5ndGgobSwgRml4
ZWQpKTsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5SaWdodCgpLnF1aXJrKCkpCisgICAgICAg
ICAgICBzdHlsZS0+c2V0TWFyZ2luUmlnaHQoTGVuZ3RoKG0sIEZpeGVkKSk7CisgICAgfQorCisg
ICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1h
cmdpblRvcCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luVG9wKExlbmd0
aChtLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkJvdHRvbSgpLnF1aXJrKCkp
CisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luQm90dG9tKExlbmd0aChtLCBGaXhlZCkpOwor
ICAgIH0KK30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnN1cHBvcnRzRm9jdXMoQ29udHJv
bFBhcnQgYXBwZWFyYW5jZSkKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICAgICAg
Y2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICBj
YXNlIFRleHRGaWVsZFBhcnQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RCdXR0b25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVt
ZW50KiBlKSBjb25zdAoreworICAgIC8vIFBhZGRpbmcgY29kZSBpcyB0YWtlbiBmcm9tIFJlbmRl
clRoZW1lU2FmYXJpLmNwcAorICAgIC8vIEl0IG1ha2VzIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3Bh
Y2UgZm9yIHRoZSBidXR0b24gdGV4dC4KKyAgICBjb25zdCBpbnQgcGFkZGluZyA9IDg7CisgICAg
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxl
LT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNl
dE1pbkhlaWdodChMZW5ndGgoc3R5bGUtPmZvbnRTaXplKCkgKyBCVVRUT05fUEFERElORywgRml4
ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgaXIpCit7CisgICAgcmV0dXJuIHBhaW50QnJ1c2gobV9jaGVja2JveCwgbywgaSwgaXIpOwor
fQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgaXIpCit7
CisgICAgLy8gSWYgaXQgaXMgYSBkaXNhYmxlZCBidXR0b24sIHNpbXBseSBwYWludCBpdCB0byB0
aGUgbWFzdGVyIHBpY3R1cmUuCisgICAgTm9kZSogZWxlbWVudCA9IG8tPmVsZW1lbnQoKTsKKyAg
ICBpZiAoIWVsZW1lbnQtPmlzRW5hYmxlZCgpKSB7CisgICAgICAgIFJlbmRlclNraW5CdXR0b246
OkRyYXcoZ2V0Q2FudmFzRnJvbUluZm8oaSksIGlyLCBSZW5kZXJTa2luQW5kcm9pZDo6a0Rpc2Fi
bGVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTdG9yZSBhbGwgdGhlIGltcG9ydGFudCBp
bmZvcm1hdGlvbiBpbiB0aGUgcGxhdGZvcm0gY29udGV4dC4KKyAgICAgICAgaS5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+c3RvcmVCdXR0b25JbmZvKGVsZW1lbnQsIGlyKTsKKyAgICB9Cisg
ICAgLy8gV2UgYWx3YXlzIHJldHVybiBmYWxzZSBzbyB3ZSBkbyBub3QgcmVxdWVzdCB0byBiZSBy
ZWRyYXduLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6
OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgaXIpCit7CisgICAgcmV0dXJuIHBhaW50QnJ1c2gobV9yYWRp
bywgbywgaSwgaXIpOworfQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6c2V0Q2hlY2tib3hT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKDE5LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKDE5LCBGaXhlZCkp
OworfQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIGNoZWNrYm94ZXMu
CisgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJv
aWQ6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRkSW50
cmluc2ljTWFyZ2lucyhzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiBpcikKK3sKKyAgICByZXR1cm4gdHJ1ZTsgICAgCit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNv
bnN0Cit7CisgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVBbmRyb2lkOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIGlyKQoreworICAgIGlmIChvLT5p
c01lbnVMaXN0KCkpIHsKKyAgICAgICAgcmV0dXJuIHBhaW50Q29tYm8obywgaSwgaXIpOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsgICAgCit9CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjph
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgYWRkSW50cmluc2ljTWFyZ2lu
cyhzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludFNlYXJjaEZpZWxk
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIGlyKQoreworICAgIHJldHVybiB0cnVlOyAgICAKK30KKwordm9pZCBSZW5kZXJU
aGVtZUFuZHJvaWQ6OmFkanVzdExpc3Rib3hTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIHN0eWxlLT5z
ZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKFJlbmRlclNraW5Db21ibzo6ZXh0cmFXaWR0aCgpLCBGaXhl
ZCkpOworICAgIHN0eWxlLT5zZXRNYXhIZWlnaHQoTGVuZ3RoKHN0eWxlLT5mb250U2l6ZSgpICsg
TElTVEJPWF9QQURESU5HLCBGaXhlZCkpOworICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUp
OworfQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBj
b25zdAoreworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKFJlbmRlclNraW5Db21i
bzo6ZXh0cmFXaWR0aCgpLCBGaXhlZCkpOworICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUp
OworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRDb21ibyhSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCAgY29uc3QgSW50UmVjdCYgaXIp
Cit7CisgICAgaWYgKG8tPnN0eWxlKCkgJiYgby0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCku
YWxwaGEoKSA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBOb2RlKiBlbGVtZW50ID0g
by0+ZWxlbWVudCgpOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnZXRDYW52YXNGcm9tSW5mbyhp
KTsKKyAgICBtX2NvbWJvLT5ub3RpZnlTdGF0ZShlbGVtZW50KTsKKyAgICBjYW52YXMtPnNhdmUo
KTsKKyAgICBpbnQgaGVpZ2h0ID0gaXIuaGVpZ2h0KCk7CisgICAgaW50IHkgPSBpci55KCk7Cisg
ICAgLy8gSWYgdGhlIGNvbWJvIGJveCBpcyB0b28gbGFyZ2UsIGxlYXZlIGl0IGF0IGl0cyBtYXgg
aGVpZ2h0LCBhbmQgY2VudGVyIGl0LgorICAgIGlmIChoZWlnaHQgPiBNQVhfQ09NQk9fSEVJR0hU
KSB7CisgICAgICAgIHkgKz0gKGhlaWdodCAtIE1BWF9DT01CT19IRUlHSFQpID4+IDE7CisgICAg
ICAgIGhlaWdodCA9IE1BWF9DT01CT19IRUlHSFQ7CisgICAgfQorICAgIGNhbnZhcy0+dHJhbnNs
YXRlKFNrSW50VG9TY2FsYXIoaXIueCgpKSwgU2tJbnRUb1NjYWxhcih5KSk7CisgICAgbV9jb21i
by0+c2V0RGltKGlyLndpZHRoKCksIGhlaWdodCk7CisgICAgbV9jb21iby0+ZHJhdyhpLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBjYW52YXMtPnJlc3RvcmUoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludE1lbnVMaXN0KFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIGlyKSAKK3sgCisgICAgcmV0dXJuIHBhaW50Q29tYm8obywgaSwgaXIpOworfQorCit2
b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25z
dAoreworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKFJlbmRlclNraW5Db21ibzo6
ZXh0cmFXaWR0aCgpLCBGaXhlZCkpOworICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOwor
fQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiBpcikgCit7IAorICAgIHJldHVybiBwYWludENvbWJvKG8sIGksIGlyKTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUFuZHJvaWQ6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gKHN0eWxlLT5vcGFjaXR5KCkgPiAwICYmIHN0eWxl
LT5oYXNBcHBlYXJhbmNlKCkgCisgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJh
bmNlKCkgIT0gVGV4dEZpZWxkUGFydCAKKyAgICAgICAgICAgICAgICAgICAgJiYgc3R5bGUtPmFw
cGVhcmFuY2UoKSAhPSBTZWFyY2hGaWVsZFBhcnQgCisgICAgICAgICAgICAgICAgICAgICYmIHN0
eWxlLT5hcHBlYXJhbmNlKCkgIT0gVGV4dEFyZWFQYXJ0IAorICAgICAgICAgICAgICAgICAgICAm
JiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IENoZWNrYm94UGFydAorICAgICAgICAgICAgICAgICAg
ICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFJhZGlvUGFydAorICAgICAgICAgICAgICAgICAg
ICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFB1c2hCdXR0b25QYXJ0CisgICAgICAgICAgICAg
ICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gU3F1YXJlQnV0dG9uUGFydAorICAgICAg
ICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IEJ1dHRvblBhcnQKKyAgICAg
ICAgICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBCdXR0b25CZXZlbFBhcnQK
KyAgICAgICAgICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBNZW51bGlzdFBh
cnQKKyAgICAgICAgICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBNZW51bGlz
dEJ1dHRvblBhcnQKKyAgICAgICAgICAgICAgICAgICAgKTsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlclRoZW1lQW5kcm9p
ZF9oCisjZGVmaW5lIFJlbmRlclRoZW1lQW5kcm9pZF9oCisKKyNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBvcHVwTWVudTsKK2NsYXNzIFJl
bmRlclNraW5CdXR0b247CitjbGFzcyBSZW5kZXJTa2luUmFkaW87CitjbGFzcyBSZW5kZXJTa2lu
Q29tYm87CisKK3N0cnVjdCBUaGVtZURhdGEgeworICAgIFRoZW1lRGF0YSgpIDptX3BhcnQoMCks
IG1fc3RhdGUoMCkge30KKworICAgIHVuc2lnbmVkIG1fcGFydDsKKyAgICB1bnNpZ25lZCBtX3N0
YXRlOworfTsKKworY2xhc3MgUmVuZGVyVGhlbWVBbmRyb2lkIDogcHVibGljIFJlbmRlclRoZW1l
IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJUaGVtZUFuZHJvaWQoKTsKKyAgICB+UmVuZGVyVGhlbWVB
bmRyb2lkKCk7CisgICAgCisgICAgdmlydHVhbCBib29sIHN0YXRlQ2hhbmdlZChSZW5kZXJPYmpl
Y3QqLCBDb250cm9sU3RhdGUpIGNvbnN0OworICAgICAgIAorICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OworICAgIC8vIEEg
bWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0
IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiBzdHlsZS0+YWZmZWN0ZWRC
eUhvdmVyUnVsZXMoKTsgfQorCisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25z
dCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGln
aHRDb2xvcigpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCwg
V2ViQ29yZTo6Rm9udERlc2NyaXB0aW9uJikgY29uc3Qge30KKworICAgIHZpcnR1YWwgaW50IG1p
bmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiAwOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJl
YVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdl
YkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVh
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpOworICAgIAorICAgIGJvb2wgcGFpbnRDb21ibyhSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCAgY29uc3QgSW50UmVjdCYgaXIpOwor
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdExpc3Rib3hTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rvciwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworCitwcml2YXRl
OgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
OworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFy
dCBhcHBlYXJhbmNlKTsKKyAgICAvLyBGSVhNRTogVGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIHVz
ZSBvbmUgUmVuZGVyU2tpblJhZGlvIGZvciBib3RoIHJhZGlvIGFuZCBjaGVja2JveAorICAgIFJl
bmRlclNraW5SYWRpbyogICAgbV9yYWRpbzsKKyAgICBSZW5kZXJTa2luUmFkaW8qICAgIG1fY2hl
Y2tib3g7CisgICAgUmVuZGVyU2tpbkNvbWJvKiAgICBtX2NvbWJvOworfTsKKworfTsKKworI2Vu
ZGlmCisKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2NyZWVuQW5kcm9pZC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2NyZWVuQW5kcm9pZC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDks
IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjZGVmaW5l
IExPR19UQUcgIldlYkNvcmUiCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyZWVu
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI3Vu
ZGVmIExPRyAvLyBGSVhNRTogU3RpbGwgaGF2ZSB0byBkbyB0aGlzIHRvIGdldCB0aGUgbG9nIHRv
IHNob3cgdXAKKyNpbmNsdWRlICJ1dGlscy9Mb2cuaCIKKworI2luY2x1ZGUgInVpL1N1cmZhY2VD
b21wb3NlckNsaWVudC5oIgorI2luY2x1ZGUgInVpL1BpeGVsRm9ybWF0LmgiCisjaW5jbHVkZSAi
dWkvRGlzcGxheUluZm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbnQgc2NyZWVuRGVw
dGgoV2lkZ2V0KiBwYWdlKQoreworICAgIGFuZHJvaWQ6OkRpc3BsYXlJbmZvIGluZm87CisgICAg
YW5kcm9pZDo6U3VyZmFjZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5SW5mbyhhbmRyb2lkOjpE
aXNwbGF5SUQoMCksICZpbmZvKTsKKyAgICByZXR1cm4gaW5mby5waXhlbEZvcm1hdEluZm8uYml0
c1BlclBpeGVsOworfQorCitpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiBwYWdl
KQoreworICAgIGFuZHJvaWQ6OkRpc3BsYXlJbmZvIGluZm87CisgICAgYW5kcm9pZDo6U3VyZmFj
ZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5SW5mbyhhbmRyb2lkOjpEaXNwbGF5SUQoMCksICZp
bmZvKTsKKyAgICByZXR1cm4gaW5mby5waXhlbEZvcm1hdEluZm8uYml0c1BlclBpeGVsOworfQor
Citib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHBhZ2UpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCisjaWZkZWYgQU5EUk9JRF9PUklFTlRBVElPTl9TVVBQT1JUCitpbnQgU2NyZWVu
OjpvcmllbnRhdGlvbigpIGNvbnN0Cit7CisgICAgYW5kcm9pZDo6RGlzcGxheUluZm8gaW5mbzsK
KyAgICBhbmRyb2lkOjpTdXJmYWNlQ29tcG9zZXJDbGllbnQ6OmdldERpc3BsYXlJbmZvKAorICAg
ICAgICAgICAgYW5kcm9pZDo6RGlzcGxheUlEKDApLCAmaW5mbyk7CisgICAgLy8gZ2V0RGlzcGxh
eUluZm8gcmV0dXJucyBhbiBlbnVtIGRlc2NyaWJpbmcgdGhlIG9yaWVudGF0aW9uLiBNYXAgdGhl
IGVudW0KKyAgICAvLyB0byB0aGUgdmFsdWVzIGRlc2NyaWJlZCBoZXJlCisgICAgLy8gKGh0dHA6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vQXBwbGVBcHBsaWNhdGlvbnMvUmVm
ZXJlbmNlL1NhZmFyaVdlYkNvbnRlbnQvSGFuZGxpbmdFdmVudHMvY2hhcHRlcl84X3NlY3Rpb25f
Ni5odG1sKQorICAgIHN3aXRjaCAoaW5mby5vcmllbnRhdGlvbikgeworICAgICAgICBjYXNlIGFu
ZHJvaWQ6OklTdXJmYWNlQ29tcG9zZXI6OmVPcmllbnRhdGlvbkRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBhbmRyb2lkOjpJU3VyZmFjZUNvbXBvc2VyOjplT3Jp
ZW50YXRpb245MDoKKyAgICAgICAgICAgIHJldHVybiA5MDsKKyAgICAgICAgY2FzZSBhbmRyb2lk
OjpJU3VyZmFjZUNvbXBvc2VyOjplT3JpZW50YXRpb24xODA6CisgICAgICAgICAgICByZXR1cm4g
MTgwOworICAgICAgICBjYXNlIGFuZHJvaWQ6OklTdXJmYWNlQ29tcG9zZXI6OmVPcmllbnRhdGlv
bjI3MDoKKyAgICAgICAgICAgIHJldHVybiAtOTA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBMT0dFKCJCYWQgb3JpZW50YXRpb24gcmV0dXJuZWQgZnJvbSBnZXREaXNwbGF5SW5kbyAl
ZCIsCisgICAgICAgICAgICAgICAgICAgIGluZm8ub3JpZW50YXRpb24pOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorI2VuZGlmCisKKy8vIFRoZSBvbmx5IHBsYWNlIEkgaGF2ZSBz
ZWVuIHRoZXNlIHZhbHVlcyB1c2VkIGlzCisvLyBwb3NpdGlvbmluZyBwb3B1cCB3aW5kb3dzLiBJ
ZiB3ZSBzdXBwb3J0IG11bHRpcGxlIHdpbmRvd3MKKy8vIHRoZXkgd2lsbCBiZSBtb3N0IGxpa2Vs
eSBmdWxsIHNjcmVlbi4gVGhlcmVmb3JlLAorLy8gdGhlIGFjY3VyYWN5IG9mIHRoZXNlIG51bWJl
ciBhcmUgbm90IHRvbyBpbXBvcnRhbnQuCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHBh
Z2UpCit7CisgICAgYW5kcm9pZDo6RGlzcGxheUluZm8gaW5mbzsKKyAgICBhbmRyb2lkOjpTdXJm
YWNlQ29tcG9zZXJDbGllbnQ6OmdldERpc3BsYXlJbmZvKGFuZHJvaWQ6OkRpc3BsYXlJRCgwKSwg
JmluZm8pOworICAgIHJldHVybiBGbG9hdFJlY3QoMC4wLCAwLjAsIGluZm8udywgaW5mby5oKTsK
K30KKworLyogCitTY2FsZSBmdW5jdGlvbnMgZG9uJ3Qgc2VlbSB0byBiZSBuZWVkZWQuIFRoZXJl
IGlzIG5vIGNvZGUgdGhhdAorY2FsbCB0aGVtLCBhbmQgdGhleSBzZWVtIHRvIG9ubHkgZXhpc3Qg
aW4gcG9ydHMgYW5kIG5vdCBpbiB0aGUgY29yZQorV2ViS2l0IGNvZGUgLSBkYXZpZGMKK0Zsb2F0
UmVjdCB1c2FibGVTY3JlZW5SZWN0KFdpZGdldCogcGFnZSkKK3sKKyAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7OworfQorCitGbG9hdFJlY3Qgc2NhbGVTY3JlZW5SZWN0VG9QYWdlQ29vcmRpbmF0ZXMo
Y29uc3QgRmxvYXRSZWN0JiwgV2lkZ2V0KikKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Owor
fQorCitGbG9hdFJlY3Qgc2NhbGVQYWdlUmVjdFRvU2NyZWVuQ29vcmRpbmF0ZXMoY29uc3QgRmxv
YXRSZWN0JiwgV2lkZ2V0KikKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7OworfQorCitmbG9h
dCBzY2FsZUZhY3RvcihXaWRnZXQqKQoreworICAgIHJldHVybiAxLjBmOworfQorKi8KKworLy8g
U2ltaWxhciBzY3JlZW5SZWN0LCB0aGlzIGZ1bmN0aW9uIGlzIGNvbW1vbmx5IHVzZWQgYnkgamF2
YXNjcmlwdHMKKy8vIHRvIHBvc2l0aW9uIGFuZCByZXNpemUgd2luZG93cyAodXN1YWxseSB0byBm
dWxsIHNjcmVlbikuIAorRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KikKK3sK
KyAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOworICAgIGFuZHJvaWQ6OlN1cmZhY2VDb21w
b3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDApLCAmaW5mbyk7
CisgICAgcmV0dXJuIEZsb2F0UmVjdCgwLjAsIDAuMCwgaW5mby53LCBpbmZvLmgpOworfQorCit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmlld0FuZHJvaWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JvbGxWaWV3QW5kcm9pZC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmlld0Fu
ZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjZGVmaW5lIExP
R19UQUcgIldlYkNvcmUiCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxW
aWV3LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
RnJhbWVCcmlkZ2UuaCIKKyNpbmNsdWRlICJXZWJDb3JlVmlld0JyaWRnZS5oIgorI2luY2x1ZGUg
IldlYlZpZXdDb3JlLmgiCisKKy8qCisgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlvbiBkb2Vz
IE5PVCBhY3R1YWxseSBlbXVsYXRlIHRoZSBRdCBTY3JvbGxWaWV3LgorICAgIEl0IGRvZXMgcHJv
dmlkZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGtodG1sIHdpbGwgdXNlIHRvIGludGVyYWN0IHdp
dGgKKyAgICBXZWJLaXQncyBXZWJGcmFtZVZpZXcgZG9jdW1lbnRWaWV3IGFuZCBvdXIgTlNTY3Jv
bGxWaWV3IHN1YmNsYXNzLgorCisgICAgU2Nyb2xsVmlldydzIHZpZXcgaXMgYSBOU1Njcm9sbFZp
ZXcgKG9yIHN1YmNsYXNzIG9mIE5TU2Nyb2xsVmlldykKKyAgICBpbiBtb3N0IGNhc2VzLiBUaGF0
IHNjcm9sbHZpZXcgaXMgYSBzdWJ2aWV3IG9mIGFuCisgICAgV2ViQ29yZUZyYW1lVmlldy4gVGhl
IFdlYkNvcmVGcmFtZVZpZXcncyBkb2N1bWVudFZpZXcgd2lsbCBhbHNvIGJlCisgICAgdGhlIHNj
cm9sbCB2aWV3J3MgZG9jdW1lbnRWaWV3LgorICAgIAorICAgIFRoZSBXZWJDb3JlRnJhbWVWaWV3
J3Mgc2l6ZSBpcyB0aGUgZnJhbWUgc2l6ZS4gIFRoZSBXZWJDb3JlRnJhbWVWaWV3J3MgZG9jdW1l
bnRWaWV3CisgICAgY29ycmVzcG9uZHMgdG8gdGhlIGZyYW1lIGNvbnRlbnQgc2l6ZS4gIFRoZSBz
Y3JvbGx2aWV3IGl0c2VsZiBpcyBhdXRvc2l6ZWQgdG8gdGhlCisgICAgV2ViQ29yZUZyYW1lVmll
dydzIHNpemUgKHNlZSBXaWRnZXQ6OnJlc2l6ZSkuCisqLworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFJlY3QoYm9vbCBp
bmNsdWRlU2Nyb2xsYmFycykgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBwbGF0Zm9ybVdp
ZGdldCgpLT5nZXRCb3VuZHMoKTsKKyAgICAvLyBUaGlzIG1ha2VzIHN1YmZyYW1lcyBkcmF3IGNv
cnJlY3RseSwgc2luY2Ugc3ViZnJhbWVzIGNhbm5vdCBzY3JvbGwuCisgICAgaWYgKHBhcmVudCgp
KQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRTaXplIFNjcm9sbFZpZXc6OnBsYXRmb3Jt
Q29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50c1NpemU7Cit9CisK
K3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcHQpCit7CisgICAgaWYgKHBhcmVudCgpKSAvLyBkb24ndCBhdHRlbXB0IHRv
IHNjcm9sbCBzdWJmcmFtZXM7IHRoZXkncmUgZnVsbHkgdmlzaWJsZQorICAgICAgICByZXR1cm47
CisgICAgYW5kcm9pZDo6V2ViVmlld0NvcmU6OmdldFdlYlZpZXdDb3JlKHRoaXMpLT5zY3JvbGxU
byhwdC54KCksIHB0LnkoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGxi
YXJNb2RlcyhTY3JvbGxiYXJNb2RlJiBoLCBTY3JvbGxiYXJNb2RlJiB2KSBjb25zdAoreworICAg
IGggPSB2ID0gU2Nyb2xsYmFyQWx3YXlzT2ZmOworfQorCitib29sIFNjcm9sbFZpZXc6OnBsYXRm
b3JtUHJvaGliaXRzU2Nyb2xsaW5nKCkKK3sKKyAgICBpZiAoIWlzRnJhbWVWaWV3KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPih0aGlzKTsKKyAgICAvLyBXZSB3YW50IHRvIGlnbm9yZSByZXF1ZXN0cyB0byBzY3Jv
bGwgdGhhdCB3ZXJlIG5vdCBpbml0aWF0ZWQgYnkgdGhlIHVzZXIuICBBbgorICAgIC8vIGV4YW1w
bGUgb2YgdGhpcyBpcyB3aGVuIHRleHQgaXMgaW5zZXJ0ZWQgaW50byBhIHRleHRmaWVsZC9hcmVh
LCB3aGljaCByZXN1bHRzIGluCisgICAgLy8gYSBzY3JvbGwuICBXZSBpZ25vcmUgdGhpcyBiZWNh
dXNlIHdlIG5vdyBob3cgdG8gZG8gdGhpcyBvdXJzZWx2ZXMgaW4gdGhlIFVJIHRocmVhZC4KKyAg
ICAvLyBBbiBleGFtcGxlIG9mIGl0IGJlaW5nIGluaXRpYXRlZCBieSB0aGUgdXNlciBpcyBpZiB0
aGUgdXNlciBjbGlja3MgYW4gYW5jaG9yCisgICAgLy8gZWxlbWVudCB3aGljaCBzaW1wbHkgc2Ny
b2xscyB0aGUgcGFnZS4KKyAgICByZXR1cm4gIWFuZHJvaWQ6OldlYkZyYW1lOjpnZXRXZWJGcmFt
ZSh2aWV3LT5mcmFtZSgpKS0+dXNlckluaXRpYXRlZENsaWNrKCk7Cit9CisKK3ZvaWQgU2Nyb2xs
Vmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0ICZyZWN0
LCBib29sIG5vdykKK3sKKyAgICBhbmRyb2lkOjpXZWJWaWV3Q29yZTo6Z2V0V2ViVmlld0NvcmUo
dGhpcyktPmNvbnRlbnRJbnZhbGlkYXRlKHJlY3QpOworfQorCisjaWZkZWYgQU5EUk9JRF9DQVBU
VVJFX09GRlNDUkVFTl9QQUlOVFMKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1PZmZzY3JlZW5D
b250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgYW5kcm9pZDo6V2Vi
Vmlld0NvcmU6OmdldFdlYlZpZXdDb3JlKHRoaXMpLT5vZmZJbnZhbGlkYXRlKHJlY3QpOworfQor
I2VuZGlmCisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TZWFyY2hQb3B1cE1l
bnVBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Vh
cmNoUG9wdXBNZW51QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvU2VhcmNoUG9wdXBNZW51QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2Ug
UHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNlYXJjaFBvcHVwTWVudUFuZHJvaWRfaAorI2RlZmlu
ZSBTZWFyY2hQb3B1cE1lbnVBbmRyb2lkX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNhdmUg
dGhlIHBhc3Qgc2VhcmNoZXMgc3RvcmVkIGluICdzZWFyY2hJdGVtcycgdG8gYSBkYXRhYmFzZSBh
c3NvY2lhdGVkIHdpdGggJ25hbWUnCit2b2lkIFNlYXJjaFBvcHVwTWVudTo6c2F2ZVJlY2VudFNl
YXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNl
YXJjaEl0ZW1zKSAKK3sgCisgICAgCisgICAgLy9BU1NFUlQoMCk7IC8vbm90SW1wbGVtZW50ZWQo
KTsgCisKK30KKworLy8gTG9hZCBwYXN0IHNlYXJjaGVzIGFzc29jaWF0ZWQgd2l0aCAnbmFtZScg
ZnJvbSB0aGUgZGF0YWJhc2UgdG8gJ3NlYXJjaEl0ZW1zJwordm9pZCBTZWFyY2hQb3B1cE1lbnU6
OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJp
bmc+JiBzZWFyY2hJdGVtcykgCit7IAorCisgICAgLy9BU1NFUlQoMCk7IC8vbm90SW1wbGVtZW50
ZWQoKTsgCisKK30KKworLy8gQ3JlYXRlIGEgc2VhcmNoIHBvcHVwIG1lbnUgLSBub3Qgc3VyZSB3
aGF0IGVsc2Ugd2UgaGF2ZSB0byBkbyBoZXJlCitTZWFyY2hQb3B1cE1lbnU6OlNlYXJjaFBvcHVw
TWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkgOiBQb3B1cE1lbnUoY2xpZW50KSAKK3sgCisg
ICAgCisgICAgLy9BU1NFUlQoMCk7IC8vbm90SW1wbGVtZW50ZWQoKTsgCisgICAgCit9CisgICAg
ICAgIAorLy8gZnVuY3Rpb25zIG5ldyB0byBKdW4tMDcgdGlwIG9mIHRyZWUgbWVyZ2U6Citib29s
IFNlYXJjaFBvcHVwTWVudTo6ZW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CisKK30gICAvLyBX
ZWJDb3JlCisKKyNlbmRpZgorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2hhcmVk
VGltZXJBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
U2hhcmVkVGltZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9TaGFyZWRUaW1lckFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNkZWZpbmUgTE9HX1RBRyAiVGltZXJzIgorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2hhcmVkVGltZXIuaCIKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5j
bHVkZSAiSmF2YVNoYXJlZENsaWVudC5oIgorI2luY2x1ZGUgIlRpbWVyQ2xpZW50LmgiCisjaW5j
bHVkZSA8dXRpbHMvTG9nLmg+CisKK3VzaW5nIGFuZHJvaWQ6OkphdmFTaGFyZWRDbGllbnQ7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIFNpbmdsZSB0aW1lciwgc2hhcmVkIHRvIGlt
cGxlbWVudCBhbGwgdGhlIHRpbWVycyBtYW5hZ2VkIGJ5IHRoZSBUaW1lciBjbGFzcy4KKyAgICAv
LyBOb3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseTsgdXNlIHRoZSBUaW1lciBjbGFzcyBp
bnN0ZWFkLgorCisgICAgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYp
KCkpCisgICAgeworICAgICAgICBpZiAoSmF2YVNoYXJlZENsaWVudDo6R2V0VGltZXJDbGllbnQo
KSkKKyAgICAgICAgICAgIEphdmFTaGFyZWRDbGllbnQ6OkdldFRpbWVyQ2xpZW50KCktPnNldFNo
YXJlZFRpbWVyQ2FsbGJhY2soZik7CisgICAgfQorCisgICAgLy8gVGhlIGZpcmUgdGltZSBpcyBy
ZWxhdGl2ZSB0byB0aGUgY2xhc3NpYyBQT1NJWCBlcG9jaCBvZiBKYW51YXJ5IDEsIDE5NzAsCisg
ICAgLy8gYXMgdGhlIHJlc3VsdCBvZiBjdXJyZW50VGltZSgpIGlzLgorCisgICAgdm9pZCBzZXRT
aGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKKyAgICB7CisgICAgICAgIGxvbmcg
bG9uZyB0aW1lSW5NUyA9IChsb25nIGxvbmcpKChmaXJlVGltZSAtIGN1cnJlbnRUaW1lKCkpICog
MTAwMCk7CisgICAgCisgICAgICAgIExPR1YoInNldFNoYXJlZFRpbWVyRmlyZVRpbWU6IGluICVs
ZCBtaWxsaXNlYyIsIHRpbWVJbk1TKTsKKyAgICAgICAgaWYgKEphdmFTaGFyZWRDbGllbnQ6Okdl
dFRpbWVyQ2xpZW50KCkpCisgICAgICAgICAgICBKYXZhU2hhcmVkQ2xpZW50OjpHZXRUaW1lckNs
aWVudCgpLT5zZXRTaGFyZWRUaW1lcih0aW1lSW5NUyk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c3RvcFNoYXJlZFRpbWVyKCkKKyAgICB7CisgICAgICAgIGlmIChKYXZhU2hhcmVkQ2xpZW50OjpH
ZXRUaW1lckNsaWVudCgpKQorICAgICAgICAgICAgSmF2YVNoYXJlZENsaWVudDo6R2V0VGltZXJD
bGllbnQoKS0+c3RvcFNoYXJlZFRpbWVyKCk7CisgICAgfQorCit9CisKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9TeXN0ZW1UaW1lQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL1N5c3RlbVRpbWVBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TeXN0ZW1UaW1lQW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU3lzdGVtVGltZS5oIgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworZG91YmxlIGN1cnJlbnRUaW1lKCkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCB0
djsKKworICAgIGdldHRpbWVvZmRheSgmdHYsIChzdHJ1Y3QgdGltZXpvbmUgKikgTlVMTCk7Cisg
ICAgZG91YmxlIG5vdyA9IHR2LnR2X3NlYyArICh0di50dl91c2VjIC8gMTAwMDAwMC4wKTsKKyAg
ICAKKyAgICByZXR1cm4gbm93OworfQorCit1aW50MzJfdCBnZXRfdGhyZWFkX21zZWMoKQorewor
I2lmIGRlZmluZWQoSEFWRV9QT1NJWF9DTE9DS1MpCisgICAgc3RydWN0IHRpbWVzcGVjIHRtOwor
CisgICAgY2xvY2tfZ2V0dGltZShDTE9DS19USFJFQURfQ1BVVElNRV9JRCwgJnRtKTsKKyAgICAK
KyAgICByZXR1cm4gdG0udHZfc2VjICogMTAwMExMICsgdG0udHZfbnNlYyAvIDEwMDAwMDA7Cisj
ZWxzZQorICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIAorICAgIGdldHRpbWVvZmRheSgmdHYs
IE5VTEwpOworICAgIHJldHVybiB0di50dl9zZWMgKiAxMDAwTEwgKyB0di50dl91c2VjIC8gMTAw
MDsKKyNlbmRpZgorfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4
MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9q
ZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjZGVmaW5lIExPR19UQUcgIldlYkNvcmUiCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2RlZmluZSBBTkRST0lEX0NPTVBJTEVfSEFDSworCisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVk
ZSAiQ2FjaGVkUGFnZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAi
Q29va2llSmFyLmgiCisjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51
LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgi
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCisvLyNpbmNsdWRlICJEZWJ1Z2dlckNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUg
IkVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRmlsZS5oIgor
I2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEtleWdl
bkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIaXN0b3J5LmgiCisjaW5jbHVkZSAiSWNvbi5oIgorI2lu
Y2x1ZGUgIkljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKKyNpbmNsdWRl
ICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRl
ICJKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJBUEkvSlNDbGFzc1JlZi5oIgor
I2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0UHJv
ZmlsZS5oIgorI2luY2x1ZGUgImpuaV91dGlsaXR5LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJk
LmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiU2NyZWVuLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTbWFy
dFJlcGxhY2UuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGZyYW1lIHZpZXcgaGFz
IGNoYW5nZWQgdGhlIHN0YXRlIG9mIGl0J3MgYm9yZGVyLiAKKy8vIGlGcmFtZXMsIHdoaWNoIGFy
ZSBoYXZlIGEgRnJhbWVWaWV3LCBhcmUgZHJhd24gd2l0aCBhIDFweCBsZWZ0L3JpZ2h0IGJvcmRl
ciBhbmQgMnB4IHRvcC9ib3R0b20gYm9yZGVyCisvLyBDaGVjayBmdW5jdGlvbiBfc2hvdWxkRHJh
d0JvcmRlciBpbiBXZWJGcmFtZVZpZXcubW0KKy8vIFdlIGRvbid0IGRyYXcgYm9yZGVycyB1bmxl
c3MgY3NzIGRyYXdzIHRoZW0uCisvLyB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQm9yZGVyKCkgeyB2
ZXJpZmllZE9rKCk7IH0KKworLy9pbnQgV2ViQ29yZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQo
V2lkZ2V0KikgeyBBU1NFUlQoMCk7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CisvL2Jv
b2wgV2ViQ29yZTo6c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopIHsgQVNTRVJUKDApOyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KKworLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29tcGxldGVseSBlbXB0eSBz
dHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAqLworLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBUaGlzIGZ1bmN0
aW9uIGlzIHVzZWQgYnkgSmF2YXNjcmlwdCB0byBmaW5kIG91dCB3aGF0IHRoZSBkZWZhdWx0IGxh
bmd1YWdlCisvLyB0aGUgdXNlciBoYXMgc2VsZWN0ZWQuIEl0IGlzIHVzZWQgYnkgdGhlIEpTIG9i
amVjdCBOYXZpZ2F0b3IubGFuZ3VhZ2UKKy8vIEkgZ3Vlc3MgdGhpcyBpbmZvcm1hdGlvbiBzaG91
bGQgYmUgbWFwcGVkIHdpdGggdGhlIEFjY2VwdC1MYW5ndWFnZTogSFRUUCBoZWFkZXIuCitTdHJp
bmcgV2ViQ29yZTo6ZGVmYXVsdExhbmd1YWdlKCkgeyB2ZXJpZmllZE9rKCk7IHJldHVybiAiZW4i
OyB9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFkZWZpbmVkKEFORFJPSURfUExVR0lO
UykKKy8vIElmIHBsdWdpbnMgc3VwcG9ydCBpcyB0dXJuZWQgb24sIGRvbid0IHVzZSB0aGVzZSBz
dHVicy4KKworLy8gRXhjZXB0IGZvciBzdXBwb3J0c01JTUVUeXBlKCksIHRoZXNlIFBsdWdpbiBm
dW5jdGlvbnMgYXJlIHVzZWQgYnkgamF2YXNjcmlwdCdzIAorLy8gbmF2aWdhdG9yLnBsdWdpbnNb
XSBvYmplY3QgdG8gcHJvdmlkZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcGx1Z2lucy4gVGhpcyBp
cyBtb3N0IAorLy8gb2Z0ZW4gdXNlZCB3aXRoIHRvIGNoZWNrIHRvIHNlZSBpZiB0aGUgYnJvd3Nl
ciBzdXBwb3J0cyBGbGFzaCBvciB3aGljaCB2aWRlbworLy8gY29kZWMgdG8gdXNlLgorLy8gVGhl
IHN1cHBvcnRzTUlNRVR5cGUoKSBpcyB1c2VkIGJ5IHRoZSBGcmFtZSB0byBkZXRlcm1pbmUgaWYg
YSBmdWxsIHNjcmVlbiBpbnN0YW5jZQorLy8gb2YgYSBwbHVnaW4gY2FuIGJlIHVzZWQgdG8gcmVu
ZGVyIGEgbWltZXR5cGUgdGhhdCBpcyBub3QgbmF0aXZlIHRvIHRoZSBicm93c2VyLgorUGx1Z2lu
SW5mbyogUGx1Z2luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1
bnNpZ25lZCkgeyBBU1NFUlQoMCk7IHJldHVybiAwO30KK3Vuc2lnbmVkIFBsdWdpbkluZm9TdG9y
ZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IHZlcmlmaWVkT2soKTsgcmV0dXJuIDA7IH0KKy8vIEZJ
WE1FLCByZXR1cm4gZmFsc2UgZm9yIG5vdy4KK1N0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdp
bk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmICkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gU3RyaW5nKCk7IH0KK2Jvb2wgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNv
bnN0IFN0cmluZyYgKSB7IHZlcmlmaWVkT2soKTsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIHJlZnJl
c2hQbHVnaW5zKGJvb2wpIHsgdmVyaWZpZWRPaygpOyB9CisjZW5kaWYgLy8gIWRlZmluZWQoQU5E
Uk9JRF9QTFVHSU5TKQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlbGxzIHRoZSBicmlkZ2UgdGhhdCBh
IHJlc291cmNlIHdhcyBsb2FkZWQgZnJvbSB0aGUgY2FjaGUgYW5kIHRodXMKKy8vIHRoZSBhcHAg
bWF5IHVwZGF0ZSBwcm9ncmVzcyB3aXRoIHRoZSBhbW91bnQgb2YgZGF0YSBsb2FkZWQuCit2b2lk
IENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqKSB7IEFT
U0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTt9CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCBpbiBj
b25qdW5jdGlvbiB3aXRoIHRoZSBGaWxlIFVwbG9hZCBmb3JtIGVsZW1lbnQsIGFuZAorLy8gdGhl
cmVmb3JlIHJlbGF0ZXMgdG8gdGhlIGFib3ZlLiBXaGVuIGEgZmlsZSBoYXMgYmVlbiBzZWxlY3Rl
ZCwgYW4gaWNvbgorLy8gcmVwcmVzZW50aW5nIHRoZSBmaWxlIHR5cGUgY2FuIGJlIHJlbmRlcmVk
IG5leHQgdG8gdGhlIGZpbGVuYW1lIG9uIHRoZQorLy8gd2ViIHBhZ2UuIFRoZSBpY29uIGZvciB0
aGUgZmlsZSBpcyBlbmNhcHN1bGF0ZWQgd2l0aGluIHRoaXMgY2xhc3MuCisvL0ljb246Okljb24o
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK0ljb246On5JY29uKCkgeyB9Cit2b2lkIEljb246OnBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSB7IH0KKworLy8gKioqIFRoZSBm
b2xsb3dpbmcgc3RyaW5ncyBzaG91bGQgYmUgbG9jYWxpemVkICoqKiAvLworCisvLyBUaGUgZm9s
bG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBmZXRjaCBsb2NhbGl6ZWQgdGV4dCBmb3IgSFRN
TCBmb3JtCisvLyBlbGVtZW50cyBzdWJtaXQgYW5kIHJlc2V0LiBUaGVzZSBzdHJpbmdzIGFyZSB1
c2VkIHdoZW4gdGhlIHBhZ2UgYXV0aG9yCisvLyBoYXMgbm90IHNwZWNpZmllZCBhbnkgdGV4dCBm
b3IgdGhlc2UgYnV0dG9ucy4KK1N0cmluZyBzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwoKSB7IHZl
cmlmaWVkT2soKTsgcmV0dXJuICJTdWJtaXQiOyB9CitTdHJpbmcgcmVzZXRCdXR0b25EZWZhdWx0
TGFiZWwoKSB7IHZlcmlmaWVkT2soKTsgcmV0dXJuICJSZXNldCI7IH0KKworLy8gVGhlIGFsdCB0
ZXh0IGZvciBhbiBpbnB1dCBlbGVtZW50IGlzIG5vdCB1c2VkIHZpc3VhbGx5LCBidXQgcmF0aGVy
IGlzCisvLyB1c2VkIGZvciBhY2Nlc3NhYmlsaXR5IC0gZWcgcmVhZGluZyB0aGUgd2ViIHBhZ2Uu
IFNlZSAKKy8vIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdFRleHQoKSBmb3IgbW9yZSBpbmZvcm1hdGlv
bi4KK1N0cmluZyBpbnB1dEVsZW1lbnRBbHRUZXh0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gU3RyaW5nKCk7IH0KKworLy8gVGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgYXBwZWFycyBiZWZv
cmUgYW4gaW5wdXQgYm94IHdoZW4gdGhlIEhUTUwgZWxlbWVudAorLy8gPElTSU5ERVg+IGlzIHVz
ZWQuIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgdXNlZCBpZiBubyBQUk9NUFQgYXR0cmlidXRlIGlz
IAorLy8gcHJvdmlkZWQuCisvLyBub3RlOiBTYWZhcmkgYW5kIEZpcmVGb3ggdXNlICh0b28gbG9u
ZyBmb3IgdXMgaW1obykgIlRoaXMgaXMgYSBzZWFyY2hhYmxlIGluZGV4LiBFbnRlciBzZWFyY2gg
a2V5d29yZHM6IgorU3RyaW5nIHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpIHsgdmVyaWZp
ZWRPaygpOyByZXR1cm4gU3RyaW5nKCJFbnRlciBzZWFyY2g6Iik7IH0KKworfQorCisvLyBUaGlz
IGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgQ1NTIHByb3BlcnR5
OgorLy8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yCisvLyBJdCBpcyBhbHNvIHJlbGF0ZWQgdG8g
dGhlIENTUyBwcm9wZXJ0eSBvdXRsaW5lLWNvbG9yOgorQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5n
Q29sb3IoKSB7IHZlcmlmaWVkT2soKTsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KKworLy8gTG9jYWxp
emVkU3RyaW5ncworU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5O
ZXdXaW5kb3coKSB7IEFTU0VSVCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29y
ZTo6Y29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrKCkgeyBBU1NFUlQoMCk7IHJl
dHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NvcHlM
aW5rVG9DbGlwYm9hcmQoKSB7IEFTU0VSVCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcg
V2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKSB7IEFTU0VS
VCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRJbWFnZVRvRGlzaygpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0K
K1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCgp
IHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0
TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpIHsgQVNTRVJUKDApOyByZXR1cm4gU3Ry
aW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkgeyBBU1NF
UlQoMCk7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ0dvQmFjaygpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJD
b3JlOjpjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKSB7IEFTU0VSVCgwKTsgcmV0dXJuIFN0
cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU3RvcCgpIHsgQVNT
RVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdSZWxvYWQoKSB7IEFTU0VSVCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQ3V0KCkgeyBBU1NFUlQoMCk7IHJldHVybiBTdHJpbmco
KTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkgeyBBU1NFUlQo
MCk7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRh
Z05vR3Vlc3Nlc0ZvdW5kKCkgeyBBU1NFUlQoMCk7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5n
IFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkgeyBBU1NFUlQoMCk7
IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xl
YXJuU3BlbGxpbmcoKSB7IEFTU0VSVCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkgeyBBU1NFUlQoMCk7IHJldHVybiBT
dHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGlj
dGlvbmFyeSgpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3Jl
Ojpjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluaygpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5n
KCk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkg
eyBBU1NFUlQoMCk7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRN
ZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0K
K1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChib29s
IHNob3cpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkgeyBBU1NFUlQoMCk7IHJldHVybiBTdHJp
bmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdX
aGlsZVR5cGluZygpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJD
b3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKSB7IEFTU0VS
VCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnRm9udE1lbnUoKSB7IEFTU0VSVCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnQm9sZCgpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5n
KCk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKSB7IEFTU0VS
VCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnVW5kZXJsaW5lKCkgeyBBU1NFUlQoMCk7IHJldHVybiBTdHJpbmcoKTsgfQorU3RyaW5nIFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSB7IEFTU0VSVCgwKTsgcmV0dXJuIFN0
cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVj
dGlvbk1lbnUoKSB7IEFTU0VSVCgwKTsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29y
ZTo6Y29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbigpIHsgQVNTRVJUKDApOyByZXR1
cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9S
aWdodCgpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdCgpIHsgQVNTRVJUKDApOyByZXR1cm4gU3RyaW5n
KCk7IH0KKworLy8gRklYTUUsIG5vIHN1cHBvcnQgZm9yIHNwZWxsaW5nIHlldC4KK1Bhc3RlYm9h
cmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCkgeyByZXR1cm4gbmV3IFBhc3RlYm9h
cmQoKTsgfQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSosIGJvb2wgY2Fu
U21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFBh
c3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQorYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UoKSB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQ
YXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiwgUGFzc1JlZlB0cjxSYW5nZT4sIGJv
b2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KSB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiAwOyB9CitTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFt
ZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KK1Bhc3RlYm9hcmQ6OlBh
c3RlYm9hcmQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1Bhc3RlYm9hcmQ6On5QYXN0ZWJvYXJk
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25z
dCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkgeyBBU1NF
UlQoMCk7IG5vdEltcGxlbWVudGVkKCk7IH0KK0NvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKSB7
IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBDb250ZXh0TWVudTo6YXBwZW5k
SXRlbShDb250ZXh0TWVudUl0ZW0mKSB7IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTsgfQor
dm9pZCBDb250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtZW51KSB7IEFTU0VSVCgwKTsgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsg
fQorUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRp
b24oKSBjb25zdCAgeyBBU1NFUlQoMCk7IHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247IH0K
KworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oUGxhdGZvcm1NZW51SXRlbURlc2Ny
aXB0aW9uKSB7IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTsgfQorQ29udGV4dE1lbnVJdGVt
OjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnUqKSB7IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50
ZWQoKTsgfQorQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnVJdGVt
VHlwZSB0eXBlLCBDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGl0bGUs
IENvbnRleHRNZW51KiBzdWJNZW51KSB7IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTsgfQor
Q29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVtKCkgeyBBU1NFUlQoMCk7IG5vdEltcGxl
bWVudGVkKCk7IH0KK1BsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06
OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkgeyBBU1NFUlQoMCk7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247IH0KK0NvbnRleHRNZW51SXRlbVR5cGUg
Q29udGV4dE1lbnVJdGVtOjp0eXBlKCkgY29uc3QgeyBBU1NFUlQoMCk7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiBBY3Rpb25UeXBlOyB9Cit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VHlwZShD
b250ZXh0TWVudUl0ZW1UeXBlKSB7IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTsgfQorQ29u
dGV4dE1lbnVBY3Rpb24gQ29udGV4dE1lbnVJdGVtOjphY3Rpb24oKSBjb25zdCB7IEFTU0VSVCgw
KTsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOyB9
Cit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRNZW51QWN0aW9uKSB7IEFT
U0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTsgfQorU3RyaW5nIENvbnRleHRNZW51SXRlbTo6dGl0
bGUoKSBjb25zdCB7IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygp
OyB9Cit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJikgeyBBU1NF
UlQoMCk7IG5vdEltcGxlbWVudGVkKCk7IH0KK1BsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRl
eHRNZW51SXRlbTo6cGxhdGZvcm1TdWJNZW51KCkgY29uc3QgeyBBU1NFUlQoMCk7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiAwOyB9Cit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShD
b250ZXh0TWVudSopIHsgQVNTRVJUKDApOyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIENvbnRl
eHRNZW51SXRlbTo6c2V0Q2hlY2tlZChib29sKSB7IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50ZWQo
KTsgfQordm9pZCBDb250ZXh0TWVudUl0ZW06OnNldEVuYWJsZWQoYm9vbCkgeyBBU1NFUlQoMCk7
IG5vdEltcGxlbWVudGVkKCk7IH0KKworbmFtZXNwYWNlIFdlYkNvcmUgeworZmxvYXQgdXNlcklk
bGVUaW1lKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorLy8gc3lzdGVtQmVlcCgp
IGlzIGNhbGxlZCBieSB0aGUgRWRpdG9yIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgd2FzIG5vdGhp
bmcgdG8gY29weSwgYW5kIG1heSBiZSBjYWxsZWQgZnJvbSAKKy8vIG90aGVyIHBsYWNlcyB0b28u
Cit2b2lkIHN5c3RlbUJlZXAoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK30KKworLy8gZnVuY3Rp
b25zIG5ldyB0byBKdW4tMDcgdGlwIG9mIHRyZWUgbWVyZ2U6CisKKy8vIHZvaWQgV2ViQ29yZTo6
Q2FjaGVkUGFnZTo6Y2xvc2UoKSB7fQorCisvL3ZvaWQgV2ViQ29yZTo6RnJhbWU6OnByaW50KCkg
e30KKy8vIHZvaWQgV2ViQ29yZTo6RnJhbWU6Omlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpIHt9Cisv
L3ZvaWQgV2ViQ29yZTo6RnJhbWU6OmNsZWFudXBQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKSB7fQor
Ly8gdm9pZCBXZWJDb3JlOjpGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKSB7fQorLy9i
b29sIFdlYkNvcmU6OkZyYW1lOjppc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdCh1bnNpZ25l
ZCBzaG9ydCwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KK3ZvaWQqIFdlYkNvcmU6OkZyYW1lOjpk
cmFnSW1hZ2VGb3JTZWxlY3Rpb24oKSB7IHJldHVybiBOVUxMOyB9CisKK1dlYkNvcmU6OlN0cmlu
ZyBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihXZWJD
b3JlOjpTdHJpbmcgY29uc3QmKSB7CisgICAgcmV0dXJuIFdlYkNvcmU6OlN0cmluZygpOworfQor
Cit2b2lkIFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoV2ViQ29yZTo6Tm9kZSosIFdl
YkNvcmU6OktVUkwgY29uc3QmLCBXZWJDb3JlOjpTdHJpbmcgY29uc3QmKSB7fQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitJbnRTaXplIGRyYWdJbWFnZVNpemUodm9pZCopIHsgcmV0dXJuIEludFNp
emUoMCwgMCk7IH0KK3ZvaWQgZGVsZXRlRHJhZ0ltYWdlKHZvaWQqKSB7fQordm9pZCogY3JlYXRl
RHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKikgeyByZXR1cm4gTlVMTDsgfQordm9pZCogZGlzc29s
dmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKHZvaWQqLCBmbG9hdCkgeyByZXR1cm4gTlVMTDsgfQordm9p
ZCogY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikgeyByZXR1
cm4gTlVMTDsgfQorQ3Vyc29yIGR1bW15Q3Vyc29yOworY29uc3QgQ3Vyc29yJiB6b29tSW5DdXJz
b3IoKSB7IHJldHVybiBkdW1teUN1cnNvcjsgfQorY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vyc29y
KCkgeyByZXR1cm4gZHVtbXlDdXJzb3I7IH0KK2NvbnN0IEN1cnNvciYgbm90QWxsb3dlZEN1cnNv
cigpIHsgcmV0dXJuIGR1bW15Q3Vyc29yOyB9Cit2b2lkKiBzY2FsZURyYWdJbWFnZSh2b2lkKiwg
RmxvYXRTaXplKSB7IHJldHVybiBOVUxMOyB9CitTdHJpbmcgc2VhcmNoTWVudVJlY2VudFNlYXJj
aGVzVGV4dCgpIHsgcmV0dXJuIFN0cmluZygpOyB9CitTdHJpbmcgc2VhcmNoTWVudU5vUmVjZW50
U2VhcmNoZXNUZXh0KCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBzZWFyY2hNZW51Q2xl
YXJSZWNlbnRTZWFyY2hlc1RleHQoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorVmVjdG9yPFN0cmlu
Zz4gc3VwcG9ydGVkS2V5U2l6ZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8
U3RyaW5nPigpOyB9CitTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVu
c2lnbmVkIGludCwgU3RyaW5nIGNvbnN0JiwgV2ViQ29yZTo6S1VSTCBjb25zdCYpIHsgcmV0dXJu
IFN0cmluZygpOyB9CisKK30KKworLy8gYWRkZWQgZm9yIE5vdi0xNi0wNyBUb1QgaW50ZWdyYXRp
b24KKy8vbmFtZXNwYWNlIFdlYkNvcmUgeworLy92b2lkIEZyYW1lOjpjbGVhclBsYXRmb3JtU2Ny
aXB0T2JqZWN0cygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorLy99CisKKy8vIGZ1bmN0aW9ucyBu
ZXcgdG8gRmViLTE5IHRpcCBvZiB0cmVlIG1lcmdlOgorbmFtZXNwYWNlIFdlYkNvcmUgeworLy8g
aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQgaXMgZGVmaW5lZCBpbiBTbWFydFJlcGxhY2VJ
Q1UuY3BwOyBpbiB0aGVvcnksIHdlIGNvdWxkIHVzZSB0aGF0IG9uZQorLy8gICAgICBidXQgd2Ug
ZG9uJ3Qgc3VwcG9ydCBhbGwgb2YgdGhlIHJlcXVpcmVkIGljdSBmdW5jdGlvbnMgCitib29sIGlz
Q2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KFVDaGFyMzIgLCBib29sICkgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK30KKworaW50IE1ha2VEYXRhRXhlY3V0YWJsZTsKKwor
Ly8gZnVuY3Rpb25zIG5ldyB0byBNYXItMiB0aXAgb2YgdHJlZSBtZXJnZToKK1N0cmluZyBLVVJM
OjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmlu
ZygpOyB9CisKKy8vIGZ1bmN0aW9ucyBuZXcgdG8gSnVuLTEgdGlwIG9mIHRyZWUgbWVyZ2U6CitQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNP
ZkZpbGUoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorCitu
YW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBCaW5kaW5ncyB7Citib29sIGRpc3BhdGNoSk5JQ2Fs
bChFeGVjU3RhdGUqLCB2b2lkIGNvbnN0KiwgX2pvYmplY3QqLCBib29sLCBKTklUeXBlLCAKKyAg
ICAgICAgX2ptZXRob2RJRCosIGp2YWx1ZSosIGp2YWx1ZSYsIGNoYXIgY29uc3QqLCBKU1ZhbHVl
KiYpIHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KK30KK30K
KworY2hhciogZGlybmFtZShjb25zdCBjaGFyKikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
TlVMTDsgfSAKKworICAgIC8vIG5ldyBhcyBvZiBTVk4gY2hhbmdlIDM2MjY5LCBTZXB0IDgsIDIw
MDgKK2NvbnN0IFN0cmluZyYgRGF0YWJhc2U6OmRhdGFiYXNlSW5mb1RhYmxlTmFtZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGR1bW15OworICAg
IHJldHVybiBkdW1teTsKK30KKworICAgIC8vIG5ldyBhcyBvZiBTVk4gY2hhbmdlIDM4MDY4LCBO
b3YgNSwgMjAwOAorbmFtZXNwYWNlIFdlYkNvcmUgewordm9pZCBwcmVmZXRjaEROUyhjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgZ2V0U3VwcG9ydGVk
S2V5U2l6ZXMoVmVjdG9yPFN0cmluZz4mKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1Bhc3NSZWZQ
dHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorUGFzc1JlZlB0cjxJY29uPiBJY29uOjpj
cmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorLy8gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1l
KCkgaXMgY2FsbGVkIGJ5IFJlbmRlclRleHRDb250cm9sOjpjYWxjUHJlZldpZHRocygpIAorLy8g
bGlrZSB0aGlzOiBzY3JvbGxiYXJTaXplID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkt
PnNjcm9sbGJhclRoaWNrbmVzcygpOworLy8gd2l0aCB0aGlzIGNvbW1lbnQ6IAorLy8gLy8gRklY
TUU6IFdlIHNob3VsZCBnZXQgdGhlIHNpemUgb2YgdGhlIHNjcm9sbGJhciBmcm9tIHRoZSBSZW5k
ZXJUaGVtZSBpbnN0ZWFkLgorLy8gc2luY2Ugb3VyIHRleHQgY29udHJvbCBkb2Vzbid0IGhhdmUg
c2Nyb2xsYmFycywgdGhlIGRlZmF1bHQgc2l6ZSBvZiAwIHdpZHRoIHNob3VsZCBiZQorLy8gb2su
IG5vdEltcGxlbWVudGVkKCkgaXMgY29tbWVudGVkIG91dCBiZWxvdyBzbyB0aGF0IHdlIGNhbiBm
aW5kIG90aGVyIHVucmVzb2x2ZWQKKy8vIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25zLgorU2Nyb2xs
YmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpIHsgLyogbm90SW1wbGVtZW50
ZWQoKTsgKi8gc3RhdGljIFNjcm9sbGJhclRoZW1lIHRoZW1lOyByZXR1cm4gJnRoZW1lOyB9CitK
U0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqICwgSlNDOjpQcm9maWxlKiApIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5VTEw7IH0KK30KKworRmlsZUxpc3Q6OkZpbGVMaXN0KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitGaWxlKiBGaWxlTGlzdDo6aXRlbSh1bnNp
Z25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBO
VUxMOworfQorCitBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworLy8gVGhpcyB2YWx1ZSB0dXJucyBvbiBvciBvZmYgdGhlIE1hYyBz
cGVjaWZpYyBBY2Nlc3NpYmlsaXR5IHN1cHBvcnQuCitib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nl
c3NpYmlsaXR5RW5hYmxlZCA9IGZhbHNlOworYm9vbCBBWE9iamVjdENhY2hlOjpnQWNjZXNzaWJp
bGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQgPSBmYWxzZTsKKwordm9pZCBBWE9iamVj
dENhY2hlOjpjaGlsZHJlbkNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKKworT3BhcXVlSlNDbGFzczo6fk9wYXF1ZUpTQ2xhc3MoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK09wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6fk9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworSlNDOjpKU1ZhbHVlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFs
dWF0ZShKU0M6OlVTdHJpbmcgY29uc3QmLCBKU0M6OkpTVmFsdWUqJikgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBOVUxMOworfQorCitjb25zdCBKU0M6OlNjb3Bl
Q2hhaW5Ob2RlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBOVUxMOworfQorCitKU0M6OkpTT2JqZWN0
KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2JqZWN0KCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBOVUxMOworfQorCitKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
OjpUeXBlIEphdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlKSAwOwor
fQorCitKYXZhU2NyaXB0Q2FsbEZyYW1lKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1N0cmluZyBK
YXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorfQorCitKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OkphdmFTY3JpcHREZWJ1Z1NlcnZlcigpIDoKKyAgICBtX3JlY29tcGlsZVRpbWVyKHRo
aXMsIE5VTEwpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSmF2YVNjcmlwdERlYnVn
U2VydmVyOjp+SmF2YVNjcmlwdERlYnVnU2VydmVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitKYXZhU2NyaXB0RGVidWdTZXJ2ZXImIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hh
cmVkKCkKK3sKKyAgICBzdGF0aWMgSmF2YVNjcmlwdERlYnVnU2VydmVyIHNlcnZlcjsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBzZXJ2ZXI7Cit9CisKK3ZvaWQgSmF2YVNjcmlw
dERlYnVnU2VydmVyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdn
ZXJDYWxsRnJhbWUsIGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmNhbGxFdmVudChj
b25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludCBzb3VyY2VJRCwg
aW50IGxpbmVOdW1iZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBKYXZh
U2NyaXB0RGVidWdTZXJ2ZXI6OmRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZy
YW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6
ZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxG
cmFtZSwgaW50IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZXhjZXB0aW9uKGNvbnN0IERl
YnVnZ2VyQ2FsbEZyYW1lJiBkZWJ1Z2dlckNhbGxGcmFtZSwgaW50IHNvdXJjZUlELCBpbnQgbGlu
ZU51bWJlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEphdmFTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c291cmNlUGFyc2VkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYsIAorICAgIGludCBzb3VyY2VJRCwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpwYWdl
Q3JlYXRlZChQYWdlKiBwYWdlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
SmF2YVNjcmlwdERlYnVnU2VydmVyOjpyZXR1cm5FdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFt
ZSYgZGVidWdnZXJDYWxsRnJhbWUsIGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6Ondp
bGxFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJh
bWUsIGludCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZXh0Qm91bmRhcmllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RleHRCb3VuZGFyaWVzLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZXh0Qm91bmRhcmll
cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAw
OSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisKKyNpbmNsdWRlIDx1bmlj
b2RlL3VicmsuaD4KKworI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hh
cnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKQoreworICAgIFVCcmVha0l0
ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOworCisgICAgaW50IG5l
d1Bvc2l0aW9uID0gcG9zaXRpb247CisKKyAgICBpZiAoZm9yd2FyZCkgeworICAgICAgICBwb3Np
dGlvbiA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxlIChwb3Np
dGlvbiAhPSBVQlJLX0RPTkUpIHsKKyAgICAgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdo
ZW4gdGhlIGNoYXJhY3RlciBwcmVjZWVkaW5nIHRoZSBicmVhaworICAgICAgICAgICAgLy8gaXMg
YWxwaGFudW1lcmljLgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbGVuICYmIHVfaXNhbG51
bShjaGFyc1twb3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247
CisKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsZW47CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cG9zaXRpb24gPSB1YnJrX3ByZWNlZGluZyhpdCwgcG9zaXRpb24pOworICAgICAgICB3aGlsZSAo
cG9zaXRpb24gIT0gVUJSS19ET05FKSB7CisgICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGlu
ZyB3aGVuIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBicmVhaworICAgICAgICAgICAgLy8g
aXMgYWxwaGFudW1lcmljLgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gMCAmJiB1X2lzYWxu
dW0oY2hhcnNbcG9zaXRpb25dKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisK
KyAgICAgICAgICAgIHBvc2l0aW9uID0gdWJya19wcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordm9pZCBmaW5kV29yZEJv
dW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0
YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICBVQnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVy
YXRvcihjaGFycywgbGVuKTsKKyAgICAqZW5kID0gdWJya19mb2xsb3dpbmcoaXQsIHBvc2l0aW9u
KTsKKyAgICBpZiAoKmVuZCA8IDApCisgICAgICAgICplbmQgPSB1YnJrX2xhc3QoaXQpOworICAg
ICpzdGFydCA9IHVicmtfcHJldmlvdXMoaXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5h
bElDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RleHRCcmVh
a0l0ZXJhdG9ySW50ZXJuYWxJQ1UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4g
U291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
b25zdCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKQoreworICAgIHJldHVybiAiZW5f
dXMiOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvV2lkZ2V0QW5kcm9p
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1dpZGdldEFuZHJv
aWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1dpZGdldEFu
ZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIb3N0V2lu
ZG93LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgIldlYkNvcmVG
cmFtZUJyaWRnZS5oIgorI2luY2x1ZGUgIldlYkNvcmVWaWV3QnJpZGdlLmgiCisjaW5jbHVkZSAi
V2ViVmlld0NvcmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgV2lkZ2V0
UHJpdmF0ZQorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgRm9udCAgICAgICAgICAgICAg
ICBtX2ZvbnQ7CisgICAgfTsKKworICAgIFdpZGdldDo6V2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdp
ZGdldCkgOiBtX2RhdGEobmV3IFdpZGdldFByaXZhdGUpCisgICAgeworICAgICAgICBpbml0KHdp
ZGdldCk7CisgICAgfQorCisgICAgV2lkZ2V0Ojp+V2lkZ2V0KCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghcGFyZW50KCkpOworICAgICAgICByZWxlYXNlUGxhdGZvcm1XaWRnZXQoKTsKKyAgICAg
ICAgZGVsZXRlIG1fZGF0YTsKKyAgICB9CisKKyAgICBJbnRSZWN0IFdpZGdldDo6ZnJhbWVSZWN0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiB1c2UgbV9mcmFtZSBpbnN0ZWFkPwor
ICAgICAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gSW50UmVj
dCgwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIHBsYXRmb3JtV2lkZ2V0KCktPmdldEJvdW5k
cygpOworICAgIH0KKworICAgIHZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCisgICAgeworICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIHZvaWQgV2lkZ2V0OjpwYWludChHcmFw
aGljc0NvbnRleHQqIGN0eCwgY29uc3QgSW50UmVjdCYgcikKKyAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBpbiB3aGF0IGNhc2UsIHdpbGwgdGhpcyBiZSBjYWxsZWQgZm9yIHRoZSB0b3AgZnJhbWU/
CisgICAgICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcGxhdGZvcm1XaWRnZXQoKS0+ZHJhdyhjdHgsIHIpOworICAgIH0KKworICAgIHZvaWQg
V2lkZ2V0OjpyZWxlYXNlUGxhdGZvcm1XaWRnZXQoKQorICAgIHsKKyAgICAgICAgUmVsZWFzZShw
bGF0Zm9ybVdpZGdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIFdpZGdldDo6cmV0YWluUGxhdGZv
cm1XaWRnZXQoKQorICAgIHsKKyAgICAgICAgUmV0YWluKHBsYXRmb3JtV2lkZ2V0KCkpOworICAg
IH0KKworICAgIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCisg
ICAgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIHZvaWQgV2lkZ2V0
OjpzaG93KCkKKyAgICB7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7IAorICAgIH0KKworICAg
IHZvaWQgV2lkZ2V0OjpoaWRlKCkKKyAgICB7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7IAor
ICAgIH0KKworICAgIHZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBzZXQgbV9mcmFtZSBpbnN0ZWFkPworICAgICAg
ICAvLyBwbGF0Zm9ybVdpZGdldCgpIGlzIE5VTEwgd2hlbiBjYWxsZWQgZnJvbSBTY3JvbGxiYXIK
KyAgICAgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBwbGF0Zm9ybVdpZGdldCgpLT5zZXRMb2NhdGlvbihyZWN0LngoKSwgcmVjdC55KCkpOwor
ICAgICAgICBwbGF0Zm9ybVdpZGdldCgpLT5zZXRTaXplKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CisgICAgfQorCisgICAgdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBpc1Nl
bGVjdGVkKQorICAgIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICBp
bnQgV2lkZ2V0OjpzY3JlZW5XaWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBXaWRn
ZXQqIHdpZGdldCA9IHRoaXM7CisgICAgICAgIHdoaWxlICghd2lkZ2V0LT5pc0ZyYW1lVmlldygp
KSB7CisgICAgICAgICAgICB3aWRnZXQgPSB3aWRnZXQtPnBhcmVudCgpOworICAgICAgICAgICAg
aWYgKCF3aWRnZXQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCF3aWRnZXQpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gYW5k
cm9pZDo6V2ViVmlld0NvcmU6OmdldFdlYlZpZXdDb3JlKAorICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGNvbnN0IFNjcm9sbFZpZXcqPih3aWRnZXQpKS0+c2NyZWVuV2lkdGgoKTsKKyAgICB9
CisKK30gLy8gV2ViQ29yZSBuYW1lcHNhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26778</attachid>
            <date>2009-01-15 17:17:36 -0800</date>
            <delta_ts>2009-01-23 14:10:46 -0800</delta_ts>
            <desc>patch v2</desc>
            <filename>23296patch.txt</filename>
            <type>text/plain</type>
            <size>137504</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTk1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQ5IEBACisyMDA5LTAxLTE1ICBGZW5nIFFpYW4gIDxmZW5nQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
QW5kcm9pZCBwb3J0IGZpbGVzIHRvIFdlYkNvcmUvcGxhdGZvcm0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI5NgorCisgICAgICAgICogcGxhdGZv
cm0vYW5kcm9pZDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9DbGlwYm9hcmRB
bmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRBbmRyb2lkOjpDbGlwYm9hcmRBbmRyb2lkKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2Fy
ZEFuZHJvaWQ6On5DbGlwYm9hcmRBbmRyb2lkKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2Fy
ZEFuZHJvaWQ6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRBbmRyb2lk
OjpjbGVhckFsbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQW5kcm9pZDo6Z2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRBbmRyb2lkOjpzZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEFuZHJvaWQ6OnR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZEFuZHJvaWQ6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRBbmRyb2lkOjpzZXREcmFnSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZEFuZHJvaWQ6OmNyZWF0ZURyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRBbmRyb2lkOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQW5kcm9pZDo6d3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkQW5kcm9pZDo6d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRB
bmRyb2lkOjpoYXNEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0NsaXBib2FyZEFu
ZHJvaWQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9Db250ZXh0TWVudUNs
aWVudEFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q2xp
ZW50QW5kcm9pZDo6Y29udGV4dE1lbnVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnVDbGllbnRBbmRyb2lkOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNsaWVudEFuZHJvaWQ6OmNvbnRleHRNZW51SXRl
bVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50QW5kcm9pZDo6
ZG93bmxvYWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnRBbmRyb2lk
Ojpjb3B5SW1hZ2VUb0NsaXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNs
aWVudEFuZHJvaWQ6OnNlYXJjaFdpdGhHb29nbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDbGllbnRBbmRyb2lkOjpsb29rVXBJbkRpY3Rpb25hcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dE1lbnVDbGllbnRBbmRyb2lkOjpzcGVhayk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNsaWVudEFuZHJvaWQ6OnN0b3BTcGVha2luZyk6CisgICAgICAgICogcGxhdGZv
cm0vYW5kcm9pZC9Db250ZXh0TWVudUNsaWVudEFuZHJvaWQuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vYW5kcm9pZC9DdXJzb3JBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6On5DdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29y
ZTo6cG9pbnRlckN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpjcm9zc0N1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpoYW5kQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om1vdmVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6aUJlYW1DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6d2Fp
dEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpoZWxwQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OmVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhSZXNpemVDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhFYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6Om5vcnRoV2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0
aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aEVhc3RSZXNpemVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6c291dGhXZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6Ondlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhTb3V0aFJl
c2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjplYXN0V2VzdFJlc2l6ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6bm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbHVtblJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpyb3dSZXNpemVD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6dmVydGljYWxUZXh0Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNlbGxDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9Ecm9wQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvcHlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6cHJvZ3Jlc3NDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6YWxpYXNDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9uZUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjptaWRkbGVQYW5uaW5nQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OmVhc3RQYW5uaW5nQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoUGFubmluZ0N1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aEVhc3RQYW5uaW5nQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6Om5vcnRoV2VzdFBhbm5pbmdDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
c291dGhQYW5uaW5nQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OnNvdXRoRWFzdFBhbm5pbmdD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6c291dGhXZXN0UGFubmluZ0N1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjp3ZXN0UGFubmluZ0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpncmFi
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmdyYWJiaW5nQ3Vyc29yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hbmRyb2lkL0RyYWdEYXRhQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
RGF0YTo6Y29udGFpbnNDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFp
bnNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxhaW5UZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdEYXRhOjpjcmVhdGVDbGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6
OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6
OmNvbnRhaW5zVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnRGF0YTo6YXNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRh
aW5zRmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvRXZlbnRMb29wQW5kcm9pZC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29wOjpjeWNsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vYW5kcm9pZC9GaWxlQ2hvb3NlckFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpiYXNlbmFtZUZvcldpZHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6Zmls
ZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQv
RmlsZVN5c3RlbUFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjp1bmxvYWRNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xv
c2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OmhvbWVEaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0tleUV2
ZW50QW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0tleUNvZGVG
b3JLZXlFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjprZXlJZGVudGlmaWVyRm9yQW5kcm9pZEtl
eUNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNM
b2NrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNh
bWJpZ3VhdGVLZXlEb3duRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvS2V5Ym9h
cmRDb2Rlcy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0xvY2FsaXplZFN0
cmluZ3NBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0
ZW1UYWdJbnNwZWN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjp1bmtub3duRmlsZVNpemVU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlVGl0bGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2FuZHJvaWQvUG9wdXBNZW51QW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UG9wdXBNZW51OjpQb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojp+UG9w
dXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQb3B1cE1lbnU6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51Ojp1
cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6Oml0ZW1Xcml0
aW5nRGlyZWN0aW9uSXNOYXR1cmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1JlbmRl
clRoZW1lQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q2FudmFzRnJv
bUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRCcnVzaCk6CisgICAgICAgIChXZWJDb3Jl
Ojp0aGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OlJlbmRlclRo
ZW1lQW5kcm9pZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6On5SZW5k
ZXJUaGVtZUFuZHJvaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnN0YXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtQWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
QW5kcm9pZDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6
cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6YmFzZWxpbmVQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkZEludHJpbnNpY01h
cmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpzdXBwb3J0c0Zv
Y3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0QnV0dG9u
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludENoZWNr
Ym94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRCdXR0b24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludFJhZGlvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6c2V0Q2hlY2tib3hTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6c2V0UmFkaW9TaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludFRleHRGaWVsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdFRleHRBcmVhU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludFRleHRBcmVhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50U2VhcmNo
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RMaXN0
Ym94U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RN
ZW51TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6cGFp
bnRDb21ibyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50TWVu
dUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6
cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJv
aWQ6OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1JlbmRl
clRoZW1lQW5kcm9pZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lRGF0YTo6bV9z
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFuZHJvaWQ6OnN1cHBvcnRzSG92
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBbmRyb2lkOjpzeXN0ZW1Gb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQW5kcm9pZDo6bWluaW11bU1lbnVMaXN0U2l6
ZSk6CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpzY3Jl
ZW5EZXB0aFBlckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJv
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuOjpvcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmlld0FuZHJvaWQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtVmlzaWJsZUNvbnRl
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtQ29udGVudHNT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtU2V0U2Nyb2xsUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1TY3JvbGxiYXJN
b2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVByb2hpYml0c1Nj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRD
b250ZW50UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3Jt
T2Zmc2NyZWVuQ29udGVudFJlY3RhbmdsZSk6CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9T
ZWFyY2hQb3B1cE1lbnVBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hQb3B1cE1lbnU6OnNhdmVSZWNlbnRTZWFyY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hQb3B1cE1lbnU6OmxvYWRSZWNlbnRTZWFyY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hQb3B1cE1lbnU6OlNlYXJjaFBvcHVwTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hQ
b3B1cE1lbnU6OmVuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvU2hhcmVkVGlt
ZXJBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpzdG9wU2hhcmVkVGltZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2FuZHJvaWQvU3lzdGVtVGltZUFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmdldF90aHJlYWRfbXNlYyk6CisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRlZmF1bHRMYW5ndWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpbkluZm9TdG9yZTo6cGx1Z2luQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OkNoZWNrQ2FjaGVPYmplY3RT
dGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6fkljb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SWNvbjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6c3VibWl0QnV0dG9uRGVmYXVsdExh
YmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlucHV0RWxlbWVudEFsdFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6c2Vh
cmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZvY3VzUmluZ0Nv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdX
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5r
VG9EaXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9D
bGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdl
SW5OZXdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnRG93bmxv
YWRJbWFnZVRvRGlzayk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdDb3B5
SW1hZ2VUb0NsaXBib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdP
cGVuRnJhbWVJbk5ld1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0dvQmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpjb250
ZXh0TWVudUl0ZW1UYWdSZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVt
VGFnQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSk6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdPcGVuTGluayk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVu
dUl0ZW1UYWdJZ25vcmVHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdT
aG93U3BlbGxpbmdQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdD
aGVja1NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ0NoZWNr
U3BlbGxpbmdXaGlsZVR5cGluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1U
YWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1l
bnVJdGVtVGFnRm9udE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFn
Qm9sZCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6
Y29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpj
b250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZXh0
TWVudUl0ZW1UYWdSaWdodFRvTGVmdCk6CisgICAgICAgIChQYXN0ZWJvYXJkOjpnZW5lcmFsUGFz
dGVib2FyZCk6CisgICAgICAgIChQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAgICAg
IChQYXN0ZWJvYXJkOjp3cml0ZVVSTCk6CisgICAgICAgIChQYXN0ZWJvYXJkOjpjbGVhcik6Cisg
ICAgICAgIChQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoUGFzdGVib2Fy
ZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgIChQYXN0ZWJvYXJkOjpwbGFpblRleHQpOgor
ICAgICAgICAoUGFzdGVib2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChQYXN0ZWJvYXJkOjp+
UGFzdGVib2FyZCk6CisgICAgICAgIChDb250ZXh0TWVudTo6Q29udGV4dE1lbnUpOgorICAgICAg
ICAoQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSk6CisgICAgICAgIChDb250ZXh0TWVudTo6YXBw
ZW5kSXRlbSk6CisgICAgICAgIChDb250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbik6
CisgICAgICAgIChDb250ZXh0TWVudTo6cGxhdGZvcm1EZXNjcmlwdGlvbik6CisgICAgICAgIChD
b250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbSk6CisgICAgICAgIChDb250ZXh0TWVudUl0
ZW06On5Db250ZXh0TWVudUl0ZW0pOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNl
UGxhdGZvcm1EZXNjcmlwdGlvbik6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnR5cGUpOgor
ICAgICAgICAoQ29udGV4dE1lbnVJdGVtOjpzZXRUeXBlKToKKyAgICAgICAgKENvbnRleHRNZW51
SXRlbTo6YWN0aW9uKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKToKKyAg
ICAgICAgKENvbnRleHRNZW51SXRlbTo6dGl0bGUpOgorICAgICAgICAoQ29udGV4dE1lbnVJdGVt
OjpzZXRUaXRsZSk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnBsYXRmb3JtU3ViTWVudSk6
CisgICAgICAgIChDb250ZXh0TWVudUl0ZW06OnNldFN1Yk1lbnUpOgorICAgICAgICAoQ29udGV4
dE1lbnVJdGVtOjpzZXRDaGVja2VkKToKKyAgICAgICAgKENvbnRleHRNZW51SXRlbTo6c2V0RW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjp1c2VySWRsZVRpbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6c3lzdGVtQmVlcCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6ZHJhZ0ltYWdlRm9yU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ0ltYWdlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZWxldGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6em9vbUluQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Onpvb21PdXRD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm90QWxsb3dlZEN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzY2FsZURyYWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hNZW51UmVj
ZW50U2VhcmNoZXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlYXJjaE1lbnVOb1JlY2VudFNl
YXJjaGVzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFy
Y2hlc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydGVkS2V5U2l6ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KToKKyAgICAgICAgKEtVUkw6
OmZpbGVTeXN0ZW1QYXRoKToKKyAgICAgICAgKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRl
bnRzT2ZGaWxlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmRpc3BhdGNoSk5JQ2FsbCk6Cisg
ICAgICAgIChkaXJuYW1lKToKKyAgICAgICAgKERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0U3VwcG9ydGVkS2V5U2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNv
bkZvckZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKEZpbGVMaXN0OjpGaWxlTGlzdCk6CisgICAgICAg
IChGaWxlTGlzdDo6aXRlbSk6CisgICAgICAgIChBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNo
ZSk6CisgICAgICAgIChBWE9iamVjdENhY2hlOjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAo
QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVK
U0NsYXNzKToKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YTo6fk9wYXF1ZUpTQ2xh
c3NDb250ZXh0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpl
dmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNo
YWluKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3JpcHRDYWxsRnJhbWU6OnRoaXNPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6dHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SmF2YVNjcmlwdENhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKToKKyAgICAgICAgKEphdmFTY3Jp
cHREZWJ1Z1NlcnZlcjo6SmF2YVNjcmlwdERlYnVnU2VydmVyKToKKyAgICAgICAgKEphdmFTY3Jp
cHREZWJ1Z1NlcnZlcjo6fkphdmFTY3JpcHREZWJ1Z1NlcnZlcik6CisgICAgICAgIChKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCk6CisgICAgICAgIChKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OmF0U3RhdGVtZW50KToKKyAgICAgICAgKEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6Y2FsbEV2ZW50
KToKKyAgICAgICAgKEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0pOgor
ICAgICAgICAoSmF2YVNjcmlwdERlYnVnU2VydmVyOjpkaWRSZWFjaEJyZWFrcG9pbnQpOgorICAg
ICAgICAoSmF2YVNjcmlwdERlYnVnU2VydmVyOjpleGNlcHRpb24pOgorICAgICAgICAoSmF2YVNj
cmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQpOgorICAgICAgICAoSmF2YVNjcmlwdERlYnVn
U2VydmVyOjpwYWdlQ3JlYXRlZCk6CisgICAgICAgIChKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
dHVybkV2ZW50KToKKyAgICAgICAgKEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6d2lsbEV4ZWN1dGVQ
cm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1RleHRCb3VuZGFyaWVzLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9p
ZC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQpOgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJv
aWQvV2lkZ2V0QW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpX
aWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojp+V2lkZ2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OldpZGdldDo6ZnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OnJlbGVhc2VQbGF0Zm9ybVdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpX
aWRnZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFt
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRJc1NlbGVjdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OldpZGdldDo6c2NyZWVuV2lkdGgpOgorCiAyMDA5LTAxLTE1ICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2Vv
ZmZyZXkgR2FyZW4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ2xpcGJvYXJkQW5k
cm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0NsaXBib2Fy
ZEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0Ns
aXBib2FyZEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZEFuZHJvaWQuaCIK
KworI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBmb3JtYXQgc3RyaW5nIGZvcgorc3RhdGljIGNvbnN0IGNoYXIgc3pTaGVsbERvdFVybFRl
bXBsYXRlW10gPSAiW0ludGVybmV0U2hvcnRjdXRdXHJcblVSTD0lc1xyXG4iOworCisvLyBXZSBw
cm92aWRlIHRoZSBJRSBjbGlwYm9hcmQgdHlwZXMgKFVSTCBhbmQgVGV4dCksIGFuZCB0aGUgY2xp
cGJvYXJkIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIFdlYiBBcHBsaWNhdGlvbnMgMS4w
IGRyYWZ0CisvLyBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay8gU2VjdGlvbiA2LjMuNS4zCisKK2VudW0gQ2xpcGJvYXJkRGF0YVR5cGUgeyBDbGlw
Ym9hcmREYXRhVHlwZU5vbmUsIENsaXBib2FyZERhdGFUeXBlVVJMLCBDbGlwYm9hcmREYXRhVHlw
ZVRleHQgfTsKKworc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGNsaXBib2FyZFR5cGVGcm9tTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIFN0cmluZyBxVHlwZSA9IHR5cGUuc3Ry
aXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKKworICAgIC8vIHR3byBzcGVjaWFsIGNhc2VzIGZvciBJ
RSBjb21wYXRpYmlsaXR5CisgICAgaWYgKHFUeXBlID09ICJ0ZXh0IiB8fCBxVHlwZSA9PSAidGV4
dC9wbGFpbiIgfHwgcVR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKKyAgICAgICAgcmV0
dXJuIENsaXBib2FyZERhdGFUeXBlVGV4dDsKKyAgICBpZiAocVR5cGUgPT0gInVybCIgfHwgcVR5
cGUgPT0gInRleHQvdXJpLWxpc3QiKQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVV
Ukw7CisKKyAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVOb25lOworfQorCitDbGlwYm9hcmRB
bmRyb2lkOjpDbGlwYm9hcmRBbmRyb2lkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIGJv
b2wgaXNGb3JEcmFnZ2luZykKKyAgICA6IENsaXBib2FyZChwb2xpY3ksIGlzRm9yRHJhZ2dpbmcp
Cit7Cit9CisKK0NsaXBib2FyZEFuZHJvaWQ6On5DbGlwYm9hcmRBbmRyb2lkKCkKK3sKK30KKwor
dm9pZCBDbGlwYm9hcmRBbmRyb2lkOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQorewor
ICAgIC8vRklYTUU6IE5lZWQgdG8gYmUgYWJsZSB0byB3cml0ZSB0byB0aGUgc3lzdGVtIGNsaXBi
b2FyZCA8cmRhcjovL3Byb2JsZW0vNTAxNTk0MT4KKyAgICBBU1NFUlQoaXNGb3JEcmFnZ2luZygp
KTsKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21N
SU1FVHlwZSh0eXBlKTsKKworICAgIGlmIChkYXRhVHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVVS
TCkgeworICAgICAgICAgICB9CisgICAgaWYgKGRhdGFUeXBlID09IENsaXBib2FyZERhdGFUeXBl
VGV4dCkgeworICAgICAgIAorICAgIH0KKworfQorCit2b2lkIENsaXBib2FyZEFuZHJvaWQ6OmNs
ZWFyQWxsRGF0YSgpCit7CisgICAgLy9GSVhNRTogTmVlZCB0byBiZSBhYmxlIHRvIHdyaXRlIHRv
IHRoZSBzeXN0ZW0gY2xpcGJvYXJkIDxyZGFyOi8vcHJvYmxlbS81MDE1OTQxPgorICAgIEFTU0VS
VChpc0ZvckRyYWdnaW5nKCkpOworICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJs
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorfQorCitTdHJpbmcgQ2xpcGJvYXJkQW5kcm9pZDo6
Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0Cit7ICAgICAK
KyAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRh
YmxlKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICAvKgorICAgIENsaXBib2Fy
ZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsKKyAg
ICBpZiAoZGF0YVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVUZXh0KQorICAgICAgICByZXR1cm4g
Z2V0UGxhaW5UZXh0KG1fZGF0YU9iamVjdC5nZXQoKSwgc3VjY2Vzcyk7CisgICAgZWxzZSBpZiAo
ZGF0YVR5cGUgPT0gQ2xpcGJvYXJkRGF0YVR5cGVVUkwpIAorICAgICAgICByZXR1cm4gZ2V0VVJM
KG1fZGF0YU9iamVjdC5nZXQoKSwgc3VjY2Vzcyk7CisgICAgKi8KKyAgICByZXR1cm4gIiI7Cit9
CisKK2Jvb2wgQ2xpcGJvYXJkQW5kcm9pZDo6c2V0RGF0YShjb25zdCBTdHJpbmcgJnR5cGUsIGNv
bnN0IFN0cmluZyAmZGF0YSkKK3sKKyAgICAvL0ZJWE1FOiBOZWVkIHRvIGJlIGFibGUgdG8gd3Jp
dGUgdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQgPHJkYXI6Ly9wcm9ibGVtLzUwMTU5NDE+CisgICAg
QVNTRVJUKGlzRm9yRHJhZ2dpbmcoKSk7CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdy
aXRhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDbGlwYm9hcmREYXRhVHlwZSBw
bGF0Zm9ybVR5cGUgPSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKHR5cGUpOworCisgICAgaWYg
KHBsYXRmb3JtVHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVVSTCkgeworICAgICAgICBLVVJMIHVy
bCA9IEtVUkwoZGF0YSk7CisjaWYgMCAmJiBkZWZpbmVkIEFORFJPSUQgLy8gRklYTUUgSEFDSyA6
IEtVUkwgbm8gbG9uZ2VyIGRlZmluZXMgYSBwdWJsaWMgbWV0aG9kIGlzVmFsaWQoKQorICAgICAg
ICBpZiAoIXVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBXZWJDb3JlOjp3cml0ZVVSTChtX3dyaXRhYmxlRGF0
YU9iamVjdC5nZXQoKSwgdXJsLCBTdHJpbmcoKSwgZmFsc2UsIHRydWUpOworICAgIH0gZWxzZSBp
ZiAoIHBsYXRmb3JtVHlwZSA9PSBDbGlwYm9hcmREYXRhVHlwZVRleHQpIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworLy8gZXh0ZW5zaW9u
cyBiZXlvbmQgSUUncyBBUEkKK0hhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRBbmRyb2lkOjp0eXBl
cygpIGNvbnN0Cit7IAorICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOyAKKyAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNS
ZWFkYWJsZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisKKyAgICByZXR1cm4gcmVzdWx0czsK
K30KKwordm9pZCBDbGlwYm9hcmRBbmRyb2lkOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGlt
YWdlLCBOb2RlICpub2RlLCBjb25zdCBJbnRQb2ludCAmbG9jKQoreworICAgIGlmIChwb2xpY3ko
KSAhPSBDbGlwYm9hcmRJbWFnZVdyaXRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRh
YmxlKSAKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpZiAobV9kcmFnSW1hZ2UpCisg
ICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1vdmVDbGllbnQodGhpcyk7CisgICAgbV9kcmFnSW1hZ2Ug
PSBpbWFnZTsKKyAgICBpZiAobV9kcmFnSW1hZ2UpCisgICAgICAgIG1fZHJhZ0ltYWdlLT5hZGRD
bGllbnQodGhpcyk7CisKKyAgICBtX2RyYWdMb2MgPSBsb2M7CisgICAgbV9kcmFnSW1hZ2VFbGVt
ZW50ID0gbm9kZTsKK30KKwordm9pZCBDbGlwYm9hcmRBbmRyb2lkOjpzZXREcmFnSW1hZ2UoQ2Fj
aGVkSW1hZ2UqIGltZywgY29uc3QgSW50UG9pbnQgJmxvYykKK3sKKyAgICBzZXREcmFnSW1hZ2Uo
aW1nLCAwLCBsb2MpOworfQorCit2b2lkIENsaXBib2FyZEFuZHJvaWQ6OnNldERyYWdJbWFnZUVs
ZW1lbnQoTm9kZSAqbm9kZSwgY29uc3QgSW50UG9pbnQgJmxvYykKK3sKKyAgICBzZXREcmFnSW1h
Z2UoMCwgbm9kZSwgbG9jKTsKK30KKworRHJhZ0ltYWdlUmVmIENsaXBib2FyZEFuZHJvaWQ6OmNy
ZWF0ZURyYWdJbWFnZShJbnRQb2ludCYgbG9jKSBjb25zdAoreworICAgIHZvaWQqIHJlc3VsdCA9
IDA7CisgICAgLy9GSVhNRTogTmVlZCB0byBiZSBhYmxlIHRvIGRyYXcgZWxlbWVudCA8cmRhcjov
L3Byb2JsZW0vNTAxNTk0Mj4KKyAgICBpZiAobV9kcmFnSW1hZ2UpIHsKKyAgICAgICAgcmVzdWx0
ID0gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKG1fZHJhZ0ltYWdlLT5pbWFnZSgpKTsgICAgICAg
IAorICAgICAgICBsb2MgPSBtX2RyYWdMb2M7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKKwordm9pZCBDbGlwYm9hcmRBbmRyb2lkOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxl
bWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFt
ZSogZnJhbWUpCit7CisKK30KKwordm9pZCBDbGlwYm9hcmRBbmRyb2lkOjp3cml0ZVVSTChjb25z
dCBLVVJMJiBrdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlU3RyLCBGcmFtZSopCit7CisKK30KKwor
dm9pZCBDbGlwYm9hcmRBbmRyb2lkOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBG
cmFtZSogZnJhbWUpCit7CisgICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOworfQorCitib29sIENs
aXBib2FyZEFuZHJvaWQ6Omhhc0RhdGEoKQoreworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ2xp
cGJvYXJkQW5kcm9pZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9D
bGlwYm9hcmRBbmRyb2lkLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJv
aWQvQ2xpcGJvYXJkQW5kcm9pZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKgor
ICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIENsaXBib2FyZEFuZHJvaWRfaAorI2RlZmluZSBDbGlwYm9hcmRBbmRy
b2lkX2gKKworI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQ2FjaGVkSW1h
Z2U7CisKKyAgICBjbGFzcyBDbGlwYm9hcmRBbmRyb2lkIDogcHVibGljIENsaXBib2FyZCwgcHVi
bGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENsaXBib2Fy
ZEFuZHJvaWQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgYm9vbCBpc0ZvckRyYWdnaW5n
KTsKKyAgICAgICAgfkNsaXBib2FyZEFuZHJvaWQoKTsKKyAgICAKKyAgICAgICAgdm9pZCBjbGVh
ckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsK
KyAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNz
KSBjb25zdDsKKyAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBkYXRhKTsKKyAgICAKKyAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBB
UEkKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgCisgICAgICAg
IHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICAg
ICAgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOworCQkK
KyAgICAgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBk
cmFnTG9jKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFt
ZSopOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIHJlc2V0RnJvbUNsaXBib2FyZCgpOworICAgICAgICB2b2lkIHNldERyYWdJ
bWFnZShDYWNoZWRJbWFnZSosIE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICBGcmFt
ZSogbV9mcmFtZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBDbGlwYm9hcmRBbmRyb2lkX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9Db250
ZXh0TWVudUNsaWVudEFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9Db250ZXh0TWVudUNsaWVudEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL0NvbnRleHRNZW51Q2xpZW50QW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ29udGV4dE1lbnVDbGllbnRBbmRyb2lkLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKK3ZvaWQgQ29udGV4dE1lbnVDbGllbnRBbmRyb2lkOjpjb250ZXh0TWVudURlc3Ry
b3llZCgpIHsgZGVsZXRlIHRoaXM7IH0KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4
dE1lbnVDbGllbnRBbmRyb2lkOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhDb250ZXh0
TWVudSopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQgQ29udGV4dE1lbnVD
bGllbnRBbmRyb2lkOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qLCBj
b25zdCBDb250ZXh0TWVudSopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCit2b2lkIENvbnRleHRN
ZW51Q2xpZW50QW5kcm9pZDo6ZG93bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KK3ZvaWQgQ29udGV4dE1lbnVDbGllbnRBbmRyb2lkOjpjb3B5SW1hZ2VUb0Ns
aXBib2FyZChjb25zdCBIaXRUZXN0UmVzdWx0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lk
IENvbnRleHRNZW51Q2xpZW50QW5kcm9pZDo6c2VhcmNoV2l0aEdvb2dsZShjb25zdCBGcmFtZSop
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBDb250ZXh0TWVudUNsaWVudEFuZHJvaWQ6Omxv
b2tVcEluRGljdGlvbmFyeShGcmFtZSopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBDb250
ZXh0TWVudUNsaWVudEFuZHJvaWQ6OnNwZWFrKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQordm9pZCBDb250ZXh0TWVudUNsaWVudEFuZHJvaWQ6OnN0b3BTcGVha2luZygpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
Q29udGV4dE1lbnVDbGllbnRBbmRyb2lkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL0NvbnRleHRNZW51Q2xpZW50QW5kcm9pZC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL0NvbnRleHRNZW51Q2xpZW50QW5kcm9pZC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lk
IE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb250ZXh0TWVudUNsaWVudEFu
ZHJvaWRfaAorI2RlZmluZSBDb250ZXh0TWVudUNsaWVudEFuZHJvaWRfaAorCisjaW5jbHVkZSAi
Q29udGV4dE1lbnVDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250
ZXh0TWVudUNsaWVudEFuZHJvaWQgOiBwdWJsaWMgQ29udGV4dE1lbnVDbGllbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudURlc3Ryb3llZCgpOworICAgIAorICAgIHZp
cnR1YWwgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gZ2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRl
bXMoQ29udGV4dE1lbnUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0
ZWQoQ29udGV4dE1lbnVJdGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKTsKKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgZG93bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29weUltYWdlVG9DbGlwYm9hcmQoY29uc3QgSGl0VGVzdFJlc3VsdCYpOworICAgIHZpcnR1YWwg
dm9pZCBzZWFyY2hXaXRoR29vZ2xlKGNvbnN0IEZyYW1lKik7CisgICAgdmlydHVhbCB2b2lkIGxv
b2tVcEluRGljdGlvbmFyeShGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCBzcGVhayhjb25zdCBT
dHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNwZWFraW5nKCk7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gQ29udGV4dE1lbnVDbGllbnRBbmRyb2lkX2gK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9DdXJzb3JBbmRyb2lkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBB
bmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNkZWZpbmUg
TE9HX1RBRyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cnNv
ci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitDdXJzb3I6On5DdXJzb3IoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAqdGhpczsKK30KKworY29uc3Qg
Q3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0
YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBjcm9zc0N1
cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7Cisg
ICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisK
K2NvbnN0IEN1cnNvciYgbW92ZUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgaUJl
YW1DdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBj
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHdhaXRDdXJzb3IoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOwor
fQorCitjb25zdCBDdXJzb3ImIGhlbHBDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3Im
IGVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGlj
IEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoUmVzaXpl
Q3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsK
KyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RSZXNpemVDdXJzb3Io
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJl
dHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25z
dCBDdXJzb3ImIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNv
ciYgc291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0
UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJz
b3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFNvdXRoUmVzaXpl
Q3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsK
KyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0V2VzdFJlc2l6ZUN1cnNvcigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0
dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29y
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICBy
ZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJz
b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAg
IHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3Qg
Q3Vyc29yJiB2ZXJ0aWNhbFRleHRDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGNl
bGxDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBj
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1
cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub0Ryb3BDdXJzb3IoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25z
dCBDdXJzb3ImIGNvcHlDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3Rh
dGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHByb2dyZXNz
Q3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsK
KyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9
CisKK2NvbnN0IEN1cnNvciYgbm9uZUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKKy8vIG5ldyBhcyBvZiBT
Vk4gY2hhbmdlIDM2MjY5LCBTZXB0IDgsIDIwMDgKK2NvbnN0IEN1cnNvciYgbWlkZGxlUGFubmlu
Z0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7
CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVy
biBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoUGFubmluZ0N1cnNvcigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisK
K2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0
IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNv
ciYgc291dGhQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0
YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVh
c3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBD
dXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RQYW5u
aW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3Ig
YzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0UGFubmluZ0N1cnNvcigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0
dXJuIGM7Cit9CisKKy8vIG5ldyBhcyBvZiBTVk4gY2hhbmdlIDM4MDY4LCBOb3YgNSwgMjAwOAor
Y29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkgeworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
c3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGdyYWJi
aW5nQ3Vyc29yKCkgeworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBj
OworICAgIHJldHVybiBjOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
RHJhZ0RhdGFBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJv
aWQvRHJhZ0RhdGFBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9EcmFnRGF0YUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKworI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBEcmFnRGF0YTo6Y29udGFpbnND
b2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIERyYWdEYXRhOjpj
b250YWluc1BsYWluVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJp
bmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisgICAgCitDb2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IENvbG9yKCk7Cit9CisgICAgCitjbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMgUmVmQ291bnRlZDxD
bGlwYm9hcmQ+IHt9OworCitQYXNzUmVmUHRyPENsaXBib2FyZD4gRHJhZ0RhdGE6OmNyZWF0ZUNs
aXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NS
ZWZQdHI8Q2xpcGJvYXJkPigwKTsKK30KKyAgICAKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29t
cGF0aWJsZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jv
b2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisgICAgCitTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKFN0cmluZyogdGl0bGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorICAgIAorICAgIAorUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChEb2N1bWVudCopIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9CisKKy8vIGZ1bmN0aW9ucyBuZXcgdG8gSnVuLTA3IHRpcCBvZiB0cmVlIG1lcmdl
Ogordm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7fQor
Ym9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisK
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9FdmVudExvb3BBbmRyb2lkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRXZlbnRMb29wQW5kcm9pZC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRXZlbnRMb29wQW5k
cm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
MjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRMb29wLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRXZlbnRMb29wOjpjeWNsZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0ZpbGVDaG9vc2VyQW5kcm9pZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0ZpbGVDaG9vc2VyQW5kcm9pZC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRmlsZUNob29zZXJB
bmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgorCisjaW5jbHVkZSAiRm9udC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBGaWxlQ2hvb3Nlcjo6YmFzZW5hbWVG
b3JXaWR0aChjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgpIGNvbnN0IAoreyAKKyAgICAvLyBG
SVhNRTogVGhpcyBjb3VsZCBiZSBhIGxvdCBmYXN0ZXIsIGJ1dCBhc3N1bWluZyB0aGUgZGF0YSB3
aWxsIG5vdCBvZnRlbiBiZSAKKyAgICAvLyBtdWNoIGxvbmdlciB0aGFuIHRoZSBwcm92aWRlZCB3
aWR0aCwgdGhpcyBtYXkgYmUgZmFzdCBlbm91Z2guCisgICAgU3RyaW5nIG91dHB1dCA9IG1fZmls
ZW5hbWVzWzBdLmNvcHkoKTsKKyAgICB3aGlsZSAoZm9udC53aWR0aChUZXh0UnVuKG91dHB1dC5p
bXBsKCkpKSA+IHdpZHRoICYmIG91dHB1dC5sZW5ndGgoKSA+IDQpIHsKKyAgICAgICAgb3V0cHV0
ID0gb3V0cHV0LnJlcGxhY2Uob3V0cHV0Lmxlbmd0aCgpIC0gNCwgNCwgU3RyaW5nKCIuLi4iKSk7
CisgICAgfQorICAgIHJldHVybiBvdXRwdXQ7Cit9CisKKworLy8gVGhlIGZvbGxvd2luZyB0d28g
c3RyaW5ncyBhcmUgdXNlZCBmb3IgRmlsZSBVcGxvYWQgZm9ybSBjb250cm9sLCBpZQorLy8gPGlu
cHV0IHR5cGU9ImZpbGUiPi4gVGhlIGZpcnN0IGlzIHRoZSB0ZXh0IHRoYXQgYXBwZWFycyBvbiB0
aGUgYnV0dG9uCisvLyB0aGF0IHdoZW4gcHJlc3NlZCwgdGhlIHVzZXIgY2FuIGJyb3dzZSBmb3Ig
YW5kIHNlbGVjdCBhIGZpbGUuIFRoZQorLy8gc2Vjb25kIHN0cmluZyBpcyByZW5kZXJlZCBvbiB0
aGUgc2NyZWVuIHdoZW4gbm8gZmlsZSBoYXMgYmVlbiBzZWxlY3RlZC4KK1N0cmluZyBmaWxlQnV0
dG9uQ2hvb3NlRmlsZUxhYmVsKCkgeyByZXR1cm4gU3RyaW5nKCJVcGxvYWRzIERpc2FibGVkIik7
IH0KK1N0cmluZyBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpIHsgcmV0dXJuIFN0cmlu
ZygiTm8gZmlsZSBzZWxlY3RlZCIpOyB9CisKK30gICAvLyBXZWJDb3JlCisKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVtQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0ZpbGVTeXN0ZW1BbmRyb2lkLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVtQW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBB
bmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkNT
dHJpbmcuaCIKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlICJjdXRpbHMvbG9nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gR2xvYmFsIHN0YXRpYyB1c2VkIHRvIHN0b3JlIHRoZSBiYXNlIHRvIHRoZSBw
bHVnaW4gcGF0aC4KKy8vIFRoaXMgaXMgc2V0IGluIFdlYlNldHRpbmdzLmNwcAorU3RyaW5nIHNQ
bHVnaW5QYXRoOworCitDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJp
bmcmIHBhdGgpIHsKKyAgICByZXR1cm4gcGF0aC51dGY4KCk7Cit9CisKK0NTdHJpbmcgb3BlblRl
bXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICBpbnQgbnVtYmVyID0gcmFuZCgpICUgMTAwMDAgKyAxOworICAgIENTdHJpbmcg
ZmlsZW5hbWU7CisgICAgZG8geworICAgICAgICBTdHJpbmcgcGF0aCA9IHNQbHVnaW5QYXRoOwor
ICAgICAgICBwYXRoLmFwcGVuZCgiLyIpOworICAgICAgICBwYXRoLmFwcGVuZChwcmVmaXgpOwor
ICAgICAgICBwYXRoLmFwcGVuZChTdHJpbmc6Om51bWJlcihudW1iZXIpKTsKKyAgICAgICAgZmls
ZW5hbWUgPSBwYXRoLnV0ZjgoKTsKKyAgICAgICAgY29uc3QgY2hhciAqZnN0ciA9IGZpbGVuYW1l
LmRhdGEoKTsKKyAgICAgICAgaGFuZGxlID0gb3BlbihmaWxlbmFtZS5kYXRhKCksIE9fV1JPTkxZ
IHwgT19DUkVBVCB8IE9fRVhDTCwgU19JUlVTUiB8IFNfSVdVU1IpOworICAgICAgICBudW1iZXIr
KzsKKyAgICB9IHdoaWxlIChoYW5kbGUgPT0gLTEgJiYgZXJybm8gPT0gRUVYSVNUKTsKKyAgICAK
KyAgICBpZiAoaGFuZGxlICE9IC0xKSB7CisgICAgICAgIHJldHVybiBmaWxlbmFtZTsKKyAgICB9
CisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1N
b2R1bGUgbW9kdWxlKQoreworICAgIHJldHVybiBkbGNsb3NlKG1vZHVsZSkgPT0gMDsKK30KKwor
dm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKGlz
SGFuZGxlVmFsaWQoaGFuZGxlKSkgeworICAgICAgICBjbG9zZShoYW5kbGUpOworICAgICAgICBo
YW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIH0KK30KKworaW50IHdyaXRl
VG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCit7CisgICAgaW50IHRvdGFsQnl0ZXNXcml0dGVuID0gMDsKKyAgICB3aGlsZSAodG90
YWxCeXRlc1dyaXR0ZW4gPCBsZW5ndGgpIHsKKyAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHdy
aXRlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoIC0gdG90YWxCeXRlc1dyaXR0ZW4pOworICAgICAgICBp
ZiAoYnl0ZXNXcml0dGVuIDwgMCAmJiBlcnJubyAhPSBFSU5UUikKKyAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgZWxzZSBpZiAoYnl0ZXNXcml0dGVuID4gMCkKKyAgICAgICAgICAgIHRv
dGFsQnl0ZXNXcml0dGVuICs9IGJ5dGVzV3JpdHRlbjsKKyAgICB9CisKKyAgICByZXR1cm4gdG90
YWxCeXRlc1dyaXR0ZW47Cit9CisKKy8vIG5ldyBhcyBvZiBTVk4gY2hhbmdlIDM2MjY5LCBTZXB0
IDgsIDIwMDgKK1N0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpIAoreworICAgIHJldHVybiBzUGx1
Z2luUGF0aDsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleUV2ZW50
QW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleUV2
ZW50QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
S2V5RXZlbnRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmgi
CisKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlIDx1aS9LZXljb2RlTGFiZWxzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gY29tcGFyZSB0byBzYW1lIGZ1bmN0aW9uIGluIGdkay9LZXlFdmVudEdkay5jcHAKK3N0
YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Q29kZSkg
eworICAgIC8vIERvZXMgbm90IHByb3ZpZGUgYWxsIGtleSBjb2RlcywgYW5kIGRvZXMgbm90IGhh
bmRsZSBhbGwga2V5cy4KKyAgICBzd2l0Y2goa2V5Q29kZSkgeworICAgICAgICBjYXNlIGtLZXlD
b2RlRGVsOgorICAgICAgICAgICAgcmV0dXJuIFZLX0JBQ0s7CisgICAgICAgIGNhc2Uga0tleUNv
ZGVUYWI6CisgICAgICAgICAgICByZXR1cm4gVktfVEFCOworICAgICAgICBjYXNlIGtLZXlDb2Rl
Q2xlYXI6CisgICAgICAgICAgICByZXR1cm4gVktfQ0xFQVI7CisgICAgICAgIGNhc2Uga0tleUNv
ZGVEcGFkQ2VudGVyOgorICAgICAgICBjYXNlIGtLZXlDb2RlTmV3bGluZToKKyAgICAgICAgICAg
IHJldHVybiBWS19SRVRVUk47CisgICAgICAgIGNhc2Uga0tleUNvZGVTaGlmdExlZnQ6CisgICAg
ICAgIGNhc2Uga0tleUNvZGVTaGlmdFJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLX1NISUZU
OworICAgICAgICAvLyBiYWNrIHdpbGwgc2VydmUgYXMgZXNjYXBlLCBhbHRob3VnaCB3ZSBwcm9i
YWJseSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gaXQKKyAgICAgICAgY2FzZSBrS2V5Q29kZUJhY2s6
CisgICAgICAgICAgICByZXR1cm4gVktfRVNDQVBFOworICAgICAgICBjYXNlIGtLZXlDb2RlU3Bh
Y2U6CisgICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7CisgICAgICAgIGNhc2Uga0tleUNvZGVI
b21lOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7CisgICAgICAgIGNhc2Uga0tleUNvZGVE
cGFkTGVmdDoKKyAgICAgICAgICAgIHJldHVybiBWS19MRUZUOworICAgICAgICBjYXNlIGtLZXlD
b2RlRHBhZFVwOgorICAgICAgICAgICAgcmV0dXJuIFZLX1VQOworICAgICAgICBjYXNlIGtLZXlD
b2RlRHBhZFJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLX1JJR0hUOworICAgICAgICBjYXNl
IGtLZXlDb2RlRHBhZERvd246CisgICAgICAgICAgICByZXR1cm4gVktfRE9XTjsKKyAgICAgICAg
Y2FzZSBrS2V5Q29kZTA6CisgICAgICAgICAgICByZXR1cm4gVktfMDsKKyAgICAgICAgY2FzZSBr
S2V5Q29kZTE6CisgICAgICAgICAgICByZXR1cm4gVktfMTsKKyAgICAgICAgY2FzZSBrS2V5Q29k
ZTI6CisgICAgICAgICAgICByZXR1cm4gVktfMjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTM6Cisg
ICAgICAgICAgICByZXR1cm4gVktfMzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTQ6CisgICAgICAg
ICAgICByZXR1cm4gVktfNDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTU6CisgICAgICAgICAgICBy
ZXR1cm4gVktfNTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTY6CisgICAgICAgICAgICByZXR1cm4g
VktfNjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTc6CisgICAgICAgICAgICByZXR1cm4gVktfNzsK
KyAgICAgICAgY2FzZSBrS2V5Q29kZTg6CisgICAgICAgICAgICByZXR1cm4gVktfODsKKyAgICAg
ICAgY2FzZSBrS2V5Q29kZTk6CisgICAgICAgICAgICByZXR1cm4gVktfOTsKKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZUE6CisgICAgICAgICAgICByZXR1cm4gVktfQTsKKyAgICAgICAgY2FzZSBrS2V5
Q29kZUI6CisgICAgICAgICAgICByZXR1cm4gVktfQjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUM6
CisgICAgICAgICAgICByZXR1cm4gVktfQzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUQ6CisgICAg
ICAgICAgICByZXR1cm4gVktfRDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUU6CisgICAgICAgICAg
ICByZXR1cm4gVktfRTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUY6CisgICAgICAgICAgICByZXR1
cm4gVktfRjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUc6CisgICAgICAgICAgICByZXR1cm4gVktf
RzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUg6CisgICAgICAgICAgICByZXR1cm4gVktfSDsKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZUk6CisgICAgICAgICAgICByZXR1cm4gVktfSTsKKyAgICAgICAg
Y2FzZSBrS2V5Q29kZUo6CisgICAgICAgICAgICByZXR1cm4gVktfSjsKKyAgICAgICAgY2FzZSBr
S2V5Q29kZUs6CisgICAgICAgICAgICByZXR1cm4gVktfSzsKKyAgICAgICAgY2FzZSBrS2V5Q29k
ZUw6CisgICAgICAgICAgICByZXR1cm4gVktfTDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZU06Cisg
ICAgICAgICAgICByZXR1cm4gVktfTTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZU46CisgICAgICAg
ICAgICByZXR1cm4gVktfTjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZU86CisgICAgICAgICAgICBy
ZXR1cm4gVktfTzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVA6CisgICAgICAgICAgICByZXR1cm4g
VktfUDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVE6CisgICAgICAgICAgICByZXR1cm4gVktfUTsK
KyAgICAgICAgY2FzZSBrS2V5Q29kZVI6CisgICAgICAgICAgICByZXR1cm4gVktfUjsKKyAgICAg
ICAgY2FzZSBrS2V5Q29kZVM6CisgICAgICAgICAgICByZXR1cm4gVktfUzsKKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZVQ6CisgICAgICAgICAgICByZXR1cm4gVktfVDsKKyAgICAgICAgY2FzZSBrS2V5
Q29kZVU6CisgICAgICAgICAgICByZXR1cm4gVktfVTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVY6
CisgICAgICAgICAgICByZXR1cm4gVktfVjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVc6CisgICAg
ICAgICAgICByZXR1cm4gVktfVzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVg6CisgICAgICAgICAg
ICByZXR1cm4gVktfWDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVk6CisgICAgICAgICAgICByZXR1
cm4gVktfWTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVo6CisgICAgICAgICAgICByZXR1cm4gVktf
WjsKKyAgICAgICAgLy8gY29sb24KKyAgICAgICAgY2FzZSBrS2V5Q29kZVNlbWljb2xvbjoKKyAg
ICAgICAgICAgIHJldHVybiBWS19PRU1fMTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUNvbW1hOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZU1p
bnVzOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9NSU5VUzsKKyAgICAgICAgY2FzZSBrS2V5
Q29kZUVxdWFsczoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fUExVUzsKKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZVBlcmlvZDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fUEVSSU9EOworICAg
ICAgICBjYXNlIGtLZXlDb2RlU2xhc2g6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzI7Cisg
ICAgICAgIC8vIG1heWJlIG5vdCB0aGUgcmlnaHQgY2hvaWNlCisgICAgICAgIGNhc2Uga0tleUNv
ZGVMZWZ0QnJhY2tldDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNDsKKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZUJhY2tzbGFzaDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNTsKKyAgICAg
ICAgY2FzZSBrS2V5Q29kZVJpZ2h0QnJhY2tldDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1f
NjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
c3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yQW5kcm9pZEtleUNvZGUoaW50IGtleUNvZGUp
Cit7CisgICAgLy8gRG9lcyBub3QgcmV0dXJuIGFsbCBvZiB0aGUgc2FtZSBrZXkgaWRlbnRpZmll
cnMsIGFuZAorICAgIC8vIGRvZXMgbm90IGhhbmRsZSBhbGwgdGhlIGtleXMuCisgICAgc3dpdGNo
IChrZXlDb2RlKSB7CisgICAgICAgIGNhc2Uga0tleUNvZGVDbGVhcjoKKyAgICAgICAgICAgIHJl
dHVybiAiQ2xlYXIiOworICAgICAgICBjYXNlIGtLZXlDb2RlTmV3bGluZToKKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZURwYWRDZW50ZXI6CisgICAgICAgICAgICByZXR1cm4gIkVudGVyIjsKKyAgICAg
ICAgY2FzZSBrS2V5Q29kZUhvbWU6CisgICAgICAgICAgICByZXR1cm4gIkhvbWUiOworICAgICAg
ICBjYXNlIGtLZXlDb2RlRHBhZERvd246CisgICAgICAgICAgICByZXR1cm4gIkRvd24iOworICAg
ICAgICBjYXNlIGtLZXlDb2RlRHBhZExlZnQ6CisgICAgICAgICAgICByZXR1cm4gIkxlZnQiOwor
ICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZFJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuICJSaWdo
dCI7CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFkVXA6CisgICAgICAgICAgICByZXR1cm4gIlVw
IjsKKyAgICAgICAgLy8gU3RhbmRhcmQgc2F5cyB0aGF0IERFTCBiZWNvbWVzIFUrMDAwMDdGLgor
ICAgICAgICBjYXNlIGtLZXlDb2RlRGVsOgorICAgICAgICAgICAgcmV0dXJuICJVKzAwMDA3RiI7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjaGFyIHVwcGVyWzE2XTsKKyAgICAgICAg
ICAgIHNwcmludGYodXBwZXIsICJVKyUwNlgiLCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGtl
eUNvZGUpKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodXBwZXIpOworICAgIH0KK30KKwor
c3RhdGljIGlubGluZSBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGludCBjKSAKK3sKKyAg
ICBpZiAoIWMpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoYyA+IDB4ZmZmZikg
eworICAgICAgICBVQ2hhciBsZWFkID0gVTE2X0xFQUQoYyk7CisgICAgICAgIFVDaGFyIHRyYWls
ID0gVTE2X1RSQUlMKGMpOworICAgICAgICBVQ2hhciB1dGYxNlsyXSA9IHtsZWFkLCB0cmFpbH07
CisgICAgICAgIHJldHVybiBTdHJpbmcodXRmMTYsIDIpOworICAgIH0KKyAgICBVQ2hhciBuID0g
KFVDaGFyKWM7CisgICAgcmV0dXJuIFN0cmluZygmbiwgMSk7Cit9CisKK1BsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KGludCBrZXlDb2RlLCBVQ2hhcjMyIHVuaWNo
YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIHR5
cGUsIGludCByZXBlYXRDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1vZGlmaWVyS2V5IG1vZHMpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1f
dGV4dChzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5pY2hhcikpCisgICAgLCBtX3VubW9kaWZpZWRU
ZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyh1bmljaGFyKSkKKyAgICAsIG1fa2V5SWRlbnRpZmll
cihrZXlJZGVudGlmaWVyRm9yQW5kcm9pZEtleUNvZGUoa2V5Q29kZSkpCisgICAgLCBtX2F1dG9S
ZXBlYXQocmVwZWF0Q291bnQgPiAwKQorICAgICwgbV93aW5kb3dzVmlydHVhbEtleUNvZGUod2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChrZXlDb2RlKSkKKyAgICAsIG1fbmF0aXZlVmlydHVhbEtl
eUNvZGUoa2V5Q29kZSkKKyAgICAsIG1faXNLZXlwYWQoZmFsc2UpCisgICAgLCBtX3NoaWZ0S2V5
KChtb2RzICYgU2hpZnRLZXkpICE9IDApCisgICAgLCBtX2N0cmxLZXkoKG1vZHMgJiBDdHJsS2V5
KSAhPSAwKQorICAgICwgbV9hbHRLZXkoKG1vZHMgJiBBbHRLZXkpICE9IDApCisgICAgLCBtX21l
dGFLZXkoKG1vZHMgJiBNZXRhS2V5KSAhPSAwKQorICAgIC8vIGFkZGVkIGZvciBhbmRyb2lkCisg
ICAgLCBtX3JlcGVhdENvdW50KHJlcGVhdENvdW50KQorICAgICwgbV91bmljaGFyKHVuaWNoYXIp
Cit7CisgICAgLy8gQ29waWVkIGZyb20gdGhlIG1hYyBwb3J0CisgICAgaWYgKG1fd2luZG93c1Zp
cnR1YWxLZXlDb2RlID09ICdccicpIHsKKyAgICAgICAgbV90ZXh0ID0gIlxyIjsKKyAgICAgICAg
bV91bm1vZGlmaWVkVGV4dCA9ICJcciI7CisgICAgfQorCisgICAgaWYgKG1fdGV4dCA9PSAiXHg3
RiIpCisgICAgICAgIG1fdGV4dCA9ICJceDgiOworICAgIGlmIChtX3VubW9kaWZpZWRUZXh0ID09
ICJceDdGIikKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJceDgiOworCisgICAgaWYgKG1f
d2luZG93c1ZpcnR1YWxLZXlDb2RlID09IDkpIHsKKyAgICAgICAgbV90ZXh0ID0gIlx4OSI7Cisg
ICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg5IjsKKyAgICB9Cit9CisKK2Jvb2wgUGxhdGZv
cm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIGZ1bmN0aW9ucyBuZXcgdG8gRmVi
LTE5IHRpcCBvZiB0cmVlIG1lcmdlOgordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2Ft
YmlndWF0ZUtleURvd25FdmVudChUeXBlIHR5cGUsIGJvb2wgYmFja3dhcmRDb21wYXRpYmlsaXR5
TW9kZSkKK3sKKyAgICAvLyBDb3BpZWQgd2l0aCBtb2RpZmljYXRpb24gZnJvbSB0aGUgbWFjIHBv
cnQuCisgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBBU1NFUlQodHlwZSA9PSBS
YXdLZXlEb3duIHx8IHR5cGUgPT0gQ2hhcik7CisgICAgbV90eXBlID0gdHlwZTsKKyAgICBpZiAo
YmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHR5
cGUgPT0gUmF3S2V5RG93bikgeworICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKKyAgICAgICAg
bV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fa2V5
SWRlbnRpZmllciA9IFN0cmluZygpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9
IDA7CisgICAgfQorfQorCit9ICAgLy8gV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL0tleWJvYXJkQ29kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Fu
ZHJvaWQvS2V5Ym9hcmRDb2Rlcy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL0tleWJvYXJkQ29kZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBLZXlib2FyZENvZGVz
X0gKKyNkZWZpbmUgS2V5Ym9hcmRDb2Rlc19ICisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
VktfTEJVVFRPTiAoMDEpIExlZnQgbW91c2UgYnV0dG9uCisvLyBWS19SQlVUVE9OICgwMikgUmln
aHQgbW91c2UgYnV0dG9uCisvLyBWS19DQU5DRUwgKDAzKSBDb250cm9sLWJyZWFrIHByb2Nlc3Np
bmcKKy8vIFZLX01CVVRUT04gKDA0KSBNaWRkbGUgbW91c2UgYnV0dG9uICh0aHJlZS1idXR0b24g
bW91c2UpCisvLyBWS19YQlVUVE9OMSAoMDUpCisvLyBWS19YQlVUVE9OMiAoMDYpCisKKy8vIFZL
X0JBQ0sgKDA4KSBCQUNLU1BBQ0Uga2V5Citjb25zdCBpbnQgVktfQkFDSyA9IDB4MDg7CisKKy8v
IFZLX1RBQiAoMDkpIFRBQiBrZXkKK2NvbnN0IGludCBWS19UQUIgPSAweDA5OworCisvLyBWS19D
TEVBUiAoMEMpIENMRUFSIGtleQorY29uc3QgaW50IFZLX0NMRUFSID0gMHgwQzsKKworLy8gVktf
UkVUVVJOICgwRCkKK2NvbnN0IGludCBWS19SRVRVUk4gPSAweDBEOworCisvLyBWS19TSElGVCAo
MTApIFNISUZUIGtleQorY29uc3QgaW50IFZLX1NISUZUID0gMHgxMDsKKworLy8gVktfQ09OVFJP
TCAoMTEpIENUUkwga2V5Citjb25zdCBpbnQgVktfQ09OVFJPTCA9IDB4MTE7CisKKy8vIFZLX01F
TlUgKDEyKSBBTFQga2V5Citjb25zdCBpbnQgVktfTUVOVSA9IDB4MTI7CisKKy8vIFZLX1BBVVNF
ICgxMykgUEFVU0Uga2V5Citjb25zdCBpbnQgVktfUEFVU0UgPSAweDEzOworCisvLyBWS19DQVBJ
VEFMICgxNCkgQ0FQUyBMT0NLIGtleQorY29uc3QgaW50IFZLX0NBUElUQUwgPSAweDE0OworCisv
LyBWS19LQU5BICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKK2NvbnN0
IGludCBWS19LQU5BID0gMHgxNTsKKworLy8gVktfSEFOR1VFTCAoMTUpIElNRSBIYW5ndWVsIG1v
ZGUgKG1haW50YWluZWQgZm9yIGNvbXBhdGliaWxpdHk7IHVzZSBWS19IQU5HVUwpCisvLyBWS19I
QU5HVUwgKDE1KSBJTUUgSGFuZ3VsIG1vZGUKK2NvbnN0IGludCBWS19IQU5HVUwgPSAweDE1Owor
CisvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCitjb25zdCBpbnQgVktfSlVOSkEgPSAw
eDE3OworCisvLyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCitjb25zdCBpbnQgVktfRklO
QUwgPSAweDE4OworCisvLyBWS19IQU5KQSAoMTkpIElNRSBIYW5qYSBtb2RlCitjb25zdCBpbnQg
VktfSEFOSkEgPSAweDE5OworCisvLyBWS19LQU5KSSAoMTkpIElNRSBLYW5qaSBtb2RlCitjb25z
dCBpbnQgVktfS0FOSkkgPSAweDE5OworCisvLyBWS19FU0NBUEUgKDFCKSBFU0Mga2V5Citjb25z
dCBpbnQgVktfRVNDQVBFID0gMHgxQjsKKworLy8gVktfQ09OVkVSVCAoMUMpIElNRSBjb252ZXJ0
Citjb25zdCBpbnQgVktfQ09OVkVSVCA9IDB4MUM7CisKKy8vIFZLX05PTkNPTlZFUlQgKDFEKSBJ
TUUgbm9uY29udmVydAorY29uc3QgaW50IFZLX05PTkNPTlZFUlQgPSAweDFEOworCisvLyBWS19B
Q0NFUFQgKDFFKSBJTUUgYWNjZXB0Citjb25zdCBpbnQgVktfQUNDRVBUID0gMHgxRTsKKworLy8g
VktfTU9ERUNIQU5HRSAoMUYpIElNRSBtb2RlIGNoYW5nZSByZXF1ZXN0Citjb25zdCBpbnQgVktf
TU9ERUNIQU5HRSA9IDB4MUY7CisKKy8vIFZLX1NQQUNFICgyMCkgU1BBQ0VCQVIKK2NvbnN0IGlu
dCBWS19TUEFDRSA9IDB4MjA7CisKKy8vIFZLX1BSSU9SICgyMSkgUEFHRSBVUCBrZXkKK2NvbnN0
IGludCBWS19QUklPUiA9IDB4MjE7CisKKy8vIFZLX05FWFQgKDIyKSBQQUdFIERPV04ga2V5Citj
b25zdCBpbnQgVktfTkVYVCA9IDB4MjI7CisKKy8vIFZLX0VORCAoMjMpIEVORCBrZXkKK2NvbnN0
IGludCBWS19FTkQgPSAweDIzOworCisvLyBWS19IT01FICgyNCkgSE9NRSBrZXkKK2NvbnN0IGlu
dCBWS19IT01FID0gMHgyNDsKKworLy8gVktfTEVGVCAoMjUpIExFRlQgQVJST1cga2V5Citjb25z
dCBpbnQgVktfTEVGVCA9IDB4MjU7CisKKy8vIFZLX1VQICgyNikgVVAgQVJST1cga2V5Citjb25z
dCBpbnQgVktfVVAgPSAweDI2OworCisvLyBWS19SSUdIVCAoMjcpIFJJR0hUIEFSUk9XIGtleQor
Y29uc3QgaW50IFZLX1JJR0hUID0gMHgyNzsKKworLy8gVktfRE9XTiAoMjgpIERPV04gQVJST1cg
a2V5Citjb25zdCBpbnQgVktfRE9XTiA9IDB4Mjg7CisKKy8vIFZLX1NFTEVDVCAoMjkpIFNFTEVD
VCBrZXkKK2NvbnN0IGludCBWS19TRUxFQ1QgPSAweDI5OworCisvLyBWS19QUklOVCAoMkEpIFBS
SU5UIGtleQorY29uc3QgaW50IFZLX1BSSU5UID0gMHgyQTsKKworLy8gVktfRVhFQ1VURSAoMkIp
IEVYRUNVVEUga2V5Citjb25zdCBpbnQgVktfRVhFQ1VURSA9IDB4MkI7CisKKy8vIFZLX1NOQVBT
SE9UICgyQykgUFJJTlQgU0NSRUVOIGtleQorY29uc3QgaW50IFZLX1NOQVBTSE9UID0gMHgyQzsK
KworLy8gVktfSU5TRVJUICgyRCkgSU5TIGtleQorY29uc3QgaW50IFZLX0lOU0VSVCA9IDB4MkQ7
CisKKy8vIFZLX0RFTEVURSAoMkUpIERFTCBrZXkKK2NvbnN0IGludCBWS19ERUxFVEUgPSAweDJF
OworCisvLyBWS19IRUxQICgyRikgSEVMUCBrZXkKK2NvbnN0IGludCBWS19IRUxQID0gMHgyRjsK
KworLy8gKDMwKSAwIGtleQorY29uc3QgaW50IFZLXzAgPSAweDMwOworCisvLyAoMzEpIDEga2V5
Citjb25zdCBpbnQgVktfMSA9IDB4MzE7CisKKy8vICgzMikgMiBrZXkKK2NvbnN0IGludCBWS18y
ID0gMHgzMjsKKworLy8gKDMzKSAzIGtleQorY29uc3QgaW50IFZLXzMgPSAweDMzOworCisvLyAo
MzQpIDQga2V5Citjb25zdCBpbnQgVktfNCA9IDB4MzQ7CisKKy8vICgzNSkgNSBrZXk7CisKK2Nv
bnN0IGludCBWS181ID0gMHgzNTsKKworLy8gKDM2KSA2IGtleQorY29uc3QgaW50IFZLXzYgPSAw
eDM2OworCisvLyAoMzcpIDcga2V5Citjb25zdCBpbnQgVktfNyA9IDB4Mzc7CisKKy8vICgzOCkg
OCBrZXkKK2NvbnN0IGludCBWS184ID0gMHgzODsKKworLy8gKDM5KSA5IGtleQorY29uc3QgaW50
IFZLXzkgPSAweDM5OworCisvLyAoNDEpIEEga2V5Citjb25zdCBpbnQgVktfQSA9IDB4NDE7CisK
Ky8vICg0MikgQiBrZXkKK2NvbnN0IGludCBWS19CID0gMHg0MjsKKworLy8gKDQzKSBDIGtleQor
Y29uc3QgaW50IFZLX0MgPSAweDQzOworCisvLyAoNDQpIEQga2V5Citjb25zdCBpbnQgVktfRCA9
IDB4NDQ7CisKKy8vICg0NSkgRSBrZXkKK2NvbnN0IGludCBWS19FID0gMHg0NTsKKworLy8gKDQ2
KSBGIGtleQorY29uc3QgaW50IFZLX0YgPSAweDQ2OworCisvLyAoNDcpIEcga2V5Citjb25zdCBp
bnQgVktfRyA9IDB4NDc7CisKKy8vICg0OCkgSCBrZXkKK2NvbnN0IGludCBWS19IID0gMHg0ODsK
KworLy8gKDQ5KSBJIGtleQorY29uc3QgaW50IFZLX0kgPSAweDQ5OworCisvLyAoNEEpIEoga2V5
Citjb25zdCBpbnQgVktfSiA9IDB4NEE7CisKKy8vICg0QikgSyBrZXkKK2NvbnN0IGludCBWS19L
ID0gMHg0QjsKKworLy8gKDRDKSBMIGtleQorY29uc3QgaW50IFZLX0wgPSAweDRDOworCisvLyAo
NEQpIE0ga2V5Citjb25zdCBpbnQgVktfTSA9IDB4NEQ7CisKKy8vICg0RSkgTiBrZXkKK2NvbnN0
IGludCBWS19OID0gMHg0RTsKKworLy8gKDRGKSBPIGtleQorY29uc3QgaW50IFZLX08gPSAweDRG
OworCisvLyAoNTApIFAga2V5Citjb25zdCBpbnQgVktfUCA9IDB4NTA7CisKKy8vICg1MSkgUSBr
ZXkKK2NvbnN0IGludCBWS19RID0gMHg1MTsKKworLy8gKDUyKSBSIGtleQorY29uc3QgaW50IFZL
X1IgPSAweDUyOworCisvLyAoNTMpIFMga2V5Citjb25zdCBpbnQgVktfUyA9IDB4NTM7CisKKy8v
ICg1NCkgVCBrZXkKK2NvbnN0IGludCBWS19UID0gMHg1NDsKKworLy8gKDU1KSBVIGtleQorY29u
c3QgaW50IFZLX1UgPSAweDU1OworCisvLyAoNTYpIFYga2V5Citjb25zdCBpbnQgVktfViA9IDB4
NTY7CisKKy8vICg1NykgVyBrZXkKK2NvbnN0IGludCBWS19XID0gMHg1NzsKKworLy8gKDU4KSBY
IGtleQorY29uc3QgaW50IFZLX1ggPSAweDU4OworCisvLyAoNTkpIFkga2V5Citjb25zdCBpbnQg
VktfWSA9IDB4NTk7CisKKy8vICg1QSkgWiBrZXkKK2NvbnN0IGludCBWS19aID0gMHg1QTsKKwor
Ly8gVktfTFdJTiAoNUIpIExlZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtleWJv
YXJkKQorY29uc3QgaW50IFZLX0xXSU4gPSAweDVCOworCisvLyBWS19SV0lOICg1QykgUmlnaHQg
V2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCitjb25zdCBpbnQgVktfUldJTiA9IDB4NUM7
CisKKy8vIFZLX0FQUFMgKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQor
Y29uc3QgaW50IFZLX0FQUFMgPSAweDVEOworCisvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNs
ZWVwIGtleQorY29uc3QgaW50IFZLX1NMRUVQID0gMHg1RjsKKworLy8gVktfTlVNUEFEMCAoNjAp
IE51bWVyaWMga2V5cGFkIDAga2V5Citjb25zdCBpbnQgVktfTlVNUEFEMCA9IDB4NjA7CisKKy8v
IFZLX05VTVBBRDEgKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorY29uc3QgaW50IFZLX05VTVBB
RDEgPSAweDYxOworCisvLyBWS19OVU1QQUQyICg2MikgTnVtZXJpYyBrZXlwYWQgMiBrZXkKK2Nv
bnN0IGludCBWS19OVU1QQUQyID0gMHg2MjsKKworLy8gVktfTlVNUEFEMyAoNjMpIE51bWVyaWMg
a2V5cGFkIDMga2V5Citjb25zdCBpbnQgVktfTlVNUEFEMyA9IDB4NjM7CisKKy8vIFZLX05VTVBB
RDQgKDY0KSBOdW1lcmljIGtleXBhZCA0IGtleQorY29uc3QgaW50IFZLX05VTVBBRDQgPSAweDY0
OworCisvLyBWS19OVU1QQUQ1ICg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKK2NvbnN0IGludCBW
S19OVU1QQUQ1ID0gMHg2NTsKKworLy8gVktfTlVNUEFENiAoNjYpIE51bWVyaWMga2V5cGFkIDYg
a2V5Citjb25zdCBpbnQgVktfTlVNUEFENiA9IDB4NjY7CisKKy8vIFZLX05VTVBBRDcgKDY3KSBO
dW1lcmljIGtleXBhZCA3IGtleQorY29uc3QgaW50IFZLX05VTVBBRDcgPSAweDY3OworCisvLyBW
S19OVU1QQUQ4ICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ4
ID0gMHg2ODsKKworLy8gVktfTlVNUEFEOSAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5Citjb25z
dCBpbnQgVktfTlVNUEFEOSA9IDB4Njk7CisKKy8vIFZLX01VTFRJUExZICg2QSkgTXVsdGlwbHkg
a2V5Citjb25zdCBpbnQgVktfTVVMVElQTFkgPSAweDZBOworCisvLyBWS19BREQgKDZCKSBBZGQg
a2V5Citjb25zdCBpbnQgVktfQUREID0gMHg2QjsKKworLy8gVktfU0VQQVJBVE9SICg2QykgU2Vw
YXJhdG9yIGtleQorY29uc3QgaW50IFZLX1NFUEFSQVRPUiA9IDB4NkM7CisKKy8vIFZLX1NVQlRS
QUNUICg2RCkgU3VidHJhY3Qga2V5Citjb25zdCBpbnQgVktfU1VCVFJBQ1QgPSAweDZEOworCisv
LyBWS19ERUNJTUFMICg2RSkgRGVjaW1hbCBrZXkKK2NvbnN0IGludCBWS19ERUNJTUFMID0gMHg2
RTsKKworLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQorY29uc3QgaW50IFZLX0RJVklERSA9
IDB4NkY7CisKKy8vIFZLX0YxICg3MCkgRjEga2V5Citjb25zdCBpbnQgVktfRjEgPSAweDcwOwor
CisvLyBWS19GMiAoNzEpIEYyIGtleQorY29uc3QgaW50IFZLX0YyID0gMHg3MTsKKworLy8gVktf
RjMgKDcyKSBGMyBrZXkKK2NvbnN0IGludCBWS19GMyA9IDB4NzI7CisKKy8vIFZLX0Y0ICg3Mykg
RjQga2V5Citjb25zdCBpbnQgVktfRjQgPSAweDczOworCisvLyBWS19GNSAoNzQpIEY1IGtleQor
Y29uc3QgaW50IFZLX0Y1ID0gMHg3NDsKKworLy8gVktfRjYgKDc1KSBGNiBrZXkKK2NvbnN0IGlu
dCBWS19GNiA9IDB4NzU7CisKKy8vIFZLX0Y3ICg3NikgRjcga2V5Citjb25zdCBpbnQgVktfRjcg
PSAweDc2OworCisvLyBWS19GOCAoNzcpIEY4IGtleQorY29uc3QgaW50IFZLX0Y4ID0gMHg3NzsK
KworLy8gVktfRjkgKDc4KSBGOSBrZXkKK2NvbnN0IGludCBWS19GOSA9IDB4Nzg7CisKKy8vIFZL
X0YxMCAoNzkpIEYxMCBrZXkKK2NvbnN0IGludCBWS19GMTAgPSAweDc5OworCisvLyBWS19GMTEg
KDdBKSBGMTEga2V5Citjb25zdCBpbnQgVktfRjExID0gMHg3QTsKKworLy8gVktfRjEyICg3Qikg
RjEyIGtleQorY29uc3QgaW50IFZLX0YxMiA9IDB4N0I7CisKKy8vIFZLX0YxMyAoN0MpIEYxMyBr
ZXkKK2NvbnN0IGludCBWS19GMTMgPSAweDdDOworCisvLyBWS19GMTQgKDdEKSBGMTQga2V5Citj
b25zdCBpbnQgVktfRjE0ID0gMHg3RDsKKworLy8gVktfRjE1ICg3RSkgRjE1IGtleQorY29uc3Qg
aW50IFZLX0YxNSA9IDB4N0U7CisKKy8vIFZLX0YxNiAoN0YpIEYxNiBrZXkKK2NvbnN0IGludCBW
S19GMTYgPSAweDdGOworCisvLyBWS19GMTcgKDgwSCkgRjE3IGtleQorY29uc3QgaW50IFZLX0Yx
NyA9IDB4ODA7CisKKy8vIFZLX0YxOCAoODFIKSBGMTgga2V5Citjb25zdCBpbnQgVktfRjE4ID0g
MHg4MTsKKworLy8gVktfRjE5ICg4MkgpIEYxOSBrZXkKK2NvbnN0IGludCBWS19GMTkgPSAweDgy
OworCisvLyBWS19GMjAgKDgzSCkgRjIwIGtleQorY29uc3QgaW50IFZLX0YyMCA9IDB4ODM7CisK
Ky8vIFZLX0YyMSAoODRIKSBGMjEga2V5Citjb25zdCBpbnQgVktfRjIxID0gMHg4NDsKKworLy8g
VktfRjIyICg4NUgpIEYyMiBrZXkKK2NvbnN0IGludCBWS19GMjIgPSAweDg1OworCisvLyBWS19G
MjMgKDg2SCkgRjIzIGtleQorY29uc3QgaW50IFZLX0YyMyA9IDB4ODY7CisKKy8vIFZLX0YyNCAo
ODdIKSBGMjQga2V5Citjb25zdCBpbnQgVktfRjI0ID0gMHg4NzsKKworLy8gVktfTlVNTE9DSyAo
OTApIE5VTSBMT0NLIGtleQorY29uc3QgaW50IFZLX05VTUxPQ0sgPSAweDkwOworCisvLyBWS19T
Q1JPTEwgKDkxKSBTQ1JPTEwgTE9DSyBrZXkKK2NvbnN0IGludCBWS19TQ1JPTEwgPSAweDkxOwor
CisvLyBWS19MU0hJRlQgKEEwKSBMZWZ0IFNISUZUIGtleQorY29uc3QgaW50IFZLX0xTSElGVCA9
IDB4QTA7CisKKy8vIFZLX1JTSElGVCAoQTEpIFJpZ2h0IFNISUZUIGtleQorY29uc3QgaW50IFZL
X1JTSElGVCA9IDB4QTE7CisKKy8vIFZLX0xDT05UUk9MIChBMikgTGVmdCBDT05UUk9MIGtleQor
Y29uc3QgaW50IFZLX0xDT05UUk9MID0gMHhBMjsKKworLy8gVktfUkNPTlRST0wgKEEzKSBSaWdo
dCBDT05UUk9MIGtleQorY29uc3QgaW50IFZLX1JDT05UUk9MID0gMHhBMzsKKworLy8gVktfTE1F
TlUgKEE0KSBMZWZ0IE1FTlUga2V5Citjb25zdCBpbnQgVktfTE1FTlUgPSAweEE0OworCisvLyBW
S19STUVOVSAoQTUpIFJpZ2h0IE1FTlUga2V5Citjb25zdCBpbnQgVktfUk1FTlUgPSAweEE1Owor
CisvLyBWS19CUk9XU0VSX0JBQ0sgKEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBr
ZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX0JBQ0sgPSAweEE2OworCisvLyBWS19CUk9XU0VSX0ZP
UldBUkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKK2NvbnN0IGlu
dCBWS19CUk9XU0VSX0ZPUldBUkQgPSAweEE3OworCisvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4
KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgUmVmcmVzaCBrZXkKK2NvbnN0IGludCBWS19CUk9X
U0VSX1JFRlJFU0ggPSAweEE4OworCisvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIw
MDAvWFA6IEJyb3dzZXIgU3RvcCBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX1NUT1AgPSAweEE5
OworCisvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBT
ZWFyY2gga2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9TRUFSQ0ggPSAweEFBOworCisvLyBWS19C
Uk9XU0VSX0ZBVk9SSVRFUyAoQUIpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMg
a2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9GQVZPUklURVMgPSAweEFCOworCisvLyBWS19CUk9X
U0VSX0hPTUUgKEFDKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhvbWUga2V5
Citjb25zdCBpbnQgVktfQlJPV1NFUl9IT01FID0gMHhBQzsKKworLy8gVktfVk9MVU1FX01VVEUg
KEFEKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQorY29uc3QgaW50IFZLX1ZPTFVN
RV9NVVRFID0gMHhBRDsKKworLy8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6
IFZvbHVtZSBEb3duIGtleQorY29uc3QgaW50IFZLX1ZPTFVNRV9ET1dOID0gMHhBRTsKKworLy8g
VktfVk9MVU1FX1VQIChBRikgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgVXAga2V5Citjb25zdCBp
bnQgVktfVk9MVU1FX1VQID0gMHhBRjsKKworLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdp
bmRvd3MgMjAwMC9YUDogTmV4dCBUcmFjayBrZXkKK2NvbnN0IGludCBWS19NRURJQV9ORVhUX1RS
QUNLID0gMHhCMDsKKworLy8gVktfTUVESUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9Y
UDogUHJldmlvdXMgVHJhY2sga2V5Citjb25zdCBpbnQgVktfTUVESUFfUFJFVl9UUkFDSyA9IDB4
QjE7CisKKy8vIFZLX01FRElBX1NUT1AgKEIyKSBXaW5kb3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEg
a2V5Citjb25zdCBpbnQgVktfTUVESUFfU1RPUCA9IDB4QjI7CisKKy8vIFZLX01FRElBX1BMQVlf
UEFVU0UgKEIzKSBXaW5kb3dzIDIwMDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Citjb25zdCBp
bnQgVktfTUVESUFfUExBWV9QQVVTRSA9IDB4QjM7CisKKy8vIFZLX0xBVU5DSF9NQUlMIChCNCkg
V2luZG93cyAyMDAwL1hQOiBTdGFydCBNYWlsIGtleQorY29uc3QgaW50IFZLX01FRElBX0xBVU5D
SF9NQUlMID0gMHhCNDsKKworLy8gVktfTEFVTkNIX01FRElBX1NFTEVDVCAoQjUpIFdpbmRvd3Mg
MjAwMC9YUDogU2VsZWN0IE1lZGlhIGtleQorY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9NRURJ
QV9TRUxFQ1QgPSAweEI1OworCisvLyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAwMC9Y
UDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkKK2NvbnN0IGludCBWS19NRURJQV9MQVVOQ0hfQVBQ
MSA9IDB4QjY7CisKKy8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2luZG93cyAyMDAwL1hQOiBTdGFy
dCBBcHBsaWNhdGlvbiAyIGtleQorY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9BUFAyID0gMHhC
NzsKKworLy8gVktfT0VNXzEgKEJBKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7
IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3Rh
bmRhcmQga2V5Ym9hcmQsIHRoZSAnOzonIGtleQorY29uc3QgaW50IFZLX09FTV8xID0gMHhCQTsK
KworLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9y
ZWdpb24sIHRoZSAnKycga2V5Citjb25zdCBpbnQgVktfT0VNX1BMVVMgPSAweEJCOworCisvLyBW
S19PRU1fQ09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24s
IHRoZSAnLCcga2V5Citjb25zdCBpbnQgVktfT0VNX0NPTU1BID0gMHhCQzsKKworLy8gVktfT0VN
X01JTlVTIChCRCkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUg
Jy0nIGtleQorY29uc3QgaW50IFZLX09FTV9NSU5VUyA9IDB4QkQ7CisKKy8vIFZLX09FTV9QRVJJ
T0QgKEJFKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicg
a2V5Citjb25zdCBpbnQgVktfT0VNX1BFUklPRCA9IDB4QkU7CisKKy8vIFZLX09FTV8yIChCRikg
VXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2Fy
ZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/
JyBrZXkKK2NvbnN0IGludCBWS19PRU1fMiA9IDB4QkY7CisKKy8vIFZLX09FTV8zIChDMCkgVXNl
ZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4g
V2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBr
ZXkKK2NvbnN0IGludCBWS19PRU1fMyA9IDB4QzA7CisKKy8vIFZLX09FTV80IChEQikgVXNlZCBm
b3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2lu
ZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkK
K2NvbnN0IGludCBWS19PRU1fNCA9IDB4REI7CisKKy8vIFZLX09FTV81IChEQykgVXNlZCBmb3Ig
bWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93
cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKK2Nv
bnN0IGludCBWS19PRU1fNSA9IDB4REM7CisKKy8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAy
MDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKK2NvbnN0
IGludCBWS19PRU1fNiA9IDB4REQ7CisKKy8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2Vs
bGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAw
L1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3Vi
bGUtcXVvdGUnIGtleQorY29uc3QgaW50IFZLX09FTV83ID0gMHhERTsKKworLy8gVktfT0VNXzgg
KERGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtl
eWJvYXJkLgorY29uc3QgaW50IFZLX09FTV84ID0gMHhERjsKKworLy8gVktfT0VNXzEwMiAoRTIp
IFdpbmRvd3MgMjAwMC9YUDogRWl0aGVyIHRoZSBhbmdsZSBicmFja2V0IGtleSBvciB0aGUgYmFj
a3NsYXNoIGtleSBvbiB0aGUgUlQgMTAyLWtleSBrZXlib2FyZAorY29uc3QgaW50IFZLX09FTV8x
MDIgPSAweEUyOworCisvLyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5NS85OC9NZSwgV2lu
ZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5Citjb25zdCBpbnQg
VktfUFJPQ0VTU0tFWSA9IDB4RTU7CisKKy8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9Y
UDogVXNlZCB0byBwYXNzIFVuaWNvZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ry
b2tlcy4gVGhlIFZLX1BBQ0tFVCBrZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1
YWwgS2V5IHZhbHVlIHVzZWQgZm9yIG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9y
ZSBpbmZvcm1hdGlvbiwgc2VlIFJlbWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZ
RE9XTiwgYW5kIFdNX0tFWVVQCitjb25zdCBpbnQgVktfUEFDS0VUID0gMHhFNzsKKworLy8gVktf
QVRUTiAoRjYpIEF0dG4ga2V5Citjb25zdCBpbnQgVktfQVRUTiA9IDB4RjY7CisKKy8vIFZLX0NS
U0VMIChGNykgQ3JTZWwga2V5Citjb25zdCBpbnQgVktfQ1JTRUwgPSAweEY3OworCisvLyBWS19F
WFNFTCAoRjgpIEV4U2VsIGtleQorY29uc3QgaW50IFZLX0VYU0VMID0gMHhGODsKKworLy8gVktf
RVJFT0YgKEY5KSBFcmFzZSBFT0Yga2V5Citjb25zdCBpbnQgVktfRVJFT0YgPSAweEY5OworCisv
LyBWS19QTEFZIChGQSkgUGxheSBrZXkKK2NvbnN0IGludCBWS19QTEFZID0gMHhGQTsKKworLy8g
VktfWk9PTSAoRkIpIFpvb20ga2V5Citjb25zdCBpbnQgVktfWk9PTSA9IDB4RkI7CisKKy8vIFZL
X05PTkFNRSAoRkMpIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCitjb25zdCBpbnQgVktfTk9OQU1F
ID0gMHhGQzsKKworLy8gVktfUEExIChGRCkgUEExIGtleQorY29uc3QgaW50IFZLX1BBMSA9IDB4
RkQ7CisKKy8vIFZLX09FTV9DTEVBUiAoRkUpIENsZWFyIGtleQorY29uc3QgaW50IFZLX09FTV9D
TEVBUiA9IDB4RkU7CisKK2NvbnN0IGludCBWS19VTktOT1dOID0gMDsKKworfQorCisjZW5kaWYg
Ly8gS2V5Ym9hcmRDb2Rlc19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvTG9jYWxp
emVkU3RyaW5nc0FuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5k
cm9pZC9Mb2NhbGl6ZWRTdHJpbmdzQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2FuZHJvaWQvTG9jYWxpemVkU3RyaW5nc0FuZHJvaWQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9w
ZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1t
ZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiSW5zcGVjdCBFbGVtZW50Iik7Cit9
CisKK1N0cmluZyB1bmtub3duRmlsZVNpemVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOCgiVW5rbm93biIpOworfQorCitTdHJpbmcgaW1hZ2VUaXRsZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Fu
ZHJvaWQvUG9wdXBNZW51QW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9hbmRyb2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1w
bGVtZW50YXRpb24gZm9yIDxzZWxlY3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCisgKgorICogQ29w
eXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQb3B1cE1lbnUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBOb3cgd2Ug
aGFuZGxlIGFsbCBvZiB0aGlzIGluIFdlYlZpZXdDb3JlLmNwcAorUG9wdXBNZW51OjpQb3B1cE1l
bnUoUG9wdXBNZW51Q2xpZW50KiBtZW51TGlzdCkgOiBtX3BvcHVwQ2xpZW50KG1lbnVMaXN0KQor
eworfQorCitQb3B1cE1lbnU6On5Qb3B1cE1lbnUoKQoreworfQorCit2b2lkIFBvcHVwTWVudTo6
c2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50KQoreworCit9CisKK3ZvaWQgUG9w
dXBNZW51OjpoaWRlKCkKK3sKK30KKwordm9pZCBQb3B1cE1lbnU6OnVwZGF0ZUZyb21FbGVtZW50
KCkgCit7Cit9CisKKy8vIGZ1bmN0aW9ucyBuZXcgdG8gSnVuLTA3IHRpcCBvZiB0cmVlIG1lcmdl
OgorYm9vbCBQb3B1cE1lbnU6Oml0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkgeyByZXR1
cm4gZmFsc2U7IH0KKworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUmVuZGVy
VGhlbWVBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
UmVuZGVyVGhlbWVBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9q
ZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUFu
ZHJvaWQuaCIKKworI2luY2x1ZGUgIlJlbmRlclNraW5BbmRyb2lkLmgiCisjaW5jbHVkZSAiUmVu
ZGVyU2tpbkJ1dHRvbi5oIgorI2luY2x1ZGUgIlJlbmRlclNraW5Db21iby5oIgorI2luY2x1ZGUg
IlJlbmRlclNraW5SYWRpby5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCIKKworI2luY2x1ZGUgIlNrQ2FudmFzLmgi
CisKKyNkZWZpbmUgTUFYX0NPTUJPX0hFSUdIVCAyMAorCisvLyBBZGQgYSBjb25zdGFudCBhbW91
bnQgb2YgcGFkZGluZyB0byB0aGUgdGV4dHNpemUgdG8gZ2V0IHRoZSBmaW5hbCBoZWlnaHQgb2Yg
YnV0dG9ucywKKy8vIHNvIHRoYXQgb3VyIGJ1dHRvbiBpbWFnZXMgYXJlIGxhcmdlIGVub3VnaCB0
byBwcm9wZXJseSBmaXQgdGhlIHRleHQuCisjZGVmaW5lIEJVVFRPTl9QQURESU5HIDE4CisKKy8v
IEFkZCBwYWRkaW5nIHRvIHRoZSBmb250U2l6ZSBvZiBMaXN0Qm94ZXMgdG8gZ2V0IHRoZWlyIG1h
eGltdW0gc2l6ZXMuCisvLyBMaXN0Ym94ZXMgb2Z0ZW4gaGF2ZSBhIHNwZWNpZmllZCBzaXplLiAg
U2luY2Ugd2UgY2hhbmdlIHRoZW0gaW50byBkcm9wZG93bnMsCisvLyB3ZSB3YW50IGEgbXVjaCBz
bWFsbGVyIGhlaWdodCwgd2hpY2ggZW5jb21wYXNzZXMgdGhlIHRleHQuCisjZGVmaW5lIExJU1RC
T1hfUEFERElORyA1CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFNrQ2FudmFzKiBn
ZXRDYW52YXNGcm9tSW5mbyhjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaW5mbykKK3sK
KyAgICByZXR1cm4gaW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+bUNhbnZhczsKK30K
KworLyogIEhlbHBlciBmdW5jdGlvbiB0aGF0IHBhaW50cyB0aGUgUmVuZGVyT2JqZWN0CisgKiAg
cGFyYW10ZXJzOgorICogICAgICB0aGUgc2tpbiB0byB1c2UsIAorICogICAgICB0aGUgb2JqZWN0
IHRvIGJlIHBhaW50ZWQsIHRoZSBQYWludEluZm8sIGZyb20gd2hpY2ggd2UgZ2V0IHRoZSBjYW52
YXMsIHRoZSBib3VuZGluZyByZWN0YW5nbGUsIAorICogIHJldHVybnMgZmFsc2UsIG1lYW5pbmcg
bm8gb25lIGVsc2UgaGFzIHRvIHBhaW50IGl0CisqLworc3RhdGljIGJvb2wgcGFpbnRCcnVzaChS
ZW5kZXJTa2luQW5kcm9pZCogclNraW4sIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksICBjb25zdCBJbnRSZWN0JiBpcikKK3sKKyAgICBOb2RlKiBlbGVt
ZW50ID0gby0+ZWxlbWVudCgpOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnZXRDYW52YXNGcm9t
SW5mbyhpKTsKKyAgICBjYW52YXMtPnNhdmUoKTsKKyAgICBjYW52YXMtPnRyYW5zbGF0ZShTa0lu
dFRvU2NhbGFyKGlyLngoKSksIFNrSW50VG9TY2FsYXIoaXIueSgpKSk7CisgICAgclNraW4tPnNl
dERpbShpci53aWR0aCgpLCBpci5oZWlnaHQoKSk7CisgICAgclNraW4tPm5vdGlmeVN0YXRlKGVs
ZW1lbnQpOworICAgIHJTa2luLT5kcmF3KGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIGNhbnZhcy0+cmVzdG9yZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworCitSZW5kZXJU
aGVtZSogdGhlbWUoKQoreworICAgIHN0YXRpYyBSZW5kZXJUaGVtZUFuZHJvaWQgYW5kcm9pZFRo
ZW1lOworICAgIHJldHVybiAmYW5kcm9pZFRoZW1lOworfQorCitSZW5kZXJUaGVtZUFuZHJvaWQ6
OlJlbmRlclRoZW1lQW5kcm9pZCgpCit7CisgICAgbV9yYWRpbyA9IG5ldyBSZW5kZXJTa2luUmFk
aW8oZmFsc2UpOworICAgIG1fY2hlY2tib3ggPSBuZXcgUmVuZGVyU2tpblJhZGlvKHRydWUpOwor
ICAgIG1fY29tYm8gPSBuZXcgUmVuZGVyU2tpbkNvbWJvKCk7Cit9CisKK1JlbmRlclRoZW1lQW5k
cm9pZDo6flJlbmRlclRoZW1lQW5kcm9pZCgpCit7CisgICAgZGVsZXRlIG1fcmFkaW87CisgICAg
ZGVsZXRlIG1fY2hlY2tib3g7CisgICAgZGVsZXRlIG1fY29tYm87Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVBbmRyb2lkOjpjbG9zZSgpCit7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpz
dGF0ZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiBvLCBDb250cm9sU3RhdGUgc3RhdGUpIGNvbnN0Cit7
CisgICAgaWYgKENoZWNrZWRTdGF0ZSA9PSBzdGF0ZSkgeworICAgICAgICBvLT5yZXBhaW50KCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Nv
bG9yIFJlbmRlclRoZW1lQW5kcm9pZDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcig0NiwgMjUxLCAwKTsKK30KKworQ29s
b3IgUmVuZGVyVGhlbWVBbmRyb2lkOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDAsIDI1NSk7Cit9
CisKK0NvbG9yIFJlbmRlclRoZW1lQW5kcm9pZDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcjo6YmxhY2s7Cit9CisKK0Nv
bG9yIFJlbmRlclRoZW1lQW5kcm9pZDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjpibGFjazsKK30KKworQ29sb3Ig
UmVuZGVyVGhlbWVBbmRyb2lkOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIENvbG9yKDE5MiwgMTkyLCAxOTIpOworfQorCitpbnQgUmVuZGVy
VGhlbWVBbmRyb2lkOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqKSBj
b25zdAoreworICAgIC8vIEZyb20gdGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgZnVuY3Rpb24gaW4g
UmVuZGVyVGhlbWUuaDoKKyAgICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBv
c2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9sLiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBh
IGJhc2VsaW5lCisgICAgLy8gcG9zaXRpb24gY2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWlu
aW5nIGNoaWxkIGNvbnRlbnQuIENoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1w
bGVzIG9mCisgICAgLy8gY29udHJvbHMgdGhhdCBuZWVkIHRvIGRvIHRoaXMuCisgICAgLy8KKyAg
ICAvLyBPdXIgY2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBuZWVkIHRvIGJlIG9mZnNldCB0
byBsaW5lIHVwIHByb3Blcmx5LgorICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3Np
dGlvbihvYmopIC0gNTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkZEludHJpbnNp
Y01hcmdpbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIEN1dCBvdXQgdGhl
IGludHJpbnNpYyBtYXJnaW5zIGNvbXBsZXRlbHkgaWYgd2UgZW5kIHVwIHVzaW5nIGEgc21hbGwg
Zm9udCBzaXplCisgICAgaWYgKHN0eWxlLT5mb250U2l6ZSgpIDwgMTEpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICAvLyBJbnRyaW5zaWMgbWFyZ2luIHZhbHVlLgorICAgIGNvbnN0IGludCBt
ID0gMjsKKyAgICAKKyAgICAvLyBGSVhNRTogVXNpbmcgd2lkdGgvaGVpZ2h0IGFsb25lIGFuZCBu
b3QgYWxzbyBkZWFsaW5nIHdpdGggbWluLXdpZHRoL21heC13aWR0aCBpcyBmbGF3ZWQuCisgICAg
aWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0
eWxlLT5tYXJnaW5MZWZ0KCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5M
ZWZ0KExlbmd0aChtLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpblJpZ2h0KCku
cXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5SaWdodChMZW5ndGgobSwgRml4
ZWQpKTsKKyAgICB9CisKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAg
ICAgIGlmIChzdHlsZS0+bWFyZ2luVG9wKCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5z
ZXRNYXJnaW5Ub3AoTGVuZ3RoKG0sIEZpeGVkKSk7CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2lu
Qm90dG9tKCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5Cb3R0b20oTGVu
Z3RoKG0sIEZpeGVkKSk7CisgICAgfQorfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6c3Vw
cG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQoreworICAgIHN3aXRjaCAoYXBwZWFy
YW5jZSkgeworICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIEJ1dHRv
blBhcnQ6CisgICAgICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVz
dEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgLy8gUGFkZGluZyBjb2RlIGlz
IHRha2VuIGZyb20gUmVuZGVyVGhlbWVTYWZhcmkuY3BwCisgICAgLy8gSXQgbWFrZXMgc3VyZSB3
ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGJ1dHRvbiB0ZXh0LgorICAgIGNvbnN0IGludCBw
YWRkaW5nID0gODsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzdHlsZS0+Zm9udFNpemUoKSArIEJV
VFRPTl9QQURESU5HLCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFp
bnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiBpcikKK3sKKyAgICByZXR1cm4gcGFpbnRCcnVzaChtX2NoZWNr
Ym94LCBvLCBpLCBpcik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiBpcikKK3sKKyAgICAvLyBJZiBpdCBpcyBhIGRpc2FibGVkIGJ1dHRvbiwgc2lt
cGx5IHBhaW50IGl0IHRvIHRoZSBtYXN0ZXIgcGljdHVyZS4KKyAgICBOb2RlKiBlbGVtZW50ID0g
by0+ZWxlbWVudCgpOworICAgIGlmICghZWxlbWVudC0+aXNFbmFibGVkKCkpIHsKKyAgICAgICAg
UmVuZGVyU2tpbkJ1dHRvbjo6RHJhdyhnZXRDYW52YXNGcm9tSW5mbyhpKSwgaXIsIFJlbmRlclNr
aW5BbmRyb2lkOjprRGlzYWJsZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFN0b3JlIGFs
bCB0aGUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGluIHRoZSBwbGF0Zm9ybSBjb250ZXh0LgorICAg
ICAgICBpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zdG9yZUJ1dHRvbkluZm8oZWxlbWVu
dCwgaXIpOworICAgIH0KKyAgICAvLyBXZSBhbHdheXMgcmV0dXJuIGZhbHNlIHNvIHdlIGRvIG5v
dCByZXF1ZXN0IHRvIGJlIHJlZHJhd24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlclRoZW1lQW5kcm9pZDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBpcikKK3sKKyAgICByZXR1cm4g
cGFpbnRCcnVzaChtX3JhZGlvLCBvLCBpLCBpcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRy
b2lkOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHN0
eWxlLT5zZXRXaWR0aChMZW5ndGgoMTksIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoMTksIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjpzZXRSYWRp
b1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIFRoaXMgaXMgdGhlIHNh
bWUgYXMgY2hlY2tib3hlcy4KKyAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOworfQorCit2b2lk
IFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29u
c3QKK3sKKyAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUFuZHJvaWQ6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIGlyKQoreworICAgIHJldHVybiB0
cnVlOyAgICAKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdFRleHRBcmVhU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29y
ZTo6RWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgaXIp
Cit7CisgICAgaWYgKG8tPmlzTWVudUxpc3QoKSkgeworICAgICAgICByZXR1cm4gcGFpbnRDb21i
byhvLCBpLCBpcik7CisgICAgfQorICAgIHJldHVybiB0cnVlOyAgICAKK30KKwordm9pZCBSZW5k
ZXJUaGVtZUFuZHJvaWQ6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBh
ZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6
OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgaXIpCit7CisgICAgcmV0dXJuIHRydWU7ICAgIAor
fQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0TGlzdGJveFN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0
Cit7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoUmVuZGVyU2tpbkNvbWJvOjpl
eHRyYVdpZHRoKCksIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldE1heEhlaWdodChMZW5ndGgoc3R5
bGUtPmZvbnRTaXplKCkgKyBMSVNUQk9YX1BBRERJTkcsIEZpeGVkKSk7CisgICAgYWRkSW50cmlu
c2ljTWFyZ2lucyhzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RN
ZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5n
dGgoUmVuZGVyU2tpbkNvbWJvOjpleHRyYVdpZHRoKCksIEZpeGVkKSk7CisgICAgYWRkSW50cmlu
c2ljTWFyZ2lucyhzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludENv
bWJvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksICBj
b25zdCBJbnRSZWN0JiBpcikKK3sKKyAgICBpZiAoby0+c3R5bGUoKSAmJiBvLT5zdHlsZSgpLT5i
YWNrZ3JvdW5kQ29sb3IoKS5hbHBoYSgpID09IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IE5vZGUqIGVsZW1lbnQgPSBvLT5lbGVtZW50KCk7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IGdl
dENhbnZhc0Zyb21JbmZvKGkpOworICAgIG1fY29tYm8tPm5vdGlmeVN0YXRlKGVsZW1lbnQpOwor
ICAgIGNhbnZhcy0+c2F2ZSgpOworICAgIGludCBoZWlnaHQgPSBpci5oZWlnaHQoKTsKKyAgICBp
bnQgeSA9IGlyLnkoKTsKKyAgICAvLyBJZiB0aGUgY29tYm8gYm94IGlzIHRvbyBsYXJnZSwgbGVh
dmUgaXQgYXQgaXRzIG1heCBoZWlnaHQsIGFuZCBjZW50ZXIgaXQuCisgICAgaWYgKGhlaWdodCA+
IE1BWF9DT01CT19IRUlHSFQpIHsKKyAgICAgICAgeSArPSAoaGVpZ2h0IC0gTUFYX0NPTUJPX0hF
SUdIVCkgPj4gMTsKKyAgICAgICAgaGVpZ2h0ID0gTUFYX0NPTUJPX0hFSUdIVDsKKyAgICB9Cisg
ICAgY2FudmFzLT50cmFuc2xhdGUoU2tJbnRUb1NjYWxhcihpci54KCkpLCBTa0ludFRvU2NhbGFy
KHkpKTsKKyAgICBtX2NvbWJvLT5zZXREaW0oaXIud2lkdGgoKSwgaGVpZ2h0KTsKKyAgICBtX2Nv
bWJvLT5kcmF3KGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIGNhbnZhcy0+cmVz
dG9yZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6
OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgaXIpIAoreyAKKyAgICByZXR1cm4gcGFpbnRDb21ibyhv
LCBpLCBpcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgo
UmVuZGVyU2tpbkNvbWJvOjpleHRyYVdpZHRoKCksIEZpeGVkKSk7CisgICAgYWRkSW50cmluc2lj
TWFyZ2lucyhzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludE1lbnVM
aXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIGlyKSAKK3sgCisgICAgcmV0dXJuIHBhaW50Q29tYm8obywgaSwg
aXIpOworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6c3VwcG9ydHNGb2N1c1JpbmcoY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiAoc3R5bGUtPm9wYWNp
dHkoKSA+IDAgJiYgc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSAKKyAgICAgICAgICAgICAgICAgICAg
JiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBUZXh0RmllbGRQYXJ0IAorICAgICAgICAgICAgICAg
ICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNlYXJjaEZpZWxkUGFydCAKKyAgICAgICAg
ICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBUZXh0QXJlYVBhcnQgCisgICAg
ICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gQ2hlY2tib3hQYXJ0Cisg
ICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gUmFkaW9QYXJ0Cisg
ICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gUHVzaEJ1dHRvblBh
cnQKKyAgICAgICAgICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBTcXVhcmVC
dXR0b25QYXJ0CisgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0g
QnV0dG9uUGFydAorICAgICAgICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9
IEJ1dHRvbkJldmVsUGFydAorICAgICAgICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5j
ZSgpICE9IE1lbnVsaXN0UGFydAorICAgICAgICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBwZWFy
YW5jZSgpICE9IE1lbnVsaXN0QnV0dG9uUGFydAorICAgICAgICAgICAgICAgICAgICApOworfQor
Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9p
ZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1l
QW5kcm9pZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UmVuZGVyVGhlbWVBbmRyb2lkX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVBbmRyb2lkX2gKKworI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVu
ZGVyU2tpbkJ1dHRvbjsKK2NsYXNzIFJlbmRlclNraW5SYWRpbzsKK2NsYXNzIFJlbmRlclNraW5D
b21ibzsKKworc3RydWN0IFRoZW1lRGF0YSB7CisgICAgVGhlbWVEYXRhKCkgOm1fcGFydCgwKSwg
bV9zdGF0ZSgwKSB7fQorCisgICAgdW5zaWduZWQgbV9wYXJ0OworICAgIHVuc2lnbmVkIG1fc3Rh
dGU7Cit9OworCitjbGFzcyBSZW5kZXJUaGVtZUFuZHJvaWQgOiBwdWJsaWMgUmVuZGVyVGhlbWUg
eworcHVibGljOgorICAgIFJlbmRlclRoZW1lQW5kcm9pZCgpOworICAgIH5SZW5kZXJUaGVtZUFu
ZHJvaWQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc3RhdGVDaGFuZ2VkKFJlbmRlck9iamVj
dCosIENvbnRyb2xTdGF0ZSkgY29uc3Q7CisgICAgICAgCisgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisgICAgLy8gQSBt
ZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQg
cmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHN0eWxlLT5hZmZlY3RlZEJ5
SG92ZXJSdWxlcygpOyB9CisKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0
IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdo
dENvbG9yKCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50LCBX
ZWJDb3JlOjpGb250RGVzY3JpcHRpb24mKSBjb25zdCB7fQorCisgICAgdmlydHVhbCBpbnQgbWlu
aW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsK
KworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVh
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2Vi
Q29yZTo6RWxlbWVudCogZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcik7CisgICAgCisgICAgYm9vbCBwYWludENvbWJvKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksICBjb25zdCBJbnRSZWN0JiBpcik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TGlzdGJveFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcik7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCitwcml2YXRlOgor
ICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Owor
ICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBh
cHBlYXJhbmNlKTsKKyAgICAvLyBGSVhNRTogVGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIHVzZSBv
bmUgUmVuZGVyU2tpblJhZGlvIGZvciBib3RoIHJhZGlvIGFuZCBjaGVja2JveAorICAgIFJlbmRl
clNraW5SYWRpbyogICAgbV9yYWRpbzsKKyAgICBSZW5kZXJTa2luUmFkaW8qICAgIG1fY2hlY2ti
b3g7CisgICAgUmVuZGVyU2tpbkNvbWJvKiAgICBtX2NvbWJvOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVuZGVyVGhlbWVBbmRyb2lkX2gKKwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NjcmVlbkFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3Bl
biBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgTE9HX1RBRyAiV2ViQ29y
ZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmVlbi5oIgorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyN1bmRlZiBMT0cgLy8gRklY
TUU6IFN0aWxsIGhhdmUgdG8gZG8gdGhpcyB0byBnZXQgdGhlIGxvZyB0byBzaG93IHVwCisjaW5j
bHVkZSAidXRpbHMvTG9nLmgiCisKKyNpbmNsdWRlICJ1aS9TdXJmYWNlQ29tcG9zZXJDbGllbnQu
aCIKKyNpbmNsdWRlICJ1aS9QaXhlbEZvcm1hdC5oIgorI2luY2x1ZGUgInVpL0Rpc3BsYXlJbmZv
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW50IHNjcmVlbkRlcHRoKFdpZGdldCogcGFn
ZSkKK3sKKyAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOworICAgIGFuZHJvaWQ6OlN1cmZh
Y2VDb21wb3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDApLCAm
aW5mbyk7CisgICAgcmV0dXJuIGluZm8ucGl4ZWxGb3JtYXRJbmZvLmJpdHNQZXJQaXhlbDsKK30K
KworaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogcGFnZSkKK3sKKyAgICBhbmRy
b2lkOjpEaXNwbGF5SW5mbyBpbmZvOworICAgIGFuZHJvaWQ6OlN1cmZhY2VDb21wb3NlckNsaWVu
dDo6Z2V0RGlzcGxheUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDApLCAmaW5mbyk7CisgICAgcmV0
dXJuIGluZm8ucGl4ZWxGb3JtYXRJbmZvLmJpdHNQZXJQaXhlbDsKK30KKworYm9vbCBzY3JlZW5J
c01vbm9jaHJvbWUoV2lkZ2V0KiBwYWdlKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lm
ZGVmIEFORFJPSURfT1JJRU5UQVRJT05fU1VQUE9SVAoraW50IFNjcmVlbjo6b3JpZW50YXRpb24o
KSBjb25zdAoreworICAgIGFuZHJvaWQ6OkRpc3BsYXlJbmZvIGluZm87CisgICAgYW5kcm9pZDo6
U3VyZmFjZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5SW5mbygKKyAgICAgICAgICAgIGFuZHJv
aWQ6OkRpc3BsYXlJRCgwKSwgJmluZm8pOworICAgIC8vIGdldERpc3BsYXlJbmZvIHJldHVybnMg
YW4gZW51bSBkZXNjcmliaW5nIHRoZSBvcmllbnRhdGlvbi4gTWFwIHRoZSBlbnVtCisgICAgLy8g
dG8gdGhlIHZhbHVlcyBkZXNjcmliZWQgaGVyZQorICAgIC8vIChodHRwOi8vZGV2ZWxvcGVyLmFw
cGxlLmNvbS9kb2N1bWVudGF0aW9uL0FwcGxlQXBwbGljYXRpb25zL1JlZmVyZW5jZS9TYWZhcmlX
ZWJDb250ZW50L0hhbmRsaW5nRXZlbnRzL2NoYXB0ZXJfOF9zZWN0aW9uXzYuaHRtbCkKKyAgICBz
d2l0Y2ggKGluZm8ub3JpZW50YXRpb24pIHsKKyAgICAgICAgY2FzZSBhbmRyb2lkOjpJU3VyZmFj
ZUNvbXBvc2VyOjplT3JpZW50YXRpb25EZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIGNhc2UgYW5kcm9pZDo6SVN1cmZhY2VDb21wb3Nlcjo6ZU9yaWVudGF0aW9uOTA6Cisg
ICAgICAgICAgICByZXR1cm4gOTA7CisgICAgICAgIGNhc2UgYW5kcm9pZDo6SVN1cmZhY2VDb21w
b3Nlcjo6ZU9yaWVudGF0aW9uMTgwOgorICAgICAgICAgICAgcmV0dXJuIDE4MDsKKyAgICAgICAg
Y2FzZSBhbmRyb2lkOjpJU3VyZmFjZUNvbXBvc2VyOjplT3JpZW50YXRpb24yNzA6CisgICAgICAg
ICAgICByZXR1cm4gLTkwOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HRSgiQmFk
IG9yaWVudGF0aW9uIHJldHVybmVkIGZyb20gZ2V0RGlzcGxheUluZG8gJWQiLAorICAgICAgICAg
ICAgICAgICAgICBpbmZvLm9yaWVudGF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKyNlbmRpZgorCisvLyBUaGUgb25seSBwbGFjZSBJIGhhdmUgc2VlbiB0aGVzZSB2YWx1
ZXMgdXNlZCBpcworLy8gcG9zaXRpb25pbmcgcG9wdXAgd2luZG93cy4gSWYgd2Ugc3VwcG9ydCBt
dWx0aXBsZSB3aW5kb3dzCisvLyB0aGV5IHdpbGwgYmUgbW9zdCBsaWtlbHkgZnVsbCBzY3JlZW4u
IFRoZXJlZm9yZSwKKy8vIHRoZSBhY2N1cmFjeSBvZiB0aGVzZSBudW1iZXIgYXJlIG5vdCB0b28g
aW1wb3J0YW50LgorRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiBwYWdlKQoreworICAgIGFu
ZHJvaWQ6OkRpc3BsYXlJbmZvIGluZm87CisgICAgYW5kcm9pZDo6U3VyZmFjZUNvbXBvc2VyQ2xp
ZW50OjpnZXREaXNwbGF5SW5mbyhhbmRyb2lkOjpEaXNwbGF5SUQoMCksICZpbmZvKTsKKyAgICBy
ZXR1cm4gRmxvYXRSZWN0KDAuMCwgMC4wLCBpbmZvLncsIGluZm8uaCk7Cit9CisKKy8qIAorU2Nh
bGUgZnVuY3Rpb25zIGRvbid0IHNlZW0gdG8gYmUgbmVlZGVkLiBUaGVyZSBpcyBubyBjb2RlIHRo
YXQKK2NhbGwgdGhlbSwgYW5kIHRoZXkgc2VlbSB0byBvbmx5IGV4aXN0IGluIHBvcnRzIGFuZCBu
b3QgaW4gdGhlIGNvcmUKK1dlYktpdCBjb2RlIC0gZGF2aWRjCitGbG9hdFJlY3QgdXNhYmxlU2Ny
ZWVuUmVjdChXaWRnZXQqIHBhZ2UpCit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOzsKK30KKwor
RmxvYXRSZWN0IHNjYWxlU2NyZWVuUmVjdFRvUGFnZUNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVj
dCYsIFdpZGdldCopCit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOzsKK30KKworRmxvYXRSZWN0
IHNjYWxlUGFnZVJlY3RUb1NjcmVlbkNvb3JkaW5hdGVzKGNvbnN0IEZsb2F0UmVjdCYsIFdpZGdl
dCopCit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOzsKK30KKworZmxvYXQgc2NhbGVGYWN0b3Io
V2lkZ2V0KikKK3sKKyAgICByZXR1cm4gMS4wZjsKK30KKyovCisKKy8vIFNpbWlsYXIgc2NyZWVu
UmVjdCwgdGhpcyBmdW5jdGlvbiBpcyBjb21tb25seSB1c2VkIGJ5IGphdmFzY3JpcHRzCisvLyB0
byBwb3NpdGlvbiBhbmQgcmVzaXplIHdpbmRvd3MgKHVzdWFsbHkgdG8gZnVsbCBzY3JlZW4pLiAK
K0Zsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCopCit7CisgICAgYW5kcm9pZDo6
RGlzcGxheUluZm8gaW5mbzsKKyAgICBhbmRyb2lkOjpTdXJmYWNlQ29tcG9zZXJDbGllbnQ6Omdl
dERpc3BsYXlJbmZvKGFuZHJvaWQ6OkRpc3BsYXlJRCgwKSwgJmluZm8pOworICAgIHJldHVybiBG
bG9hdFJlY3QoMC4wLCAwLjAsIGluZm8udywgaW5mby5oKTsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9hbmRyb2lkL1Njcm9sbFZpZXdBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmlld0FuZHJvaWQuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1Njcm9sbFZpZXdBbmRyb2lkLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFu
ZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2RlZmluZSBMT0dfVEFHICJXZWJDb3Jl
IgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIldlYkNvcmVGcmFtZUJyaWRnZS5oIgorI2luY2x1ZGUgIldlYkNv
cmVWaWV3QnJpZGdlLmgiCisjaW5jbHVkZSAiV2ViVmlld0NvcmUuaCIKKworLyoKKyAgICBUaGlz
IGNsYXNzIGltcGxlbWVudGF0aW9uIGRvZXMgTk9UIGFjdHVhbGx5IGVtdWxhdGUgdGhlIFF0IFNj
cm9sbFZpZXcuCisgICAgSXQgZG9lcyBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHRoYXQga2h0
bWwgd2lsbCB1c2UgdG8gaW50ZXJhY3Qgd2l0aAorICAgIFdlYktpdCdzIFdlYkZyYW1lVmlldyBk
b2N1bWVudFZpZXcgYW5kIG91ciBOU1Njcm9sbFZpZXcgc3ViY2xhc3MuCisKKyAgICBTY3JvbGxW
aWV3J3MgdmlldyBpcyBhIE5TU2Nyb2xsVmlldyAob3Igc3ViY2xhc3Mgb2YgTlNTY3JvbGxWaWV3
KQorICAgIGluIG1vc3QgY2FzZXMuIFRoYXQgc2Nyb2xsdmlldyBpcyBhIHN1YnZpZXcgb2YgYW4K
KyAgICBXZWJDb3JlRnJhbWVWaWV3LiBUaGUgV2ViQ29yZUZyYW1lVmlldydzIGRvY3VtZW50Vmll
dyB3aWxsIGFsc28gYmUKKyAgICB0aGUgc2Nyb2xsIHZpZXcncyBkb2N1bWVudFZpZXcuCisgICAg
CisgICAgVGhlIFdlYkNvcmVGcmFtZVZpZXcncyBzaXplIGlzIHRoZSBmcmFtZSBzaXplLiAgVGhl
IFdlYkNvcmVGcmFtZVZpZXcncyBkb2N1bWVudFZpZXcKKyAgICBjb3JyZXNwb25kcyB0byB0aGUg
ZnJhbWUgY29udGVudCBzaXplLiAgVGhlIHNjcm9sbHZpZXcgaXRzZWxmIGlzIGF1dG9zaXplZCB0
byB0aGUKKyAgICBXZWJDb3JlRnJhbWVWaWV3J3Mgc2l6ZSAoc2VlIFdpZGdldDo6cmVzaXplKS4K
KyovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0Zm9y
bVZpc2libGVDb250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdAoreworICAg
IEludFJlY3QgcmVjdCA9IHBsYXRmb3JtV2lkZ2V0KCktPmdldEJvdW5kcygpOworICAgIC8vIFRo
aXMgbWFrZXMgc3ViZnJhbWVzIGRyYXcgY29ycmVjdGx5LCBzaW5jZSBzdWJmcmFtZXMgY2Fubm90
IHNjcm9sbC4KKyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAs
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0lu
dFNpemUgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NvbnRlbnRzU2l6ZTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNldFNj
cm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwdCkKK3sKKyAgICBpZiAocGFy
ZW50KCkpIC8vIGRvbid0IGF0dGVtcHQgdG8gc2Nyb2xsIHN1YmZyYW1lczsgdGhleSdyZSBmdWxs
eSB2aXNpYmxlCisgICAgICAgIHJldHVybjsKKyAgICBhbmRyb2lkOjpXZWJWaWV3Q29yZTo6Z2V0
V2ViVmlld0NvcmUodGhpcyktPnNjcm9sbFRvKHB0LngoKSwgcHQueSgpKTsKK30KKwordm9pZCBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUmIGgsIFNjcm9s
bGJhck1vZGUmIHYpIGNvbnN0Cit7CisgICAgaCA9IHYgPSBTY3JvbGxiYXJBbHdheXNPZmY7Cit9
CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1Qcm9oaWJpdHNTY3JvbGxpbmcoKQoreworICAg
IGlmICghaXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEZyYW1lVmll
dyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpOworICAgIC8vIFdlIHdhbnQg
dG8gaWdub3JlIHJlcXVlc3RzIHRvIHNjcm9sbCB0aGF0IHdlcmUgbm90IGluaXRpYXRlZCBieSB0
aGUgdXNlci4gIEFuCisgICAgLy8gZXhhbXBsZSBvZiB0aGlzIGlzIHdoZW4gdGV4dCBpcyBpbnNl
cnRlZCBpbnRvIGEgdGV4dGZpZWxkL2FyZWEsIHdoaWNoIHJlc3VsdHMgaW4KKyAgICAvLyBhIHNj
cm9sbC4gIFdlIGlnbm9yZSB0aGlzIGJlY2F1c2Ugd2Ugbm93IGhvdyB0byBkbyB0aGlzIG91cnNl
bHZlcyBpbiB0aGUgVUkgdGhyZWFkLgorICAgIC8vIEFuIGV4YW1wbGUgb2YgaXQgYmVpbmcgaW5p
dGlhdGVkIGJ5IHRoZSB1c2VyIGlzIGlmIHRoZSB1c2VyIGNsaWNrcyBhbiBhbmNob3IKKyAgICAv
LyBlbGVtZW50IHdoaWNoIHNpbXBseSBzY3JvbGxzIHRoZSBwYWdlLgorICAgIHJldHVybiAhYW5k
cm9pZDo6V2ViRnJhbWU6OmdldFdlYkZyYW1lKHZpZXctPmZyYW1lKCkpLT51c2VySW5pdGlhdGVk
Q2xpY2soKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRDb250ZW50UmVj
dGFuZ2xlKGNvbnN0IEludFJlY3QgJnJlY3QsIGJvb2wgbm93KQoreworICAgIGFuZHJvaWQ6Oldl
YlZpZXdDb3JlOjpnZXRXZWJWaWV3Q29yZSh0aGlzKS0+Y29udGVudEludmFsaWRhdGUocmVjdCk7
Cit9CisKKyNpZmRlZiBBTkRST0lEX0NBUFRVUkVfT0ZGU0NSRUVOX1BBSU5UUwordm9pZCBTY3Jv
bGxWaWV3OjpwbGF0Zm9ybU9mZnNjcmVlbkNvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBhbmRyb2lkOjpXZWJWaWV3Q29yZTo6Z2V0V2ViVmlld0NvcmUodGhpcykt
Pm9mZkludmFsaWRhdGUocmVjdCk7Cit9CisjZW5kaWYKKworfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9hbmRyb2lkL1NlYXJjaFBvcHVwTWVudUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TZWFyY2hQb3B1cE1lbnVBbmRyb2lkLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TZWFyY2hQb3B1cE1lbnVBbmRyb2lk
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2
LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBTYXZlIHRoZSBwYXN0IHNlYXJjaGVzIHN0b3JlZCBpbiAnc2VhcmNoSXRlbXMnIHRv
IGEgZGF0YWJhc2UgYXNzb2NpYXRlZCB3aXRoICduYW1lJwordm9pZCBTZWFyY2hQb3B1cE1lbnU6
OnNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBzZWFyY2hJdGVtcykgCit7IAorICAgIC8vQVNTRVJUKDApOyAvL25vdEltcGxl
bWVudGVkKCk7IAorfQorCisvLyBMb2FkIHBhc3Qgc2VhcmNoZXMgYXNzb2NpYXRlZCB3aXRoICdu
YW1lJyBmcm9tIHRoZSBkYXRhYmFzZSB0byAnc2VhcmNoSXRlbXMnCit2b2lkIFNlYXJjaFBvcHVw
TWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9y
PFN0cmluZz4mIHNlYXJjaEl0ZW1zKSAKK3sgCisgICAgLy9BU1NFUlQoMCk7IC8vbm90SW1wbGVt
ZW50ZWQoKTsgCit9CisKKy8vIENyZWF0ZSBhIHNlYXJjaCBwb3B1cCBtZW51IC0gbm90IHN1cmUg
d2hhdCBlbHNlIHdlIGhhdmUgdG8gZG8gaGVyZQorU2VhcmNoUG9wdXBNZW51OjpTZWFyY2hQb3B1
cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpIDogUG9wdXBNZW51KGNsaWVudCkgCit7IAor
ICAgIC8vQVNTRVJUKDApOyAvL25vdEltcGxlbWVudGVkKCk7IAorfQorICAgICAgICAKKy8vIGZ1
bmN0aW9ucyBuZXcgdG8gSnVuLTA3IHRpcCBvZiB0cmVlIG1lcmdlOgorYm9vbCBTZWFyY2hQb3B1
cE1lbnU6OmVuYWJsZWQoKSB7IHJldHVybiBmYWxzZTsgfQorCit9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NoYXJlZFRpbWVyQW5kcm9pZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NoYXJlZFRpbWVyQW5k
cm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2hhcmVk
VGltZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjZGVm
aW5lIExPR19UQUcgIlRpbWVycyIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNo
YXJlZFRpbWVyLmgiCisKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSAiSmF2YVNo
YXJlZENsaWVudC5oIgorI2luY2x1ZGUgIlRpbWVyQ2xpZW50LmgiCisjaW5jbHVkZSA8dXRpbHMv
TG9nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIFNpbmdsZSB0aW1lciwgc2hhcmVkIHRvIGltcGxlbWVudCBhbGwgdGhlIHRpbWVycyBt
YW5hZ2VkIGJ5IHRoZSBUaW1lciBjbGFzcy4KKy8vIE5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRp
cmVjdGx5OyB1c2UgdGhlIFRpbWVyIGNsYXNzIGluc3RlYWQuCit2b2lkIHNldFNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKK3sKKyAgICBpZiAoSmF2YVNoYXJlZENsaWVudDo6
R2V0VGltZXJDbGllbnQoKSkKKyAgICAgICAgSmF2YVNoYXJlZENsaWVudDo6R2V0VGltZXJDbGll
bnQoKS0+c2V0U2hhcmVkVGltZXJDYWxsYmFjayhmKTsKK30KKworLy8gVGhlIGZpcmUgdGltZSBp
cyByZWxhdGl2ZSB0byB0aGUgY2xhc3NpYyBQT1NJWCBlcG9jaCBvZiBKYW51YXJ5IDEsIDE5NzAs
CisvLyBhcyB0aGUgcmVzdWx0IG9mIGN1cnJlbnRUaW1lKCkgaXMuCit2b2lkIHNldFNoYXJlZFRp
bWVyRmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQoreworICAgIGxvbmcgbG9uZyB0aW1lSW5NUyA9
IChsb25nIGxvbmcpKChmaXJlVGltZSAtIGN1cnJlbnRUaW1lKCkpICogMTAwMCk7CisKKyAgICBM
T0dWKCJzZXRTaGFyZWRUaW1lckZpcmVUaW1lOiBpbiAlbGQgbWlsbGlzZWMiLCB0aW1lSW5NUyk7
CisgICAgaWYgKEphdmFTaGFyZWRDbGllbnQ6OkdldFRpbWVyQ2xpZW50KCkpCisgICAgICAgIEph
dmFTaGFyZWRDbGllbnQ6OkdldFRpbWVyQ2xpZW50KCktPnNldFNoYXJlZFRpbWVyKHRpbWVJbk1T
KTsKK30KKwordm9pZCBzdG9wU2hhcmVkVGltZXIoKQoreworICAgIGlmIChKYXZhU2hhcmVkQ2xp
ZW50OjpHZXRUaW1lckNsaWVudCgpKQorICAgICAgICBKYXZhU2hhcmVkQ2xpZW50OjpHZXRUaW1l
ckNsaWVudCgpLT5zdG9wU2hhcmVkVGltZXIoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TeXN0ZW1UaW1lQW5kcm9pZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1N5c3RlbVRpbWVBbmRyb2lk
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TeXN0ZW1UaW1l
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorCisjaW5jbHVkZSA8c3lzL3Rp
bWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitkb3VibGUgY3VycmVudFRpbWUoKQorewor
ICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgZ2V0dGltZW9mZGF5KCZ0diwgKHN0cnVjdCB0
aW1lem9uZSAqKSBOVUxMKTsKKyAgICBkb3VibGUgbm93ID0gdHYudHZfc2VjICsgKHR2LnR2X3Vz
ZWMgLyAxMDAwMDAwLjApOworICAgIAorICAgIHJldHVybiBub3c7Cit9CisKK3VpbnQzMl90IGdl
dF90aHJlYWRfbXNlYygpCit7CisjaWYgZGVmaW5lZChIQVZFX1BPU0lYX0NMT0NLUykKKyAgICBz
dHJ1Y3QgdGltZXNwZWMgdG07CisKKyAgICBjbG9ja19nZXR0aW1lKENMT0NLX1RIUkVBRF9DUFVU
SU1FX0lELCAmdG0pOworICAgIAorICAgIHJldHVybiB0bS50dl9zZWMgKiAxMDAwTEwgKyB0bS50
dl9uc2VjIC8gMTAwMDAwMDsKKyNlbHNlCisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgCisg
ICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisgICAgcmV0dXJuIHR2LnR2X3NlYyAqIDEwMDBM
TCArIHR2LnR2X3VzZWMgLyAxMDAwOworI2VuZGlmCit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjZGVm
aW5lIExPR19UQUcgIldlYkNvcmUiCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2RlZmluZSBB
TkRST0lEX0NPTVBJTEVfSEFDSworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUGFnZS5o
IgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisj
aW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisjaW5jbHVkZSAi
Q29udGV4dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisvLyNp
bmNsdWRlICJEZWJ1Z2dlckNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgi
CisjaW5jbHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRmlsZS5oIgorI2luY2x1ZGUgIkZpbGVM
aXN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRN
TEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEtleWdlbkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIaXN0b3J5LmgiCisjaW5jbHVkZSAiSWNvbi5oIgorI2luY2x1ZGUgIkljb25EYXRh
YmFzZS5oIgorI2luY2x1ZGUgIkljb25Mb2FkZXIuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJBUEkvSlNDbGFzc1JlZi5oIgorI2luY2x1ZGUgIkphdmFT
Y3JpcHRDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJKYXZhU2NyaXB0UHJvZmlsZS5oIgorI2luY2x1
ZGUgImpuaV91dGlsaXR5LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkxhbmd1YWdl
LmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgor
I2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAi
UGF0aC5oIgorI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlJlc291cmNl
RXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZGVyLmgiCisjaW5jbHVkZSAiU2NyZWVuLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCisj
aW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTbWFydFJlcGxhY2UuaCIKKyNp
bmNsdWRlICJXaWRnZXQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoaXMg
ZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGZyYW1lIHZpZXcgaGFzIGNoYW5nZWQgdGhlIHN0
YXRlIG9mIGl0J3MgYm9yZGVyLiAKKy8vIGlGcmFtZXMsIHdoaWNoIGFyZSBoYXZlIGEgRnJhbWVW
aWV3LCBhcmUgZHJhd24gd2l0aCBhIDFweCBsZWZ0L3JpZ2h0IGJvcmRlciBhbmQgMnB4IHRvcC9i
b3R0b20gYm9yZGVyCisvLyBDaGVjayBmdW5jdGlvbiBfc2hvdWxkRHJhd0JvcmRlciBpbiBXZWJG
cmFtZVZpZXcubW0KKy8vIFdlIGRvbid0IGRyYXcgYm9yZGVycyB1bmxlc3MgY3NzIGRyYXdzIHRo
ZW0uCisvL3ZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVCb3JkZXIoKSB7IHZlcmlmaWVkT2soKTsgfSAK
Ky8vaW50IFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopIHsgQVNTRVJU
KDApOyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfSAKKy8vYm9vbCBXZWJDb3JlOjpzY3Jl
ZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikgeyBBU1NFUlQoMCk7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiBmYWxzZTsgfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8g
YWxsb3cgRFJUIHRvIHJ1bik6ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBK
YXZhc2NyaXB0IHRvIGZpbmQgb3V0IHdoYXQgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UKKy8vIHRoZSB1
c2VyIGhhcyBzZWxlY3RlZC4gSXQgaXMgdXNlZCBieSB0aGUgSlMgb2JqZWN0IE5hdmlnYXRvci5s
YW5ndWFnZQorLy8gSSBndWVzcyB0aGlzIGluZm9ybWF0aW9uIHNob3VsZCBiZSBtYXBwZWQgd2l0
aCB0aGUgQWNjZXB0LUxhbmd1YWdlOiBIVFRQIGhlYWRlci4KK1N0cmluZyBXZWJDb3JlOjpkZWZh
dWx0TGFuZ3VhZ2UoKQoreworICAgIHZlcmlmaWVkT2soKTsKKyAgICByZXR1cm4gImVuIjsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIWRlZmluZWQoQU5EUk9JRF9QTFVHSU5TKQor
Ly8gSWYgcGx1Z2lucyBzdXBwb3J0IGlzIHR1cm5lZCBvbiwgZG9uJ3QgdXNlIHRoZXNlIHN0dWJz
LgorCisvLyBFeGNlcHQgZm9yIHN1cHBvcnRzTUlNRVR5cGUoKSwgdGhlc2UgUGx1Z2luIGZ1bmN0
aW9ucyBhcmUgdXNlZCBieSBqYXZhc2NyaXB0J3MgCisvLyBuYXZpZ2F0b3IucGx1Z2luc1tdIG9i
amVjdCB0byBwcm92aWRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwbHVnaW5zLiBUaGlzIGlzIG1v
c3QgCisvLyBvZnRlbiB1c2VkIHdpdGggdG8gY2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHN1
cHBvcnRzIEZsYXNoIG9yIHdoaWNoIHZpZGVvCisvLyBjb2RlYyB0byB1c2UuCisvLyBUaGUgc3Vw
cG9ydHNNSU1FVHlwZSgpIGlzIHVzZWQgYnkgdGhlIEZyYW1lIHRvIGRldGVybWluZSBpZiBhIGZ1
bGwgc2NyZWVuIGluc3RhbmNlCisvLyBvZiBhIHBsdWdpbiBjYW4gYmUgdXNlZCB0byByZW5kZXIg
YSBtaW1ldHlwZSB0aGF0IGlzIG5vdCBuYXRpdmUgdG8gdGhlIGJyb3dzZXIuCitQbHVnaW5JbmZv
KiBQbHVnaW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2ln
bmVkKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgUGx1
Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgdmVyaWZpZWRPaygpOwor
ICAgIHJldHVybiAwOworfQorCisvLyBGSVhNRSwgcmV0dXJuIGZhbHNlIGZvciBub3cuCitTdHJp
bmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9v
bCBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICB2ZXJpZmllZE9rKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHJlZnJlc2hQbHVn
aW5zKGJvb2wpCit7CisgICAgdmVyaWZpZWRPaygpOworfQorCisjZW5kaWYgLy8gIWRlZmluZWQo
QU5EUk9JRF9QTFVHSU5TKQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlbGxzIHRoZSBicmlkZ2UgdGhh
dCBhIHJlc291cmNlIHdhcyBsb2FkZWQgZnJvbSB0aGUgY2FjaGUgYW5kIHRodXMKKy8vIHRoZSBh
cHAgbWF5IHVwZGF0ZSBwcm9ncmVzcyB3aXRoIHRoZSBhbW91bnQgb2YgZGF0YSBsb2FkZWQuCit2
b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqKQor
eworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisvLyBUaGlzIGNs
YXNzIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgRmlsZSBVcGxvYWQgZm9ybSBlbGVt
ZW50LCBhbmQKKy8vIHRoZXJlZm9yZSByZWxhdGVzIHRvIHRoZSBhYm92ZS4gV2hlbiBhIGZpbGUg
aGFzIGJlZW4gc2VsZWN0ZWQsIGFuIGljb24KKy8vIHJlcHJlc2VudGluZyB0aGUgZmlsZSB0eXBl
IGNhbiBiZSByZW5kZXJlZCBuZXh0IHRvIHRoZSBmaWxlbmFtZSBvbiB0aGUKKy8vIHdlYiBwYWdl
LiBUaGUgaWNvbiBmb3IgdGhlIGZpbGUgaXMgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGlzIGNsYXNz
LgorLy9JY29uOjpJY29uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK0ljb246On5JY29uKCkg
eyB9Cit2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSB7
IH0KKworLy8gKioqIFRoZSBmb2xsb3dpbmcgc3RyaW5ncyBzaG91bGQgYmUgbG9jYWxpemVkICoq
KiAvLworCisvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBmZXRjaCBsb2Nh
bGl6ZWQgdGV4dCBmb3IgSFRNTCBmb3JtCisvLyBlbGVtZW50cyBzdWJtaXQgYW5kIHJlc2V0LiBU
aGVzZSBzdHJpbmdzIGFyZSB1c2VkIHdoZW4gdGhlIHBhZ2UgYXV0aG9yCisvLyBoYXMgbm90IHNw
ZWNpZmllZCBhbnkgdGV4dCBmb3IgdGhlc2UgYnV0dG9ucy4KK1N0cmluZyBzdWJtaXRCdXR0b25E
ZWZhdWx0TGFiZWwoKQoreworICAgIHZlcmlmaWVkT2soKTsKKyAgICByZXR1cm4gIlN1Ym1pdCI7
Cit9CisKK1N0cmluZyByZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCgpCit7CisgICAgdmVyaWZpZWRP
aygpOworICAgIHJldHVybiAiUmVzZXQiOworfQorCisvLyBUaGUgYWx0IHRleHQgZm9yIGFuIGlu
cHV0IGVsZW1lbnQgaXMgbm90IHVzZWQgdmlzdWFsbHksIGJ1dCByYXRoZXIgaXMKKy8vIHVzZWQg
Zm9yIGFjY2Vzc2FiaWxpdHkgLSBlZyByZWFkaW5nIHRoZSB3ZWIgcGFnZS4gU2VlIAorLy8gSFRN
TElucHV0RWxlbWVudDo6YWx0VGV4dCgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorU3RyaW5nIGlu
cHV0RWxlbWVudEFsdFRleHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCisvLyBUaGlzIGlzIHRoZSBzdHJpbmcgdGhhdCBhcHBlYXJzIGJlZm9y
ZSBhbiBpbnB1dCBib3ggd2hlbiB0aGUgSFRNTCBlbGVtZW50CisvLyA8SVNJTkRFWD4gaXMgdXNl
ZC4gVGhlIHJldHVybmVkIHN0cmluZyBpcyB1c2VkIGlmIG5vIFBST01QVCBhdHRyaWJ1dGUgaXMg
CisvLyBwcm92aWRlZC4KKy8vIG5vdGU6IFNhZmFyaSBhbmQgRmlyZUZveCB1c2UgKHRvbyBsb25n
IGZvciB1cyBpbWhvKSAiVGhpcyBpcyBhIHNlYXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBr
ZXl3b3JkczoiCitTdHJpbmcgc2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkKK3sKKyAgICB2
ZXJpZmllZE9rKCk7CisgICAgcmV0dXJuIFN0cmluZygiRW50ZXIgc2VhcmNoOiIpOworfQorCisv
LyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgQ1NTIHBy
b3BlcnR5OgorLy8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yCisvLyBJdCBpcyBhbHNvIHJlbGF0
ZWQgdG8gdGhlIENTUyBwcm9wZXJ0eSBvdXRsaW5lLWNvbG9yOgorQ29sb3IgZm9jdXNSaW5nQ29s
b3IoKQoreworICAgIHZlcmlmaWVkT2soKTsKKyAgICByZXR1cm4gMHhGRjAwMDBGRjsKK30KKwor
Ly8gTG9jYWxpemVkU3RyaW5ncworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5O
ZXdXaW5kb3coKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2soKQoreworICAgIEFT
U0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdX
aW5kb3coKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkKK3sKKyAgICBBU1NF
UlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnQ29weUltYWdlVG9DbGlwYm9hcmQoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dp
bmRvdygpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKQorewor
ICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdHb0ZvcndhcmQoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkKK3sKKyAgICBBU1NF
UlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVt
VGFnUmVsb2FkKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKQor
eworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxs
aW5nKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpCit7CisgICAgQVNTRVJUKDApOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJj
aFdlYigpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSgpCit7CisgICAgQVNTRVJU
KDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpCit7CisgICAgQVNTRVJU
KDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRh
Z1NwZWxsaW5nTWVudSgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wpCit7
CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5n
V2hpbGVUeXBpbmcoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQor
eworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKQoreworICAgIEFT
U0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdJdGFsaWMoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKQoreworICAgIEFTU0VSVCgw
KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdP
dXRsaW5lKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUoKQoreworICAgIEFT
U0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKQorewor
ICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdSaWdodFRvTGVmdCgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUUsIG5vIHN1
cHBvcnQgZm9yIHNwZWxsaW5nIHlldC4KK1Bhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCkKK3sKKyAgICByZXR1cm4gbmV3IFBhc3RlYm9hcmQoKTsKK30KKwordm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSosIGJvb2wsIEZyYW1lKikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqLCBQYXNzUmVmUHRyPFJhbmdl
PiwgYm9vbCwgYm9vbCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFtZSopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1Bhc3RlYm9hcmQ6OlBhc3Rl
Ym9hcmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3RlYm9hcmQ6On5QYXN0
ZWJvYXJkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK0NvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Q29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1l
bnVJdGVtJikKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBDb250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtZW51KQoreworICAgIEFTU0VSVCgwKTsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24gPSBtZW51OworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxh
dGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBt
X3BsYXRmb3JtRGVzY3JpcHRpb247Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJ
dGVtKFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbikKK3sKKyAgICBBU1NFUlQoMCk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0o
Q29udGV4dE1lbnUqKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitDb250ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBl
LCBDb250ZXh0TWVudUFjdGlvbiwgY29uc3QgU3RyaW5nJiwgQ29udGV4dE1lbnUqKQoreworICAg
IEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVudUl0ZW06
On5Db250ZXh0TWVudUl0ZW0oKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpy
ZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKK30KKworQ29u
dGV4dE1lbnVJdGVtVHlwZSBDb250ZXh0TWVudUl0ZW06OnR5cGUoKSBjb25zdAoreworICAgIEFT
U0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBBY3Rpb25UeXBlOwor
fQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VHlwZShDb250ZXh0TWVudUl0ZW1UeXBlKQor
eworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVu
dUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFjdGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKDAp
OworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ05v
QWN0aW9uOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRNZW51
QWN0aW9uKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitT
dHJpbmcgQ29udGV4dE1lbnVJdGVtOjp0aXRsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKDApOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIENv
bnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlQoMCk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29u
dGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25zdAoreworICAgIEFTU0VSVCgwKTsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENvbnRleHRN
ZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0TWVudSopCit7CisgICAgQVNTRVJUKDApOworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2Vk
KGJvb2wpCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgQ29udGV4dE1lbnVJdGVtOjpzZXRFbmFibGVkKGJvb2wpCit7CisgICAgQVNTRVJUKDApOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQg
dXNlcklkbGVUaW1lKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCisvLyBzeXN0ZW1CZWVwKCkgaXMgY2FsbGVkIGJ5IHRoZSBFZGl0b3IgdG8gaW5kaWNhdGUg
dGhhdCB0aGVyZSB3YXMgbm90aGluZyB0byBjb3B5LCBhbmQgbWF5IGJlIGNhbGxlZCBmcm9tIAor
Ly8gb3RoZXIgcGxhY2VzIHRvby4KK3ZvaWQgc3lzdGVtQmVlcCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworfQorCisvLyBmdW5jdGlvbnMgbmV3IHRvIEp1bi0wNyB0aXAgb2YgdHJl
ZSBtZXJnZToKKworLy8gdm9pZCBXZWJDb3JlOjpDYWNoZWRQYWdlOjpjbG9zZSgpIHt9CisKKy8v
dm9pZCBXZWJDb3JlOjpGcmFtZTo6cHJpbnQoKSB7fQorLy8gdm9pZCBXZWJDb3JlOjpGcmFtZTo6
aXNzdWVUcmFuc3Bvc2VDb21tYW5kKCkge30KKy8vdm9pZCBXZWJDb3JlOjpGcmFtZTo6Y2xlYW51
cFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpIHt9CisvLyB2b2lkIFdlYkNvcmU6OkZyYW1lOjpkYXNo
Ym9hcmRSZWdpb25zQ2hhbmdlZCgpIHt9CisvL2Jvb2wgV2ViQ29yZTo6RnJhbWU6OmlzQ2hhcmFj
dGVyU21hcnRSZXBsYWNlRXhlbXB0KHVuc2lnbmVkIHNob3J0LCBib29sKSB7IHJldHVybiBmYWxz
ZTsgfQorCit2b2lkKiBXZWJDb3JlOjpGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkKK3sK
KyAgICByZXR1cm4gMDsKK30KKworCitXZWJDb3JlOjpTdHJpbmcgV2ViQ29yZTo6TUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oV2ViQ29yZTo6U3RyaW5nIGNvbnN0JikK
K3sKKyAgICByZXR1cm4gV2ViQ29yZTo6U3RyaW5nKCk7Cit9CisKK3ZvaWQgV2ViQ29yZTo6UGFz
dGVib2FyZDo6d3JpdGVJbWFnZShXZWJDb3JlOjpOb2RlKiwgV2ViQ29yZTo6S1VSTCBjb25zdCYs
IFdlYkNvcmU6OlN0cmluZyBjb25zdCYpIHt9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50
U2l6ZSBkcmFnSW1hZ2VTaXplKHZvaWQqKQoreworICAgIHJldHVybiBJbnRTaXplKDAsIDApOwor
fQorCit2b2lkIGRlbGV0ZURyYWdJbWFnZSh2b2lkKikge30KK3ZvaWQqIGNyZWF0ZURyYWdJbWFn
ZUZyb21JbWFnZShJbWFnZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIGRpc3NvbHZl
RHJhZ0ltYWdlVG9GcmFjdGlvbih2b2lkKiwgZmxvYXQpCit7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQqIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCit7
CisgICAgcmV0dXJuIDA7Cit9CisKK0N1cnNvciBkdW1teUN1cnNvcjsKK2NvbnN0IEN1cnNvciYg
em9vbUluQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZHVtbXlDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgem9vbU91dEN1cnNvcigpCit7CisgICAgcmV0dXJuIGR1bW15Q3Vyc29yOworfQorCitj
b25zdCBDdXJzb3ImIG5vdEFsbG93ZWRDdXJzb3IoKQoreworICAgIHJldHVybiBkdW1teUN1cnNv
cjsKK30KKwordm9pZCogc2NhbGVEcmFnSW1hZ2Uodm9pZCosIEZsb2F0U2l6ZSkKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworU3RyaW5nIHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKQorewor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJj
aGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgc2VhcmNoTWVu
dUNsZWFyUmVjZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisK
K1ZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtleVNpemVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCitTdHJpbmcgc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGludCwgU3RyaW5nIGNvbnN0JiwgV2Vi
Q29yZTo6S1VSTCBjb25zdCYpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKy8vIGFkZGVkIGZvciBOb3YtMTYtMDcgVG9UIGludGVncmF0aW9u
CisvL25hbWVzcGFjZSBXZWJDb3JlIHsKKy8vdm9pZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlw
dE9iamVjdHMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKworLy99CisKKy8vIGZ1bmN0aW9ucyBu
ZXcgdG8gRmViLTE5IHRpcCBvZiB0cmVlIG1lcmdlOgorbmFtZXNwYWNlIFdlYkNvcmUgeworLy8g
aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQgaXMgZGVmaW5lZCBpbiBTbWFydFJlcGxhY2VJ
Q1UuY3BwOyBpbiB0aGVvcnksIHdlIGNvdWxkIHVzZSB0aGF0IG9uZQorLy8gICAgICBidXQgd2Ug
ZG9uJ3Qgc3VwcG9ydCBhbGwgb2YgdGhlIHJlcXVpcmVkIGljdSBmdW5jdGlvbnMgCitib29sIGlz
Q2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KFVDaGFyMzIsIGJvb2wpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gIC8vIFdlYkNvcmUKKworaW50
IE1ha2VEYXRhRXhlY3V0YWJsZTsKKworLy8gZnVuY3Rpb25zIG5ldyB0byBNYXItMiB0aXAgb2Yg
dHJlZSBtZXJnZToKK1N0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKKworLy8gZnVuY3Rp
b25zIG5ldyB0byBKdW4tMSB0aXAgb2YgdHJlZSBtZXJnZToKK1Bhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCaW5kaW5ncyB7Citib29sIGRpc3BhdGNoSk5JQ2FsbChFeGVj
U3RhdGUqLCB2b2lkIGNvbnN0KiwgX2pvYmplY3QqLCBib29sLCBKTklUeXBlLCAKKyAgICBfam1l
dGhvZElEKiwganZhbHVlKiwganZhbHVlJiwgY2hhciBjb25zdCosIEpTVmFsdWUqJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSB9ICAvLyBuYW1l
c3BhY2UgSlNDOjpCaW5kaW5ncworCitjaGFyKiBkaXJuYW1lKGNvbnN0IGNoYXIqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9IAorCisgICAgLy8gbmV3IGFzIG9m
IFNWTiBjaGFuZ2UgMzYyNjksIFNlcHQgOCwgMjAwOAorY29uc3QgU3RyaW5nJiBEYXRhYmFzZTo6
ZGF0YWJhc2VJbmZvVGFibGVOYW1lKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0
YXRpYyBjb25zdCBTdHJpbmcgZHVtbXk7CisgICAgcmV0dXJuIGR1bW15OworfQorCisgICAgLy8g
bmV3IGFzIG9mIFNWTiBjaGFuZ2UgMzgwNjgsIE5vdiA1LCAyMDA4CituYW1lc3BhY2UgV2ViQ29y
ZSB7Cit2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3RyaW5nPiYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVh
dGVJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZp
bGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCisvLyBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKSBpcyBjYWxs
ZWQgYnkgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNQcmVmV2lkdGhzKCkgCisvLyBsaWtlIHRoaXM6
IHNjcm9sbGJhclNpemUgPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFy
VGhpY2tuZXNzKCk7CisvLyB3aXRoIHRoaXMgY29tbWVudDogCisvLyAvLyBGSVhNRTogV2Ugc2hv
dWxkIGdldCB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyIGZyb20gdGhlIFJlbmRlclRoZW1lIGlu
c3RlYWQuCisvLyBzaW5jZSBvdXIgdGV4dCBjb250cm9sIGRvZXNuJ3QgaGF2ZSBzY3JvbGxiYXJz
LCB0aGUgZGVmYXVsdCBzaXplIG9mIDAgd2lkdGggc2hvdWxkIGJlCisvLyBvay4gbm90SW1wbGVt
ZW50ZWQoKSBpcyBjb21tZW50ZWQgb3V0IGJlbG93IHNvIHRoYXQgd2UgY2FuIGZpbmQgb3RoZXIg
dW5yZXNvbHZlZAorLy8gdW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuCitTY3JvbGxiYXJUaGVtZSog
U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICAvKiBub3RJbXBsZW1lbnRlZCgp
OyAqLworICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZSB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1l
OworfQorCitKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb2ZpbGUq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gIC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKK0ZpbGVMaXN0OjpGaWxlTGlzdCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworRmlsZSogRmlsZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworQVhPYmplY3RD
YWNoZTo6fkFYT2JqZWN0Q2FjaGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKy8v
IFRoaXMgdmFsdWUgdHVybnMgb24gb3Igb2ZmIHRoZSBNYWMgc3BlY2lmaWMgQWNjZXNzaWJpbGl0
eSBzdXBwb3J0LgorYm9vbCBBWE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0eUVuYWJsZWQgPSBm
YWxzZTsKK2Jvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRl
cmZhY2VFbmFibGVkID0gZmFsc2U7CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6Y2hpbGRyZW5DaGFu
Z2VkKFJlbmRlck9iamVjdCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBB
WE9iamVjdENhY2hlOjpyZW1vdmUoUmVuZGVyT2JqZWN0KikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCisKK09wYXF1ZUpTQ2xhc3M6On5PcGFx
dWVKU0NsYXNzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitPcGFxdWVKU0NsYXNz
Q29udGV4dERhdGE6On5PcGFxdWVKU0NsYXNzQ29udGV4dERhdGEoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNDOjpKU1ZhbHVlKiBKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShKU0M6OlVTdHJpbmcgY29uc3QmLCBKU0M6OkpTVmFs
dWUqJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQor
Citjb25zdCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNo
YWluKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQor
CitKU0M6OkpTT2JqZWN0KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2JqZWN0KCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitKU0M6OkRlYnVn
Z2VyQ2FsbEZyYW1lOjpUeXBlIEphdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
OjpUeXBlKSAwOworfQorCitKYXZhU2NyaXB0Q2FsbEZyYW1lKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpjYWxsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K1N0cmluZyBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorfQorCitKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXI6OkphdmFTY3JpcHREZWJ1Z1NlcnZlcigpIDoKKyAgICBtX3JlY29tcGls
ZVRpbWVyKHRoaXMsIDApCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSmF2YVNjcmlw
dERlYnVnU2VydmVyOjp+SmF2YVNjcmlwdERlYnVnU2VydmVyKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitKYXZhU2NyaXB0RGVidWdTZXJ2ZXImIEphdmFTY3JpcHREZWJ1Z1NlcnZl
cjo6c2hhcmVkKCkKK3sKKyAgICBzdGF0aWMgSmF2YVNjcmlwdERlYnVnU2VydmVyIHNlcnZlcjsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBzZXJ2ZXI7Cit9CisKK3ZvaWQgSmF2
YVNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYs
IGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlw
dERlYnVnU2VydmVyOjpjYWxsRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnQsIGlu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEphdmFTY3JpcHREZWJ1Z1Nl
cnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnQsIGlu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEphdmFTY3JpcHREZWJ1Z1Nl
cnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50LCBp
bnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0RGVidWdT
ZXJ2ZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludCwgaW50KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpz
b3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGludCwgY29uc3QgVVN0
cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OnBhZ2VDcmVhdGVkKFBhZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpyZXR1cm5FdmVudChjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYsIGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdn
ZXJDYWxsRnJhbWUmLCBpbnQsIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RleHRCb3VuZGFyaWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGV4dEJvdW5kYXJpZXMuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RleHRCb3VuZGFyaWVzLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5k
cm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKworI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5o
PgorCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxl
biwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCit7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0
ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisKKyAgICBpbnQgbmV3UG9zaXRpb24g
PSBwb3NpdGlvbjsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBvc2l0aW9uID0gdWJy
a19mb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVC
UktfRE9ORSkgeworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hh
cmFjdGVyIHByZWNlZWRpbmcgdGhlIGJyZWFrCisgICAgICAgICAgICAvLyBpcyBhbHBoYW51bWVy
aWMuCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBsZW4gJiYgdV9pc2FsbnVtKGNoYXJzW3Bv
c2l0aW9uIC0gMV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgICAg
ICAgICAgcG9zaXRpb24gPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3NpdGlvbiA9
IHVicmtfcHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiAh
PSBVQlJLX0RPTkUpIHsKKyAgICAgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhl
IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGJyZWFrCisgICAgICAgICAgICAvLyBpcyBhbHBoYW51
bWVyaWMuCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPiAwICYmIHVfaXNhbG51bShjaGFyc1tw
b3NpdGlvbl0pKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICAg
ICAgcG9zaXRpb24gPSB1YnJrX3ByZWNlZGluZyhpdCwgcG9zaXRpb24pOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29u
c3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCog
ZW5kKQoreworICAgIFVCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJz
LCBsZW4pOworICAgICplbmQgPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgIGlm
ICgqZW5kIDwgMCkKKyAgICAgICAgKmVuZCA9IHVicmtfbGFzdChpdCk7CisgICAgKnN0YXJ0ID0g
dWJya19wcmV2aW91cyhpdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
VGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv
amVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIq
IGN1cnJlbnRUZXh0QnJlYWtMb2NhbGVJRCgpCit7CisgICAgcmV0dXJuICJlbl91cyI7Cit9CisK
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9XaWRnZXRBbmRyb2lkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvV2lkZ2V0QW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvV2lkZ2V0QW5kcm9pZC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRo
ZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldpZGdldC5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCisjaW5jbHVkZSAi
V2ViQ29yZVZpZXdCcmlkZ2UuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q29yZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1dpZGdldDo6V2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKK3sK
KyAgICBpbml0KHdpZGdldCk7Cit9CisKK1dpZGdldDo6fldpZGdldCgpCit7CisgICAgQVNTRVJU
KCFwYXJlbnQoKSk7CisgICAgcmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCk7Cit9CisKK0ludFJlY3Qg
V2lkZ2V0OjpmcmFtZVJlY3QoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiB1c2UgbV9mcmFtZSBp
bnN0ZWFkPworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QoMCwgMCwgMCwgMCk7CisgICAgcmV0dXJuIHBsYXRmb3JtV2lkZ2V0KCktPmdldEJvdW5kcygp
OworfQorCit2b2lkIFdpZGdldDo6c2V0Rm9jdXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICAvLyBGSVhNRTogaW4gd2hhdCBjYXNlLCB3aWxsIHRoaXMgYmUgY2Fs
bGVkIGZvciB0aGUgdG9wIGZyYW1lPworICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHBsYXRmb3JtV2lkZ2V0KCktPmRyYXcoY3R4LCByKTsKK30KKwordm9p
ZCBXaWRnZXQ6OnJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpCit7CisgICAgUmVsZWFzZShwbGF0Zm9y
bVdpZGdldCgpKTsKK30KKwordm9pZCBXaWRnZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KCkKK3sK
KyAgICBSZXRhaW4ocGxhdGZvcm1XaWRnZXQoKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXaWRnZXQ6OnNob3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7IAorfQorCit2b2lk
IFdpZGdldDo6aGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsgCit9CisKK3ZvaWQgV2lk
Z2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBGSVhNRTog
c2V0IG1fZnJhbWUgaW5zdGVhZD8KKyAgICAvLyBwbGF0Zm9ybVdpZGdldCgpIGlzIE5VTEwgd2hl
biBjYWxsZWQgZnJvbSBTY3JvbGxiYXIKKyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBwbGF0Zm9ybVdpZGdldCgpLT5zZXRMb2NhdGlvbihyZWN0LngoKSwg
cmVjdC55KCkpOworICAgIHBsYXRmb3JtV2lkZ2V0KCktPnNldFNpemUocmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCBpc1Nl
bGVjdGVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2ludCBXaWRnZXQ6OnNjcmVl
bldpZHRoKCkgY29uc3QKK3sKKyAgICBjb25zdCBXaWRnZXQqIHdpZGdldCA9IHRoaXM7CisgICAg
d2hpbGUgKCF3aWRnZXQtPmlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgd2lkZ2V0ID0gd2lkZ2V0
LT5wYXJlbnQoKTsKKyAgICAgICAgaWYgKCF3aWRnZXQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGFu
ZHJvaWQ6OldlYlZpZXdDb3JlOjpnZXRXZWJWaWV3Q29yZSgKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGNvbnN0IFNjcm9sbFZpZXcqPih3aWRnZXQpKS0+c2NyZWVuV2lkdGgoKTsKK30KKworfSAv
LyBXZWJDb3JlIG5hbWVwc2FjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26982</attachid>
            <date>2009-01-23 14:10:46 -0800</date>
            <delta_ts>2009-04-29 14:26:21 -0700</delta_ts>
            <desc>ClipboardAndroid.h/.cpp &amp; ChangeLog</desc>
            <filename>23296-patch-1.txt</filename>
            <type>text/plain</type>
            <size>7930</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTk1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDktMDEtMTUgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9hbmRyb2lkOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0NsaXBib2FyZEFu
ZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0NsaXBib2FyZEFu
ZHJvaWQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9Db250ZXh0TWVudUNs
aWVudEFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0NvbnRl
eHRNZW51Q2xpZW50QW5kcm9pZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lk
L0N1cnNvckFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0Ry
YWdEYXRhQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvRXZl
bnRMb29wQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvRmls
ZUNob29zZXJBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9G
aWxlU3lzdGVtQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQv
S2V5RXZlbnRBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9L
ZXlib2FyZENvZGVzLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvTG9jYWxp
emVkU3RyaW5nc0FuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lk
L1BvcHVwTWVudUFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lk
L1JlbmRlclRoZW1lQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJv
aWQvUmVuZGVyVGhlbWVBbmRyb2lkLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJv
aWQvU2NyZWVuQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQv
U2Nyb2xsVmlld0FuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lk
L1NlYXJjaFBvcHVwTWVudUFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9h
bmRyb2lkL1NoYXJlZFRpbWVyQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2FuZHJvaWQvU3lzdGVtVGltZUFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2FuZHJvaWQvVGV4dEJvdW5kYXJpZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9hbmRyb2lkL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1dpZGdldEFuZHJvaWQuY3BwOiBBZGRlZC4KKwogMjAwOS0w
MS0xNSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lk
L0NsaXBib2FyZEFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5k
cm9pZC9DbGlwYm9hcmRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9DbGlwYm9hcmRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv
amVjdAorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDbGlwYm9h
cmRBbmRyb2lkLmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQ2xpcGJvYXJkQW5kcm9pZDo6Q2xpcGJvYXJkQW5kcm9pZChDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBDbGlwYm9h
cmQocG9saWN5LCBpc0ZvckRyYWdnaW5nKQoreworfQorCitDbGlwYm9hcmRBbmRyb2lkOjp+Q2xp
cGJvYXJkQW5kcm9pZCgpCit7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkQW5kcm9pZDo6Y2xlYXJEYXRh
KGNvbnN0IFN0cmluZyYpCit7CisgICAgQVNTRVJUKGlzRm9yRHJhZ2dpbmcoKSk7Cit9CisKK3Zv
aWQgQ2xpcGJvYXJkQW5kcm9pZDo6Y2xlYXJBbGxEYXRhKCkKK3sKKyAgICBBU1NFUlQoaXNGb3JE
cmFnZ2luZygpKTsKK30KKworU3RyaW5nIENsaXBib2FyZEFuZHJvaWQ6OmdldERhdGEoY29uc3Qg
U3RyaW5nJiwgYm9vbCYgc3VjY2VzcykgY29uc3QKK3sgICAgIAorICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICByZXR1cm4gIiI7Cit9CisKK2Jvb2wgQ2xpcGJvYXJkQW5kcm9pZDo6c2V0RGF0YShj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIEFTU0VSVChpc0ZvckRyYWdnaW5n
KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBB
UEkKK0hhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRBbmRyb2lkOjp0eXBlcygpIGNvbnN0Cit7IAor
ICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKK30KKwordm9pZCBDbGlwYm9hcmRBbmRyb2lk
OjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpCit7Cit9CisKK3Zv
aWQgQ2xpcGJvYXJkQW5kcm9pZDo6c2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwgY29uc3QgSW50
UG9pbnQmKQoreworfQorCitEcmFnSW1hZ2VSZWYgQ2xpcGJvYXJkQW5kcm9pZDo6Y3JlYXRlRHJh
Z0ltYWdlKEludFBvaW50JikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDbGlw
Ym9hcmRBbmRyb2lkOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSopCit7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkQW5kcm9p
ZDo6d3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikKK3sKK30KKwor
dm9pZCBDbGlwYm9hcmRBbmRyb2lkOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBG
cmFtZSopCit7CisgICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOworfQorCitib29sIENsaXBib2Fy
ZEFuZHJvaWQ6Omhhc0RhdGEoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0NsaXBib2FyZEFu
ZHJvaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ2xpcGJvYXJk
QW5kcm9pZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0NsaXBi
b2FyZEFuZHJvaWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBDbGlwYm9hcmRBbmRyb2lkX2gKKyNkZWZpbmUgQ2xpcGJvYXJkQW5kcm9pZF9oCisK
KyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENhY2hlZEltYWdlOworCisg
ICAgY2xhc3MgQ2xpcGJvYXJkQW5kcm9pZCA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNo
ZWRSZXNvdXJjZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBDbGlwYm9hcmRBbmRyb2lk
KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIGJvb2wgaXNGb3JEcmFnZ2luZyk7CisgICAg
ICAgIH5DbGlwYm9hcmRBbmRyb2lkKCk7CisgICAgCisgICAgICAgIHZvaWQgY2xlYXJEYXRhKGNv
bnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIGNsZWFyQWxsRGF0YSgpOworICAgICAgICBTdHJp
bmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmLCBib29sJiBzdWNjZXNzKSBjb25zdDsKKyAgICAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIAorICAgICAg
ICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQorICAgICAgICBIYXNoU2V0PFN0cmluZz4g
dHlwZXMoKSBjb25zdDsKKyAgICAKKyAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1h
Z2UqLCBjb25zdCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQo
Tm9kZSosIGNvbnN0IEludFBvaW50Jik7CisJCQorICAgICAgICB2aXJ0dWFsIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYsIEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZVVSTChjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlUmFu
Z2UoUmFuZ2UqLCBGcmFtZSopOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7Cisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2xpcGJvYXJkQW5k
cm9pZF9oCg==
</data>
<flag name="review"
          id="12929"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27055</attachid>
            <date>2009-01-26 17:03:50 -0800</date>
            <delta_ts>2009-01-27 10:42:32 -0800</delta_ts>
            <desc>patch part 2</desc>
            <filename>23296-patch-2.txt</filename>
            <type>text/plain</type>
            <size>10804</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9DdXJzb3JBbmRyb2lkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBB
bmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNkZWZpbmUg
TE9HX1RBRyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cnNv
ci5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDdXJzb3I6OkN1cnNvcihJbWFnZSosIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBDdXJzb3Im
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitjb25z
dCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
c3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGNyb3Nz
Q3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsK
KyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30K
KworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBp
QmVhbUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29y
IGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNv
ciYgZWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0
aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhSZXNp
emVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBj
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNv
cigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAg
cmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4g
YzsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2Nv
bnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vy
c29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHdl
c3RSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1
cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNp
emVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBj
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29y
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICBy
ZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJz
b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAg
IHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1
cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7Cisg
ICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4g
YzsKK30KKworY29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25z
dCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYg
Y2VsbEN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29y
IGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJzb3Io
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJl
dHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2Nv
bnN0IEN1cnNvciYgY29weUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBz
dGF0aWMgQ3Vyc29yIGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgcHJvZ3Jl
c3NDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBj
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsK
K30KKworY29uc3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29y
JiBtaWRkbGVQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0
YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0UGFu
bmluZ0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMgQ3Vyc29y
IGM7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhQYW5uaW5nQ3Vyc29y
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICBy
ZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RQYW5uaW5nQ3Vyc29yKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4g
YzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJzb3IgYzsKKyAgICByZXR1cm4gYzsKK30K
KworY29uc3QgQ3Vyc29yJiBzb3V0aFBhbm5pbmdDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBD
dXJzb3ImIHNvdXRoRWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3Im
IHNvdXRoV2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
c3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHdlc3RQ
YW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHN0YXRpYyBDdXJz
b3IgYzsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkgewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBj
OworfQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkgeworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgc3RhdGljIEN1cnNvciBjOworICAgIHJldHVybiBjOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRHJhZ0RhdGFB
bmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRHJhZ0Rh
dGFBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9E
cmFnRGF0YUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACisvKgorICog
Q29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKKworI2luY2x1ZGUgIkNs
aXBib2FyZC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFn
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0
UmVwbGFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisgICAgCitDb2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIENvbG9yKCk7Cit9CisgICAgCitQYXNzUmVmUHRyPENsaXBib2FyZD4g
RHJhZ0RhdGE6OmNyZWF0ZUNsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisgICAgCitib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGli
bGVDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitib29sIERy
YWdEYXRhOjpjb250YWluc1VSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAg
IAorU3RyaW5nIERyYWdEYXRhOjphc1VSTChTdHJpbmcqKSBjb25zdAoreworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKyAgICAKKyAgICAKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJh
Z0RhdGE6OmFzRnJhZ21lbnQoRG9jdW1lbnQqKSBjb25zdAoreworICAgIHJldHVybiAwOworfQor
Cit2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0Cit7Cit9
CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL0V2ZW50TG9vcEFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vYW5kcm9pZC9FdmVudExvb3BBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vYW5kcm9pZC9FdmVudExvb3BBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNv
dXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVu
dExvb3AuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBFdmVudExvb3A6OmN5Y2xlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27076</attachid>
            <date>2009-01-27 10:42:32 -0800</date>
            <delta_ts>2009-05-04 16:16:25 -0700</delta_ts>
            <desc>patch part 2</desc>
            <filename>23296-patch-2.txt</filename>
            <type>text/plain</type>
            <size>9942</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9DdXJzb3JBbmRyb2lkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBB
bmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNkZWZpbmUg
TE9HX1RBRyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cnNv
ci5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDdXJzb3I6OkN1cnNvcihJbWFnZSosIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBDdXJzb3Im
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdGF0
aWMgQ3Vyc29yIGM7Citjb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY3Jvc3NDdXJz
b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0
IEN1cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJz
b3ImIHdhaXRDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0UmVzaXplQ3Vyc29yKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJz
b3ImIG5vcnRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBu
b3J0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhF
YXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBj
OworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0UmVz
aXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQor
Citjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNp
emVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisK
K2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRo
V2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBjb2x1bW5SZXNpemVDdXJzb3IoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYg
cm93UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBj
OworfQorCitjb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBjZWxsQ3Vyc29y
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBD
dXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBjb3B5Q3Vy
c29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25z
dCBDdXJzb3ImIHByb2dyZXNzQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vbmVDdXJz
b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0
IEN1cnNvciYgbWlkZGxlUGFubmluZ0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0UGFubmluZ0N1cnNvcigpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29y
JiBub3J0aFBhbm5pbmdDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0UGFubmluZ0N1cnNvcigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBu
b3J0aFdlc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoUGFubmluZ0N1cnNvcigpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0
aEVhc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgd2Vz
dFBhbm5pbmdDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgZ3JhYkN1cnNvcigpIHsKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkgewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9EcmFnRGF0YUFuZHJvaWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9EcmFnRGF0YUFuZHJv
aWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0RyYWdEYXRh
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJk
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitib29sIERyYWdEYXRhOjpj
b250YWluc0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJh
Z0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1N0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKyAgICAKK0NvbG9yIERyYWdEYXRhOjphc0NvbG9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQ29sb3IoKTsKK30KKyAgICAKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBEcmFnRGF0
YTo6Y3JlYXRlQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKyAgICAKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRl
bnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jvb2wgRHJhZ0RhdGE6
OmNvbnRhaW5zVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitTdHJp
bmcgRHJhZ0RhdGE6OmFzVVJMKFN0cmluZyopIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorICAgIAorICAgIAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6
YXNGcmFnbWVudChEb2N1bWVudCopIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
RHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JikgY29uc3QKK3sKK30KKworYm9v
bCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJv
aWQvRXZlbnRMb29wQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL0V2ZW50TG9vcEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9hbmRyb2lkL0V2ZW50TG9vcEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFBy
b2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIEV2ZW50TG9vcDo6Y3ljbGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="12997"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27434</attachid>
            <date>2009-02-06 16:59:18 -0800</date>
            <delta_ts>2009-05-04 16:21:58 -0700</delta_ts>
            <desc>patch part 3</desc>
            <filename>23296-patch-3.txt</filename>
            <type>text/plain</type>
            <size>6216</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9GaWxlQ2hvb3NlckFuZHJvaWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9GaWxlQ2hvb3NlckFuZHJvaWQu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0ZpbGVDaG9vc2Vy
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKKworI2luY2x1ZGUgIkZvbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1l
Rm9yV2lkdGgoY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoKSBjb25zdCAKK3sgCisgICAgLy8g
RklYTUU6IFRoaXMgY291bGQgYmUgYSBsb3QgZmFzdGVyLCBidXQgYXNzdW1pbmcgdGhlIGRhdGEg
d2lsbCBub3QKKyAgICAvLyBvZnRlbiBiZSBtdWNoIGxvbmdlciB0aGFuIHRoZSBwcm92aWRlZCB3
aWR0aCwgdGhpcyBtYXkgYmUgZmFzdCBlbm91Z2guCisgICAgU3RyaW5nIG91dHB1dCA9IG1fZmls
ZW5hbWVzWzBdLmNvcHkoKTsKKyAgICB3aGlsZSAoZm9udC53aWR0aChUZXh0UnVuKG91dHB1dC5p
bXBsKCkpKSA+IHdpZHRoICYmIG91dHB1dC5sZW5ndGgoKSA+IDQpIHsKKyAgICAgICAgb3V0cHV0
ID0gb3V0cHV0LnJlcGxhY2Uob3V0cHV0Lmxlbmd0aCgpIC0gNCwgNCwgU3RyaW5nKCIuLi4iKSk7
CisgICAgfQorICAgIHJldHVybiBvdXRwdXQ7Cit9CisKKy8vIFRoZSBmb2xsb3dpbmcgdHdvIHN0
cmluZ3MgYXJlIHVzZWQgZm9yIEZpbGUgVXBsb2FkIGZvcm0gY29udHJvbCwgaWUKKy8vIDxpbnB1
dCB0eXBlPSJmaWxlIj4uIFRoZSBmaXJzdCBpcyB0aGUgdGV4dCB0aGF0IGFwcGVhcnMgb24gdGhl
IGJ1dHRvbgorLy8gdGhhdCB3aGVuIHByZXNzZWQsIHRoZSB1c2VyIGNhbiBicm93c2UgZm9yIGFu
ZCBzZWxlY3QgYSBmaWxlLiBUaGUKKy8vIHNlY29uZCBzdHJpbmcgaXMgcmVuZGVyZWQgb24gdGhl
IHNjcmVlbiB3aGVuIG5vIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWQuCitTdHJpbmcgZmlsZUJ1dHRv
bkNob29zZUZpbGVMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZygiVXBsb2FkcyBEaXNhYmxl
ZCIpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKQoreworICAg
IHJldHVybiBTdHJpbmcoIk5vIGZpbGUgc2VsZWN0ZWQiKTsKK30KKworfSAvLyBuYW1lc2FwY2Ug
V2ViQ29yZQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVt
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRmls
ZVN5c3RlbUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSAiY3V0aWxzL2xv
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEdsb2JhbCBzdGF0aWMgdXNlZCB0byBz
dG9yZSB0aGUgYmFzZSB0byB0aGUgcGx1Z2luIHBhdGguCisvLyBUaGlzIGlzIHNldCBpbiBXZWJT
ZXR0aW5ncy5jcHAKK1N0cmluZyBzUGx1Z2luUGF0aDsKKworQ1N0cmluZyBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKSB7CisgICAgcmV0dXJuIHBhdGgudXRmOCgp
OworfQorCitDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByZWZpeCwgUGxh
dGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaW50IG51bWJlciA9IHJhbmQoKSAlIDEw
MDAwICsgMTsKKyAgICBDU3RyaW5nIGZpbGVuYW1lOworICAgIGRvIHsKKyAgICAgICAgU3RyaW5n
IHBhdGggPSBzUGx1Z2luUGF0aDsKKyAgICAgICAgcGF0aC5hcHBlbmQoIi8iKTsKKyAgICAgICAg
cGF0aC5hcHBlbmQocHJlZml4KTsKKyAgICAgICAgcGF0aC5hcHBlbmQoU3RyaW5nOjpudW1iZXIo
bnVtYmVyKSk7CisgICAgICAgIGZpbGVuYW1lID0gcGF0aC51dGY4KCk7CisgICAgICAgIGNvbnN0
IGNoYXIgKmZzdHIgPSBmaWxlbmFtZS5kYXRhKCk7CisgICAgICAgIGhhbmRsZSA9IG9wZW4oZmls
ZW5hbWUuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIFNfSVJVU1IgfCBTX0lX
VVNSKTsKKyAgICAgICAgbnVtYmVyKys7CisgICAgfSB3aGlsZSAoaGFuZGxlID09IC0xICYmIGVy
cm5vID09IEVFWElTVCk7CisgICAgCisgICAgaWYgKGhhbmRsZSAhPSAtMSkgeworICAgICAgICBy
ZXR1cm4gZmlsZW5hbWU7CisgICAgfQorICAgIHJldHVybiBDU3RyaW5nKCk7Cit9CisKK2Jvb2wg
dW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKK3sKKyAgICByZXR1cm4gZGxjbG9z
ZShtb2R1bGUpID09IDA7Cit9CisKK3ZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYg
aGFuZGxlKQoreworICAgIGlmIChpc0hhbmRsZVZhbGlkKGhhbmRsZSkpIHsKKyAgICAgICAgY2xv
c2UoaGFuZGxlKTsKKyAgICAgICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsK
KyAgICB9Cit9CisKK2ludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGludCB0b3RhbEJ5dGVzV3JpdHRl
biA9IDA7CisgICAgd2hpbGUgKHRvdGFsQnl0ZXNXcml0dGVuIDwgbGVuZ3RoKSB7CisgICAgICAg
IGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZShoYW5kbGUsIGRhdGEsIGxlbmd0aCAtIHRvdGFsQnl0
ZXNXcml0dGVuKTsKKyAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA8IDAgJiYgZXJybm8gIT0gRUlO
VFIpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGVsc2UgaWYgKGJ5dGVzV3JpdHRl
biA+IDApCisgICAgICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBieXRlc1dyaXR0ZW47Cisg
ICAgfQorCisgICAgcmV0dXJuIHRvdGFsQnl0ZXNXcml0dGVuOworfQorCisvLyBuZXcgYXMgb2Yg
U1ZOIGNoYW5nZSAzNjI2OSwgU2VwdCA4LCAyMDA4CitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgo
KSAKK3sKKyAgICByZXR1cm4gc1BsdWdpblBhdGg7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>
<flag name="review"
          id="13268"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27435</attachid>
            <date>2009-02-06 16:59:47 -0800</date>
            <delta_ts>2009-05-04 16:25:17 -0700</delta_ts>
            <desc>patch part 4</desc>
            <filename>23296-patch-4.txt</filename>
            <type>text/plain</type>
            <size>22193</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlFdmVudEFuZHJvaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlFdmVudEFuZHJvaWQuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleUV2ZW50QW5kcm9pZC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcs
IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSAiS2V5
Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8dWkv
S2V5Y29kZUxhYmVscy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIGNvbXBhcmUgdG8g
c2FtZSBmdW5jdGlvbiBpbiBnZGsvS2V5RXZlbnRHZGsuY3BwCitzdGF0aWMgaW50IHdpbmRvd3NL
ZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleUNvZGUpIHsKKyAgICAvLyBEb2VzIG5v
dCBwcm92aWRlIGFsbCBrZXkgY29kZXMsIGFuZCBkb2VzIG5vdCBoYW5kbGUgYWxsIGtleXMuCisg
ICAgc3dpdGNoKGtleUNvZGUpIHsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURlbDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19CQUNLOworICAgICAgICBjYXNlIGtLZXlDb2RlVGFiOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX1RBQjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUNsZWFyOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0NMRUFSOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZENlbnRlcjoKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZU5ld2xpbmU6CisgICAgICAgICAgICByZXR1cm4gVktfUkVUVVJO
OworICAgICAgICBjYXNlIGtLZXlDb2RlU2hpZnRMZWZ0OgorICAgICAgICBjYXNlIGtLZXlDb2Rl
U2hpZnRSaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19TSElGVDsKKyAgICAgICAgLy8gYmFj
ayB3aWxsIHNlcnZlIGFzIGVzY2FwZSwgYWx0aG91Z2ggd2UgcHJvYmFibHkgZG8gbm90IGhhdmUg
YWNjZXNzIHRvIGl0CisgICAgICAgIGNhc2Uga0tleUNvZGVCYWNrOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0VTQ0FQRTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVNwYWNlOgorICAgICAgICAgICAg
cmV0dXJuIFZLX1NQQUNFOworICAgICAgICBjYXNlIGtLZXlDb2RlSG9tZToKKyAgICAgICAgICAg
IHJldHVybiBWS19IT01FOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZExlZnQ6CisgICAgICAg
ICAgICByZXR1cm4gVktfTEVGVDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRVcDoKKyAgICAg
ICAgICAgIHJldHVybiBWS19VUDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRSaWdodDoKKyAg
ICAgICAgICAgIHJldHVybiBWS19SSUdIVDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWREb3du
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047CisgICAgICAgIGNhc2Uga0tleUNvZGUwOgor
ICAgICAgICAgICAgcmV0dXJuIFZLXzA7CisgICAgICAgIGNhc2Uga0tleUNvZGUxOgorICAgICAg
ICAgICAgcmV0dXJuIFZLXzE7CisgICAgICAgIGNhc2Uga0tleUNvZGUyOgorICAgICAgICAgICAg
cmV0dXJuIFZLXzI7CisgICAgICAgIGNhc2Uga0tleUNvZGUzOgorICAgICAgICAgICAgcmV0dXJu
IFZLXzM7CisgICAgICAgIGNhc2Uga0tleUNvZGU0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzQ7
CisgICAgICAgIGNhc2Uga0tleUNvZGU1OgorICAgICAgICAgICAgcmV0dXJuIFZLXzU7CisgICAg
ICAgIGNhc2Uga0tleUNvZGU2OgorICAgICAgICAgICAgcmV0dXJuIFZLXzY7CisgICAgICAgIGNh
c2Uga0tleUNvZGU3OgorICAgICAgICAgICAgcmV0dXJuIFZLXzc7CisgICAgICAgIGNhc2Uga0tl
eUNvZGU4OgorICAgICAgICAgICAgcmV0dXJuIFZLXzg7CisgICAgICAgIGNhc2Uga0tleUNvZGU5
OgorICAgICAgICAgICAgcmV0dXJuIFZLXzk7CisgICAgICAgIGNhc2Uga0tleUNvZGVBOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0E7CisgICAgICAgIGNhc2Uga0tleUNvZGVCOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0I7CisgICAgICAgIGNhc2Uga0tleUNvZGVDOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0M7CisgICAgICAgIGNhc2Uga0tleUNvZGVEOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0Q7CisgICAgICAgIGNhc2Uga0tleUNvZGVFOgorICAgICAgICAgICAgcmV0dXJuIFZLX0U7Cisg
ICAgICAgIGNhc2Uga0tleUNvZGVGOgorICAgICAgICAgICAgcmV0dXJuIFZLX0Y7CisgICAgICAg
IGNhc2Uga0tleUNvZGVHOgorICAgICAgICAgICAgcmV0dXJuIFZLX0c7CisgICAgICAgIGNhc2Ug
a0tleUNvZGVIOgorICAgICAgICAgICAgcmV0dXJuIFZLX0g7CisgICAgICAgIGNhc2Uga0tleUNv
ZGVJOgorICAgICAgICAgICAgcmV0dXJuIFZLX0k7CisgICAgICAgIGNhc2Uga0tleUNvZGVKOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0o7CisgICAgICAgIGNhc2Uga0tleUNvZGVLOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0s7CisgICAgICAgIGNhc2Uga0tleUNvZGVMOgorICAgICAgICAgICAg
cmV0dXJuIFZLX0w7CisgICAgICAgIGNhc2Uga0tleUNvZGVNOgorICAgICAgICAgICAgcmV0dXJu
IFZLX007CisgICAgICAgIGNhc2Uga0tleUNvZGVOOgorICAgICAgICAgICAgcmV0dXJuIFZLX047
CisgICAgICAgIGNhc2Uga0tleUNvZGVPOgorICAgICAgICAgICAgcmV0dXJuIFZLX087CisgICAg
ICAgIGNhc2Uga0tleUNvZGVQOgorICAgICAgICAgICAgcmV0dXJuIFZLX1A7CisgICAgICAgIGNh
c2Uga0tleUNvZGVROgorICAgICAgICAgICAgcmV0dXJuIFZLX1E7CisgICAgICAgIGNhc2Uga0tl
eUNvZGVSOgorICAgICAgICAgICAgcmV0dXJuIFZLX1I7CisgICAgICAgIGNhc2Uga0tleUNvZGVT
OgorICAgICAgICAgICAgcmV0dXJuIFZLX1M7CisgICAgICAgIGNhc2Uga0tleUNvZGVUOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX1Q7CisgICAgICAgIGNhc2Uga0tleUNvZGVVOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX1U7CisgICAgICAgIGNhc2Uga0tleUNvZGVWOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1Y7CisgICAgICAgIGNhc2Uga0tleUNvZGVXOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1c7CisgICAgICAgIGNhc2Uga0tleUNvZGVYOgorICAgICAgICAgICAgcmV0dXJuIFZLX1g7Cisg
ICAgICAgIGNhc2Uga0tleUNvZGVZOgorICAgICAgICAgICAgcmV0dXJuIFZLX1k7CisgICAgICAg
IGNhc2Uga0tleUNvZGVaOgorICAgICAgICAgICAgcmV0dXJuIFZLX1o7CisgICAgICAgIC8vIGNv
bG9uCisgICAgICAgIGNhc2Uga0tleUNvZGVTZW1pY29sb246CisgICAgICAgICAgICByZXR1cm4g
VktfT0VNXzE7CisgICAgICAgIGNhc2Uga0tleUNvZGVDb21tYToKKyAgICAgICAgICAgIHJldHVy
biBWS19PRU1fQ09NTUE7CisgICAgICAgIGNhc2Uga0tleUNvZGVNaW51czoKKyAgICAgICAgICAg
IHJldHVybiBWS19PRU1fTUlOVVM7CisgICAgICAgIGNhc2Uga0tleUNvZGVFcXVhbHM6CisgICAg
ICAgICAgICByZXR1cm4gVktfT0VNX1BMVVM7CisgICAgICAgIGNhc2Uga0tleUNvZGVQZXJpb2Q6
CisgICAgICAgICAgICByZXR1cm4gVktfT0VNX1BFUklPRDsKKyAgICAgICAgY2FzZSBrS2V5Q29k
ZVNsYXNoOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8yOworICAgICAgICAvLyBtYXliZSBu
b3QgdGhlIHJpZ2h0IGNob2ljZQorICAgICAgICBjYXNlIGtLZXlDb2RlTGVmdEJyYWNrZXQ6Cisg
ICAgICAgICAgICByZXR1cm4gVktfT0VNXzQ7CisgICAgICAgIGNhc2Uga0tleUNvZGVCYWNrc2xh
c2g6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzU7CisgICAgICAgIGNhc2Uga0tleUNvZGVS
aWdodEJyYWNrZXQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzY7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBTdHJpbmcga2V5
SWRlbnRpZmllckZvckFuZHJvaWRLZXlDb2RlKGludCBrZXlDb2RlKQoreworICAgIC8vIERvZXMg
bm90IHJldHVybiBhbGwgb2YgdGhlIHNhbWUga2V5IGlkZW50aWZpZXJzLCBhbmQKKyAgICAvLyBk
b2VzIG5vdCBoYW5kbGUgYWxsIHRoZSBrZXlzLgorICAgIHN3aXRjaCAoa2V5Q29kZSkgeworICAg
ICAgICBjYXNlIGtLZXlDb2RlQ2xlYXI6CisgICAgICAgICAgICByZXR1cm4gIkNsZWFyIjsKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZU5ld2xpbmU6CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFkQ2Vu
dGVyOgorICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7CisgICAgICAgIGNhc2Uga0tleUNvZGVI
b21lOgorICAgICAgICAgICAgcmV0dXJuICJIb21lIjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURw
YWREb3duOgorICAgICAgICAgICAgcmV0dXJuICJEb3duIjsKKyAgICAgICAgY2FzZSBrS2V5Q29k
ZURwYWRMZWZ0OgorICAgICAgICAgICAgcmV0dXJuICJMZWZ0IjsKKyAgICAgICAgY2FzZSBrS2V5
Q29kZURwYWRSaWdodDoKKyAgICAgICAgICAgIHJldHVybiAiUmlnaHQiOworICAgICAgICBjYXNl
IGtLZXlDb2RlRHBhZFVwOgorICAgICAgICAgICAgcmV0dXJuICJVcCI7CisgICAgICAgIC8vIFN0
YW5kYXJkIHNheXMgdGhhdCBERUwgYmVjb21lcyBVKzAwMDA3Ri4KKyAgICAgICAgY2FzZSBrS2V5
Q29kZURlbDoKKyAgICAgICAgICAgIHJldHVybiAiVSswMDAwN0YiOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgY2hhciB1cHBlclsxNl07CisgICAgICAgICAgICBzcHJpbnRmKHVwcGVy
LCAiVSslMDZYIiwgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChrZXlDb2RlKSk7CisgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHVwcGVyKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIHNpbmdsZUNoYXJhY3RlclN0cmluZyhpbnQgYykgCit7CisgICAgaWYgKCFjKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKGMgPiAweGZmZmYpIHsKKyAgICAgICAgVUNoYXIg
bGVhZCA9IFUxNl9MRUFEKGMpOworICAgICAgICBVQ2hhciB0cmFpbCA9IFUxNl9UUkFJTChjKTsK
KyAgICAgICAgVUNoYXIgdXRmMTZbMl0gPSB7bGVhZCwgdHJhaWx9OworICAgICAgICByZXR1cm4g
U3RyaW5nKHV0ZjE2LCAyKTsKKyAgICB9CisgICAgVUNoYXIgbiA9IChVQ2hhciljOworICAgIHJl
dHVybiBTdHJpbmcoJm4sIDEpOworfQorCitQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3Jt
S2V5Ym9hcmRFdmVudChpbnQga2V5Q29kZSwgVUNoYXIzMiB1bmljaGFyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0eXBlLCBpbnQgcmVwZWF0Q291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RpZmll
cktleSBtb2RzKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3RleHQoc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKHVuaWNoYXIpKQorICAgICwgbV91bm1vZGlmaWVkVGV4dChzaW5nbGVDaGFyYWN0
ZXJTdHJpbmcodW5pY2hhcikpCisgICAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckZv
ckFuZHJvaWRLZXlDb2RlKGtleUNvZGUpKQorICAgICwgbV9hdXRvUmVwZWF0KHJlcGVhdENvdW50
ID4gMCkKKyAgICAsIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yS2V5
RXZlbnQoa2V5Q29kZSkpCisgICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKGtleUNvZGUpCisg
ICAgLCBtX2lzS2V5cGFkKGZhbHNlKQorICAgICwgbV9zaGlmdEtleSgobW9kcyAmIFNoaWZ0S2V5
KSAhPSAwKQorICAgICwgbV9jdHJsS2V5KChtb2RzICYgQ3RybEtleSkgIT0gMCkKKyAgICAsIG1f
YWx0S2V5KChtb2RzICYgQWx0S2V5KSAhPSAwKQorICAgICwgbV9tZXRhS2V5KChtb2RzICYgTWV0
YUtleSkgIT0gMCkKKyAgICAvLyBhZGRlZCBmb3IgYW5kcm9pZAorICAgICwgbV9yZXBlYXRDb3Vu
dChyZXBlYXRDb3VudCkKKyAgICAsIG1fdW5pY2hhcih1bmljaGFyKQoreworICAgIC8vIENvcGll
ZCBmcm9tIHRoZSBtYWMgcG9ydAorICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSAn
XHInKSB7CisgICAgICAgIG1fdGV4dCA9ICJcciI7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQg
PSAiXHIiOworICAgIH0KKworICAgIGlmIChtX3RleHQgPT0gIlx4N0YiKQorICAgICAgICBtX3Rl
eHQgPSAiXHg4IjsKKyAgICBpZiAobV91bm1vZGlmaWVkVGV4dCA9PSAiXHg3RiIpCisgICAgICAg
IG1fdW5tb2RpZmllZFRleHQgPSAiXHg4IjsKKworICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5
Q29kZSA9PSA5KSB7CisgICAgICAgIG1fdGV4dCA9ICJceDkiOworICAgICAgICBtX3VubW9kaWZp
ZWRUZXh0ID0gIlx4OSI7CisgICAgfQorfQorCitib29sIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
Y3VycmVudENhcHNMb2NrU3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRl
S2V5RG93bkV2ZW50KFR5cGUgdHlwZSwgYm9vbCBiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKQor
eworICAgIC8vIENvcGllZCB3aXRoIG1vZGlmaWNhdGlvbiBmcm9tIHRoZSBtYWMgcG9ydC4KKyAg
ICBBU1NFUlQobV90eXBlID09IEtleURvd24pOworICAgIEFTU0VSVCh0eXBlID09IFJhd0tleURv
d24gfHwgdHlwZSA9PSBDaGFyKTsKKyAgICBtX3R5cGUgPSB0eXBlOworICAgIGlmIChiYWNrd2Fy
ZENvbXBhdGliaWxpdHlNb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodHlwZSA9PSBS
YXdLZXlEb3duKSB7CisgICAgICAgIG1fdGV4dCA9IFN0cmluZygpOworICAgICAgICBtX3VubW9k
aWZpZWRUZXh0ID0gU3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9rZXlJZGVudGlm
aWVyID0gU3RyaW5nKCk7CisgICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gMDsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9LZXlib2FyZENvZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL0tleWJvYXJkQ29kZXMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9LZXlib2FyZENvZGVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQ1IEBACisv
KgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgS2V5Ym9hcmRDb2Rl
c19ICisjZGVmaW5lIEtleWJvYXJkQ29kZXNfSAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IFZLX0xCVVRUT04gKDAxKSBMZWZ0IG1vdXNlIGJ1dHRvbgorLy8gVktfUkJVVFRPTiAoMDIpIFJp
Z2h0IG1vdXNlIGJ1dHRvbgorLy8gVktfQ0FOQ0VMICgwMykgQ29udHJvbC1icmVhayBwcm9jZXNz
aW5nCisvLyBWS19NQlVUVE9OICgwNCkgTWlkZGxlIG1vdXNlIGJ1dHRvbiAodGhyZWUtYnV0dG9u
IG1vdXNlKQorLy8gVktfWEJVVFRPTjEgKDA1KQorLy8gVktfWEJVVFRPTjIgKDA2KQorCisvLyBW
S19CQUNLICgwOCkgQkFDS1NQQUNFIGtleQorY29uc3QgaW50IFZLX0JBQ0sgPSAweDA4OworCisv
LyBWS19UQUIgKDA5KSBUQUIga2V5Citjb25zdCBpbnQgVktfVEFCID0gMHgwOTsKKworLy8gVktf
Q0xFQVIgKDBDKSBDTEVBUiBrZXkKK2NvbnN0IGludCBWS19DTEVBUiA9IDB4MEM7CisKKy8vIFZL
X1JFVFVSTiAoMEQpCitjb25zdCBpbnQgVktfUkVUVVJOID0gMHgwRDsKKworLy8gVktfU0hJRlQg
KDEwKSBTSElGVCBrZXkKK2NvbnN0IGludCBWS19TSElGVCA9IDB4MTA7CisKKy8vIFZLX0NPTlRS
T0wgKDExKSBDVFJMIGtleQorY29uc3QgaW50IFZLX0NPTlRST0wgPSAweDExOworCisvLyBWS19N
RU5VICgxMikgQUxUIGtleQorY29uc3QgaW50IFZLX01FTlUgPSAweDEyOworCisvLyBWS19QQVVT
RSAoMTMpIFBBVVNFIGtleQorY29uc3QgaW50IFZLX1BBVVNFID0gMHgxMzsKKworLy8gVktfQ0FQ
SVRBTCAoMTQpIENBUFMgTE9DSyBrZXkKK2NvbnN0IGludCBWS19DQVBJVEFMID0gMHgxNDsKKwor
Ly8gVktfS0FOQSAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCitjb25z
dCBpbnQgVktfS0FOQSA9IDB4MTU7CisKKy8vIFZLX0hBTkdVRUwgKDE1KSBJTUUgSGFuZ3VlbCBt
b2RlIChtYWludGFpbmVkIGZvciBjb21wYXRpYmlsaXR5OyB1c2UgVktfSEFOR1VMKQorLy8gVktf
SEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCitjb25zdCBpbnQgVktfSEFOR1VMID0gMHgxNTsK
KworLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVuamEgbW9kZQorY29uc3QgaW50IFZLX0pVTkpBID0g
MHgxNzsKKworLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwgbW9kZQorY29uc3QgaW50IFZLX0ZJ
TkFMID0gMHgxODsKKworLy8gVktfSEFOSkEgKDE5KSBJTUUgSGFuamEgbW9kZQorY29uc3QgaW50
IFZLX0hBTkpBID0gMHgxOTsKKworLy8gVktfS0FOSkkgKDE5KSBJTUUgS2FuamkgbW9kZQorY29u
c3QgaW50IFZLX0tBTkpJID0gMHgxOTsKKworLy8gVktfRVNDQVBFICgxQikgRVNDIGtleQorY29u
c3QgaW50IFZLX0VTQ0FQRSA9IDB4MUI7CisKKy8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVy
dAorY29uc3QgaW50IFZLX0NPTlZFUlQgPSAweDFDOworCisvLyBWS19OT05DT05WRVJUICgxRCkg
SU1FIG5vbmNvbnZlcnQKK2NvbnN0IGludCBWS19OT05DT05WRVJUID0gMHgxRDsKKworLy8gVktf
QUNDRVBUICgxRSkgSU1FIGFjY2VwdAorY29uc3QgaW50IFZLX0FDQ0VQVCA9IDB4MUU7CisKKy8v
IFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAorY29uc3QgaW50IFZL
X01PREVDSEFOR0UgPSAweDFGOworCisvLyBWS19TUEFDRSAoMjApIFNQQUNFQkFSCitjb25zdCBp
bnQgVktfU1BBQ0UgPSAweDIwOworCisvLyBWS19QUklPUiAoMjEpIFBBR0UgVVAga2V5Citjb25z
dCBpbnQgVktfUFJJT1IgPSAweDIxOworCisvLyBWS19ORVhUICgyMikgUEFHRSBET1dOIGtleQor
Y29uc3QgaW50IFZLX05FWFQgPSAweDIyOworCisvLyBWS19FTkQgKDIzKSBFTkQga2V5Citjb25z
dCBpbnQgVktfRU5EID0gMHgyMzsKKworLy8gVktfSE9NRSAoMjQpIEhPTUUga2V5Citjb25zdCBp
bnQgVktfSE9NRSA9IDB4MjQ7CisKKy8vIFZLX0xFRlQgKDI1KSBMRUZUIEFSUk9XIGtleQorY29u
c3QgaW50IFZLX0xFRlQgPSAweDI1OworCisvLyBWS19VUCAoMjYpIFVQIEFSUk9XIGtleQorY29u
c3QgaW50IFZLX1VQID0gMHgyNjsKKworLy8gVktfUklHSFQgKDI3KSBSSUdIVCBBUlJPVyBrZXkK
K2NvbnN0IGludCBWS19SSUdIVCA9IDB4Mjc7CisKKy8vIFZLX0RPV04gKDI4KSBET1dOIEFSUk9X
IGtleQorY29uc3QgaW50IFZLX0RPV04gPSAweDI4OworCisvLyBWS19TRUxFQ1QgKDI5KSBTRUxF
Q1Qga2V5Citjb25zdCBpbnQgVktfU0VMRUNUID0gMHgyOTsKKworLy8gVktfUFJJTlQgKDJBKSBQ
UklOVCBrZXkKK2NvbnN0IGludCBWS19QUklOVCA9IDB4MkE7CisKKy8vIFZLX0VYRUNVVEUgKDJC
KSBFWEVDVVRFIGtleQorY29uc3QgaW50IFZLX0VYRUNVVEUgPSAweDJCOworCisvLyBWS19TTkFQ
U0hPVCAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKK2NvbnN0IGludCBWS19TTkFQU0hPVCA9IDB4MkM7
CisKKy8vIFZLX0lOU0VSVCAoMkQpIElOUyBrZXkKK2NvbnN0IGludCBWS19JTlNFUlQgPSAweDJE
OworCisvLyBWS19ERUxFVEUgKDJFKSBERUwga2V5Citjb25zdCBpbnQgVktfREVMRVRFID0gMHgy
RTsKKworLy8gVktfSEVMUCAoMkYpIEhFTFAga2V5Citjb25zdCBpbnQgVktfSEVMUCA9IDB4MkY7
CisKKy8vICgzMCkgMCBrZXkKK2NvbnN0IGludCBWS18wID0gMHgzMDsKKworLy8gKDMxKSAxIGtl
eQorY29uc3QgaW50IFZLXzEgPSAweDMxOworCisvLyAoMzIpIDIga2V5Citjb25zdCBpbnQgVktf
MiA9IDB4MzI7CisKKy8vICgzMykgMyBrZXkKK2NvbnN0IGludCBWS18zID0gMHgzMzsKKworLy8g
KDM0KSA0IGtleQorY29uc3QgaW50IFZLXzQgPSAweDM0OworCisvLyAoMzUpIDUga2V5OworCitj
b25zdCBpbnQgVktfNSA9IDB4MzU7CisKKy8vICgzNikgNiBrZXkKK2NvbnN0IGludCBWS182ID0g
MHgzNjsKKworLy8gKDM3KSA3IGtleQorY29uc3QgaW50IFZLXzcgPSAweDM3OworCisvLyAoMzgp
IDgga2V5Citjb25zdCBpbnQgVktfOCA9IDB4Mzg7CisKKy8vICgzOSkgOSBrZXkKK2NvbnN0IGlu
dCBWS185ID0gMHgzOTsKKworLy8gKDQxKSBBIGtleQorY29uc3QgaW50IFZLX0EgPSAweDQxOwor
CisvLyAoNDIpIEIga2V5Citjb25zdCBpbnQgVktfQiA9IDB4NDI7CisKKy8vICg0MykgQyBrZXkK
K2NvbnN0IGludCBWS19DID0gMHg0MzsKKworLy8gKDQ0KSBEIGtleQorY29uc3QgaW50IFZLX0Qg
PSAweDQ0OworCisvLyAoNDUpIEUga2V5Citjb25zdCBpbnQgVktfRSA9IDB4NDU7CisKKy8vICg0
NikgRiBrZXkKK2NvbnN0IGludCBWS19GID0gMHg0NjsKKworLy8gKDQ3KSBHIGtleQorY29uc3Qg
aW50IFZLX0cgPSAweDQ3OworCisvLyAoNDgpIEgga2V5Citjb25zdCBpbnQgVktfSCA9IDB4NDg7
CisKKy8vICg0OSkgSSBrZXkKK2NvbnN0IGludCBWS19JID0gMHg0OTsKKworLy8gKDRBKSBKIGtl
eQorY29uc3QgaW50IFZLX0ogPSAweDRBOworCisvLyAoNEIpIEsga2V5Citjb25zdCBpbnQgVktf
SyA9IDB4NEI7CisKKy8vICg0QykgTCBrZXkKK2NvbnN0IGludCBWS19MID0gMHg0QzsKKworLy8g
KDREKSBNIGtleQorY29uc3QgaW50IFZLX00gPSAweDREOworCisvLyAoNEUpIE4ga2V5Citjb25z
dCBpbnQgVktfTiA9IDB4NEU7CisKKy8vICg0RikgTyBrZXkKK2NvbnN0IGludCBWS19PID0gMHg0
RjsKKworLy8gKDUwKSBQIGtleQorY29uc3QgaW50IFZLX1AgPSAweDUwOworCisvLyAoNTEpIFEg
a2V5Citjb25zdCBpbnQgVktfUSA9IDB4NTE7CisKKy8vICg1MikgUiBrZXkKK2NvbnN0IGludCBW
S19SID0gMHg1MjsKKworLy8gKDUzKSBTIGtleQorY29uc3QgaW50IFZLX1MgPSAweDUzOworCisv
LyAoNTQpIFQga2V5Citjb25zdCBpbnQgVktfVCA9IDB4NTQ7CisKKy8vICg1NSkgVSBrZXkKK2Nv
bnN0IGludCBWS19VID0gMHg1NTsKKworLy8gKDU2KSBWIGtleQorY29uc3QgaW50IFZLX1YgPSAw
eDU2OworCisvLyAoNTcpIFcga2V5Citjb25zdCBpbnQgVktfVyA9IDB4NTc7CisKKy8vICg1OCkg
WCBrZXkKK2NvbnN0IGludCBWS19YID0gMHg1ODsKKworLy8gKDU5KSBZIGtleQorY29uc3QgaW50
IFZLX1kgPSAweDU5OworCisvLyAoNUEpIFoga2V5Citjb25zdCBpbnQgVktfWiA9IDB4NUE7CisK
Ky8vIFZLX0xXSU4gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBrZXli
b2FyZCkKK2NvbnN0IGludCBWS19MV0lOID0gMHg1QjsKKworLy8gVktfUldJTiAoNUMpIFJpZ2h0
IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQorY29uc3QgaW50IFZLX1JXSU4gPSAweDVD
OworCisvLyBWS19BUFBTICg1RCkgQXBwbGljYXRpb25zIGtleSAoTmF0dXJhbCBrZXlib2FyZCkK
K2NvbnN0IGludCBWS19BUFBTID0gMHg1RDsKKworLy8gVktfU0xFRVAgKDVGKSBDb21wdXRlciBT
bGVlcCBrZXkKK2NvbnN0IGludCBWS19TTEVFUCA9IDB4NUY7CisKKy8vIFZLX05VTVBBRDAgKDYw
KSBOdW1lcmljIGtleXBhZCAwIGtleQorY29uc3QgaW50IFZLX05VTVBBRDAgPSAweDYwOworCisv
LyBWS19OVU1QQUQxICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkKK2NvbnN0IGludCBWS19OVU1Q
QUQxID0gMHg2MTsKKworLy8gVktfTlVNUEFEMiAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5Citj
b25zdCBpbnQgVktfTlVNUEFEMiA9IDB4NjI7CisKKy8vIFZLX05VTVBBRDMgKDYzKSBOdW1lcmlj
IGtleXBhZCAzIGtleQorY29uc3QgaW50IFZLX05VTVBBRDMgPSAweDYzOworCisvLyBWS19OVU1Q
QUQ0ICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ0ID0gMHg2
NDsKKworLy8gVktfTlVNUEFENSAoNjUpIE51bWVyaWMga2V5cGFkIDUga2V5Citjb25zdCBpbnQg
VktfTlVNUEFENSA9IDB4NjU7CisKKy8vIFZLX05VTVBBRDYgKDY2KSBOdW1lcmljIGtleXBhZCA2
IGtleQorY29uc3QgaW50IFZLX05VTVBBRDYgPSAweDY2OworCisvLyBWS19OVU1QQUQ3ICg2Nykg
TnVtZXJpYyBrZXlwYWQgNyBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ3ID0gMHg2NzsKKworLy8g
VktfTlVNUEFEOCAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5Citjb25zdCBpbnQgVktfTlVNUEFE
OCA9IDB4Njg7CisKKy8vIFZLX05VTVBBRDkgKDY5KSBOdW1lcmljIGtleXBhZCA5IGtleQorY29u
c3QgaW50IFZLX05VTVBBRDkgPSAweDY5OworCisvLyBWS19NVUxUSVBMWSAoNkEpIE11bHRpcGx5
IGtleQorY29uc3QgaW50IFZLX01VTFRJUExZID0gMHg2QTsKKworLy8gVktfQUREICg2QikgQWRk
IGtleQorY29uc3QgaW50IFZLX0FERCA9IDB4NkI7CisKKy8vIFZLX1NFUEFSQVRPUiAoNkMpIFNl
cGFyYXRvciBrZXkKK2NvbnN0IGludCBWS19TRVBBUkFUT1IgPSAweDZDOworCisvLyBWS19TVUJU
UkFDVCAoNkQpIFN1YnRyYWN0IGtleQorY29uc3QgaW50IFZLX1NVQlRSQUNUID0gMHg2RDsKKwor
Ly8gVktfREVDSU1BTCAoNkUpIERlY2ltYWwga2V5Citjb25zdCBpbnQgVktfREVDSU1BTCA9IDB4
NkU7CisKKy8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKK2NvbnN0IGludCBWS19ESVZJREUg
PSAweDZGOworCisvLyBWS19GMSAoNzApIEYxIGtleQorY29uc3QgaW50IFZLX0YxID0gMHg3MDsK
KworLy8gVktfRjIgKDcxKSBGMiBrZXkKK2NvbnN0IGludCBWS19GMiA9IDB4NzE7CisKKy8vIFZL
X0YzICg3MikgRjMga2V5Citjb25zdCBpbnQgVktfRjMgPSAweDcyOworCisvLyBWS19GNCAoNzMp
IEY0IGtleQorY29uc3QgaW50IFZLX0Y0ID0gMHg3MzsKKworLy8gVktfRjUgKDc0KSBGNSBrZXkK
K2NvbnN0IGludCBWS19GNSA9IDB4NzQ7CisKKy8vIFZLX0Y2ICg3NSkgRjYga2V5Citjb25zdCBp
bnQgVktfRjYgPSAweDc1OworCisvLyBWS19GNyAoNzYpIEY3IGtleQorY29uc3QgaW50IFZLX0Y3
ID0gMHg3NjsKKworLy8gVktfRjggKDc3KSBGOCBrZXkKK2NvbnN0IGludCBWS19GOCA9IDB4Nzc7
CisKKy8vIFZLX0Y5ICg3OCkgRjkga2V5Citjb25zdCBpbnQgVktfRjkgPSAweDc4OworCisvLyBW
S19GMTAgKDc5KSBGMTAga2V5Citjb25zdCBpbnQgVktfRjEwID0gMHg3OTsKKworLy8gVktfRjEx
ICg3QSkgRjExIGtleQorY29uc3QgaW50IFZLX0YxMSA9IDB4N0E7CisKKy8vIFZLX0YxMiAoN0Ip
IEYxMiBrZXkKK2NvbnN0IGludCBWS19GMTIgPSAweDdCOworCisvLyBWS19GMTMgKDdDKSBGMTMg
a2V5Citjb25zdCBpbnQgVktfRjEzID0gMHg3QzsKKworLy8gVktfRjE0ICg3RCkgRjE0IGtleQor
Y29uc3QgaW50IFZLX0YxNCA9IDB4N0Q7CisKKy8vIFZLX0YxNSAoN0UpIEYxNSBrZXkKK2NvbnN0
IGludCBWS19GMTUgPSAweDdFOworCisvLyBWS19GMTYgKDdGKSBGMTYga2V5Citjb25zdCBpbnQg
VktfRjE2ID0gMHg3RjsKKworLy8gVktfRjE3ICg4MEgpIEYxNyBrZXkKK2NvbnN0IGludCBWS19G
MTcgPSAweDgwOworCisvLyBWS19GMTggKDgxSCkgRjE4IGtleQorY29uc3QgaW50IFZLX0YxOCA9
IDB4ODE7CisKKy8vIFZLX0YxOSAoODJIKSBGMTkga2V5Citjb25zdCBpbnQgVktfRjE5ID0gMHg4
MjsKKworLy8gVktfRjIwICg4M0gpIEYyMCBrZXkKK2NvbnN0IGludCBWS19GMjAgPSAweDgzOwor
CisvLyBWS19GMjEgKDg0SCkgRjIxIGtleQorY29uc3QgaW50IFZLX0YyMSA9IDB4ODQ7CisKKy8v
IFZLX0YyMiAoODVIKSBGMjIga2V5Citjb25zdCBpbnQgVktfRjIyID0gMHg4NTsKKworLy8gVktf
RjIzICg4NkgpIEYyMyBrZXkKK2NvbnN0IGludCBWS19GMjMgPSAweDg2OworCisvLyBWS19GMjQg
KDg3SCkgRjI0IGtleQorY29uc3QgaW50IFZLX0YyNCA9IDB4ODc7CisKKy8vIFZLX05VTUxPQ0sg
KDkwKSBOVU0gTE9DSyBrZXkKK2NvbnN0IGludCBWS19OVU1MT0NLID0gMHg5MDsKKworLy8gVktf
U0NST0xMICg5MSkgU0NST0xMIExPQ0sga2V5Citjb25zdCBpbnQgVktfU0NST0xMID0gMHg5MTsK
KworLy8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKK2NvbnN0IGludCBWS19MU0hJRlQg
PSAweEEwOworCisvLyBWS19SU0hJRlQgKEExKSBSaWdodCBTSElGVCBrZXkKK2NvbnN0IGludCBW
S19SU0hJRlQgPSAweEExOworCisvLyBWS19MQ09OVFJPTCAoQTIpIExlZnQgQ09OVFJPTCBrZXkK
K2NvbnN0IGludCBWS19MQ09OVFJPTCA9IDB4QTI7CisKKy8vIFZLX1JDT05UUk9MIChBMykgUmln
aHQgQ09OVFJPTCBrZXkKK2NvbnN0IGludCBWS19SQ09OVFJPTCA9IDB4QTM7CisKKy8vIFZLX0xN
RU5VIChBNCkgTGVmdCBNRU5VIGtleQorY29uc3QgaW50IFZLX0xNRU5VID0gMHhBNDsKKworLy8g
VktfUk1FTlUgKEE1KSBSaWdodCBNRU5VIGtleQorY29uc3QgaW50IFZLX1JNRU5VID0gMHhBNTsK
KworLy8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sg
a2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9CQUNLID0gMHhBNjsKKworLy8gVktfQlJPV1NFUl9G
T1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5Citjb25zdCBp
bnQgVktfQlJPV1NFUl9GT1JXQVJEID0gMHhBNzsKKworLy8gVktfQlJPV1NFUl9SRUZSRVNIIChB
OCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5Citjb25zdCBpbnQgVktfQlJP
V1NFUl9SRUZSRVNIID0gMHhBODsKKworLy8gVktfQlJPV1NFUl9TVE9QIChBOSkgV2luZG93cyAy
MDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9TVE9QID0gMHhB
OTsKKworLy8gVktfQlJPV1NFUl9TRUFSQ0ggKEFBKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIg
U2VhcmNoIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfU0VBUkNIID0gMHhBQTsKKworLy8gVktf
QlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRmF2b3JpdGVz
IGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfRkFWT1JJVEVTID0gMHhBQjsKKworLy8gVktfQlJP
V1NFUl9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtl
eQorY29uc3QgaW50IFZLX0JST1dTRVJfSE9NRSA9IDB4QUM7CisKKy8vIFZLX1ZPTFVNRV9NVVRF
IChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkKK2NvbnN0IGludCBWS19WT0xV
TUVfTVVURSA9IDB4QUQ7CisKKy8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAwL1hQ
OiBWb2x1bWUgRG93biBrZXkKK2NvbnN0IGludCBWS19WT0xVTUVfRE9XTiA9IDB4QUU7CisKKy8v
IFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQorY29uc3Qg
aW50IFZLX1ZPTFVNRV9VUCA9IDB4QUY7CisKKy8vIFZLX01FRElBX05FWFRfVFJBQ0sgKEIwKSBX
aW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5Citjb25zdCBpbnQgVktfTUVESUFfTkVYVF9U
UkFDSyA9IDB4QjA7CisKKy8vIFZLX01FRElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIwMDAv
WFA6IFByZXZpb3VzIFRyYWNrIGtleQorY29uc3QgaW50IFZLX01FRElBX1BSRVZfVFJBQ0sgPSAw
eEIxOworCisvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlh
IGtleQorY29uc3QgaW50IFZLX01FRElBX1NUT1AgPSAweEIyOworCisvLyBWS19NRURJQV9QTEFZ
X1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQbGF5L1BhdXNlIE1lZGlhIGtleQorY29uc3Qg
aW50IFZLX01FRElBX1BMQVlfUEFVU0UgPSAweEIzOworCisvLyBWS19MQVVOQ0hfTUFJTCAoQjQp
IFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKK2NvbnN0IGludCBWS19NRURJQV9MQVVO
Q0hfTUFJTCA9IDB4QjQ7CisKKy8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5kb3dz
IDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKK2NvbnN0IGludCBWS19NRURJQV9MQVVOQ0hfTUVE
SUFfU0VMRUNUID0gMHhCNTsKKworLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIwMDAv
WFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDEga2V5Citjb25zdCBpbnQgVktfTUVESUFfTEFVTkNIX0FQ
UDEgPSAweEI2OworCisvLyBWS19MQVVOQ0hfQVBQMiAoQjcpIFdpbmRvd3MgMjAwMC9YUDogU3Rh
cnQgQXBwbGljYXRpb24gMiBrZXkKK2NvbnN0IGludCBWS19NRURJQV9MQVVOQ0hfQVBQMiA9IDB4
Qjc7CisKKy8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0
YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKK2NvbnN0IGludCBWS19PRU1fMSA9IDB4QkE7
CisKKy8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkv
cmVnaW9uLCB0aGUgJysnIGtleQorY29uc3QgaW50IFZLX09FTV9QTFVTID0gMHhCQjsKKworLy8g
VktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9u
LCB0aGUgJywnIGtleQorY29uc3QgaW50IFZLX09FTV9DT01NQSA9IDB4QkM7CisKKy8vIFZLX09F
TV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhl
ICctJyBrZXkKK2NvbnN0IGludCBWS19PRU1fTUlOVVMgPSAweEJEOworCisvLyBWS19PRU1fUEVS
SU9EIChCRSkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy4n
IGtleQorY29uc3QgaW50IFZLX09FTV9QRVJJT0QgPSAweEJFOworCisvLyBWS19PRU1fMiAoQkYp
IFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9h
cmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICcv
Pycga2V5Citjb25zdCBpbnQgVktfT0VNXzIgPSAweEJGOworCisvLyBWS19PRU1fMyAoQzApIFVz
ZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQu
IFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdgficg
a2V5Citjb25zdCBpbnQgVktfT0VNXzMgPSAweEMwOworCisvLyBWS19PRU1fNCAoREIpIFVzZWQg
Zm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdp
bmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdbeycga2V5
Citjb25zdCBpbnQgVktfT0VNXzQgPSAweERCOworCisvLyBWS19PRU1fNSAoREMpIFVzZWQgZm9y
IG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRv
d3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5Citj
b25zdCBpbnQgVktfT0VNXzUgPSAweERDOworCisvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1p
c2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3Mg
MjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5Citjb25z
dCBpbnQgVktfT0VNXzYgPSAweEREOworCisvLyBWS19PRU1fNyAoREUpIFVzZWQgZm9yIG1pc2Nl
bGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAw
MC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdzaW5nbGUtcXVvdGUvZG91
YmxlLXF1b3RlJyBrZXkKK2NvbnN0IGludCBWS19PRU1fNyA9IDB4REU7CisKKy8vIFZLX09FTV84
IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBr
ZXlib2FyZC4KK2NvbnN0IGludCBWS19PRU1fOCA9IDB4REY7CisKKy8vIFZLX09FTV8xMDIgKEUy
KSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhlIGJh
Y2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKK2NvbnN0IGludCBWS19PRU1f
MTAyID0gMHhFMjsKKworLy8gVktfUFJPQ0VTU0tFWSAoRTUpIFdpbmRvd3MgOTUvOTgvTWUsIFdp
bmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQUk9DRVNTIGtleQorY29uc3QgaW50
IFZLX1BST0NFU1NLRVkgPSAweEU1OworCisvLyBWS19QQUNLRVQgKEU3KSBXaW5kb3dzIDIwMDAv
WFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMgaWYgdGhleSB3ZXJlIGtleXN0
cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29yZCBvZiBhIDMyLWJpdCBWaXJ0
dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5wdXQgbWV0aG9kcy4gRm9yIG1v
cmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBVVCxTZW5kSW5wdXQsIFdNX0tF
WURPV04sIGFuZCBXTV9LRVlVUAorY29uc3QgaW50IFZLX1BBQ0tFVCA9IDB4RTc7CisKKy8vIFZL
X0FUVE4gKEY2KSBBdHRuIGtleQorY29uc3QgaW50IFZLX0FUVE4gPSAweEY2OworCisvLyBWS19D
UlNFTCAoRjcpIENyU2VsIGtleQorY29uc3QgaW50IFZLX0NSU0VMID0gMHhGNzsKKworLy8gVktf
RVhTRUwgKEY4KSBFeFNlbCBrZXkKK2NvbnN0IGludCBWS19FWFNFTCA9IDB4Rjg7CisKKy8vIFZL
X0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQorY29uc3QgaW50IFZLX0VSRU9GID0gMHhGOTsKKwor
Ly8gVktfUExBWSAoRkEpIFBsYXkga2V5Citjb25zdCBpbnQgVktfUExBWSA9IDB4RkE7CisKKy8v
IFZLX1pPT00gKEZCKSBab29tIGtleQorY29uc3QgaW50IFZLX1pPT00gPSAweEZCOworCisvLyBW
S19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorY29uc3QgaW50IFZLX05PTkFN
RSA9IDB4RkM7CisKKy8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKK2NvbnN0IGludCBWS19QQTEgPSAw
eEZEOworCisvLyBWS19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkKK2NvbnN0IGludCBWS19PRU1f
Q0xFQVIgPSAweEZFOworCitjb25zdCBpbnQgVktfVU5LTk9XTiA9IDA7CisKK30KKworI2VuZGlm
IC8vIEtleWJvYXJkQ29kZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27436</attachid>
            <date>2009-02-06 17:00:13 -0800</date>
            <delta_ts>2009-05-04 16:27:34 -0700</delta_ts>
            <desc>patch part 5</desc>
            <filename>23296-patch-5.txt</filename>
            <type>text/plain</type>
            <size>4110</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9Mb2NhbGl6ZWRTdHJpbmdzQW5kcm9pZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0xvY2FsaXplZFN0cmlu
Z3NBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9M
b2NhbGl6ZWRTdHJpbmdzQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
dHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KCJJbnNwZWN0IEVsZW1lbnQiKTsKK30KKworU3RyaW5nIHVua25vd25G
aWxlU2l6ZVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJVbmtub3duIik7
Cit9CisKK1N0cmluZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IElu
dFNpemUmIHNpemUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9Qb3B1cE1lbnVBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2FuZHJvaWQvUG9wdXBNZW51QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2FuZHJvaWQvUG9wdXBNZW51QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9wdXAgbWVudSBp
bXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4KKyAqCisgKiBD
b3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBvcHVwTWVudS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIE5vdyB3
ZSBoYW5kbGUgYWxsIG9mIHRoaXMgaW4gV2ViVmlld0NvcmUuY3BwLgorUG9wdXBNZW51OjpQb3B1
cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBtZW51TGlzdCkKKyAgICA6IG1fcG9wdXBDbGllbnQobWVu
dUxpc3QpCit7Cit9CisKK1BvcHVwTWVudTo6flBvcHVwTWVudSgpCit7Cit9CisKK3ZvaWQgUG9w
dXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQpCit7CisKK30KKwor
dm9pZCBQb3B1cE1lbnU6OmhpZGUoKQoreworfQorCit2b2lkIFBvcHVwTWVudTo6dXBkYXRlRnJv
bUVsZW1lbnQoKSAKK3sKK30KKworYm9vbCBQb3B1cE1lbnU6Oml0ZW1Xcml0aW5nRGlyZWN0aW9u
SXNOYXR1cmFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27437</attachid>
            <date>2009-02-06 17:00:38 -0800</date>
            <delta_ts>2009-05-04 16:29:53 -0700</delta_ts>
            <desc>patch part 6</desc>
            <filename>23296-patch-6.txt</filename>
            <type>text/plain</type>
            <size>17219</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJUaGVtZUFuZHJvaWQu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1l
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogQ29weXJp
Z2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQW5kcm9pZC5oIgorCisjaW5jbHVk
ZSAiUmVuZGVyU2tpbkFuZHJvaWQuaCIKKyNpbmNsdWRlICJSZW5kZXJTa2luQnV0dG9uLmgiCisj
aW5jbHVkZSAiUmVuZGVyU2tpbkNvbWJvLmgiCisjaW5jbHVkZSAiUmVuZGVyU2tpblJhZGlvLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAiU2tDYW52YXMuaCIKKworI2RlZmluZSBNQVhfQ09N
Qk9fSEVJR0hUIDIwCisKKy8vIEFkZCBhIGNvbnN0YW50IGFtb3VudCBvZiBwYWRkaW5nIHRvIHRo
ZSB0ZXh0c2l6ZSB0byBnZXQgdGhlIGZpbmFsIGhlaWdodCBvZiBidXR0b25zLAorLy8gc28gdGhh
dCBvdXIgYnV0dG9uIGltYWdlcyBhcmUgbGFyZ2UgZW5vdWdoIHRvIHByb3Blcmx5IGZpdCB0aGUg
dGV4dC4KKyNkZWZpbmUgQlVUVE9OX1BBRERJTkcgMTgKKworLy8gQWRkIHBhZGRpbmcgdG8gdGhl
IGZvbnRTaXplIG9mIExpc3RCb3hlcyB0byBnZXQgdGhlaXIgbWF4aW11bSBzaXplcy4KKy8vIExp
c3Rib3hlcyBvZnRlbiBoYXZlIGEgc3BlY2lmaWVkIHNpemUuICBTaW5jZSB3ZSBjaGFuZ2UgdGhl
bSBpbnRvIGRyb3Bkb3ducywKKy8vIHdlIHdhbnQgYSBtdWNoIHNtYWxsZXIgaGVpZ2h0LCB3aGlj
aCBlbmNvbXBhc3NlcyB0aGUgdGV4dC4KKyNkZWZpbmUgTElTVEJPWF9QQURESU5HIDUKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU2tDYW52YXMqIGdldENhbnZhc0Zyb21JbmZvKGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpbmZvKQoreworICAgIHJldHVybiBpbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tQ2FudmFzOworfQorCisvLyAgSGVscGVyIGZ1bmN0
aW9uIHRoYXQgcGFpbnRzIHRoZSBSZW5kZXJPYmplY3QKKy8vICBwYXJhbXRlcnM6CisvLyAgICAg
IHRoZSBza2luIHRvIHVzZSwgCisvLyAgICAgIHRoZSBvYmplY3QgdG8gYmUgcGFpbnRlZCwgdGhl
IFBhaW50SW5mbywgZnJvbSB3aGljaCB3ZSBnZXQgdGhlIGNhbnZhcywgdGhlIGJvdW5kaW5nIHJl
Y3RhbmdsZSwgCisvLyAgcmV0dXJucyBmYWxzZSwgbWVhbmluZyBubyBvbmUgZWxzZSBoYXMgdG8g
cGFpbnQgaXQKK3N0YXRpYyBib29sIHBhaW50QnJ1c2goUmVuZGVyU2tpbkFuZHJvaWQqIHJTa2lu
LCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCAgY29u
c3QgSW50UmVjdCYgaXIpCit7CisgICAgTm9kZSogZWxlbWVudCA9IG8tPmVsZW1lbnQoKTsKKyAg
ICBTa0NhbnZhcyogY2FudmFzID0gZ2V0Q2FudmFzRnJvbUluZm8oaSk7CisgICAgY2FudmFzLT5z
YXZlKCk7CisgICAgY2FudmFzLT50cmFuc2xhdGUoU2tJbnRUb1NjYWxhcihpci54KCkpLCBTa0lu
dFRvU2NhbGFyKGlyLnkoKSkpOworICAgIHJTa2luLT5zZXREaW0oaXIud2lkdGgoKSwgaXIuaGVp
Z2h0KCkpOworICAgIHJTa2luLT5ub3RpZnlTdGF0ZShlbGVtZW50KTsKKyAgICByU2tpbi0+ZHJh
dyhpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBjYW52YXMtPnJlc3RvcmUoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlbmRlclRoZW1lKiB0aGVtZSgpCit7CisgICAgc3Rh
dGljIFJlbmRlclRoZW1lQW5kcm9pZCBhbmRyb2lkVGhlbWU7CisgICAgcmV0dXJuICZhbmRyb2lk
VGhlbWU7Cit9CisKK1JlbmRlclRoZW1lQW5kcm9pZDo6UmVuZGVyVGhlbWVBbmRyb2lkKCkKK3sK
KyAgICBtX3JhZGlvID0gbmV3IFJlbmRlclNraW5SYWRpbyhmYWxzZSk7CisgICAgbV9jaGVja2Jv
eCA9IG5ldyBSZW5kZXJTa2luUmFkaW8odHJ1ZSk7CisgICAgbV9jb21ibyA9IG5ldyBSZW5kZXJT
a2luQ29tYm8oKTsKK30KKworUmVuZGVyVGhlbWVBbmRyb2lkOjp+UmVuZGVyVGhlbWVBbmRyb2lk
KCkKK3sKKyAgICBkZWxldGUgbV9yYWRpbzsKKyAgICBkZWxldGUgbV9jaGVja2JveDsKKyAgICBk
ZWxldGUgbV9jb21ibzsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmNsb3NlKCkKK3sK
K30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnN0YXRlQ2hhbmdlZChSZW5kZXJPYmplY3Qq
IG8sIENvbnRyb2xTdGF0ZSBzdGF0ZSkgY29uc3QKK3sKKyAgICBpZiAoQ2hlY2tlZFN0YXRlID09
IHN0YXRlKSB7CisgICAgICAgIG8tPnJlcGFpbnQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVBbmRyb2lkOjpw
bGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIENvbG9yKDQ2LCAyNTEsIDApOworfQorCitDb2xvciBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJl
dHVybiBDb2xvcigyNTUsIDI1NSwgMCwgMjU1KTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVBbmRy
b2lkOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIENvbG9yOjpibGFjazsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVBbmRyb2lkOjpw
bGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBsYXRm
b3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3Io
MTkyLCAxOTIsIDE5Mik7Cit9CisKK2ludCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmJhc2VsaW5lUG9z
aXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmopIGNvbnN0Cit7CisgICAgLy8gRnJvbSB0aGUg
ZGVzY3JpcHRpb24gb2YgdGhpcyBmdW5jdGlvbiBpbiBSZW5kZXJUaGVtZS5oOgorICAgIC8vIEEg
bWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24gZm9yIGEgImxlYWYiIGNvbnRy
b2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxpbmUKKyAgICAvLyBwb3NpdGlv
biBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVudC4gQ2hlY2ti
b3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKKyAgICAvLyBjb250cm9scyB0
aGF0IG5lZWQgdG8gZG8gdGhpcy4KKyAgICAvLworICAgIC8vIE91ciBjaGVja2JveGVzIGFuZCBy
YWRpbyBidXR0b25zIG5lZWQgdG8gYmUgb2Zmc2V0IHRvIGxpbmUgdXAgcHJvcGVybHkuCisgICAg
cmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKG9iaikgLSA1OworfQorCit2b2lk
IFJlbmRlclRoZW1lQW5kcm9pZDo6YWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0Cit7CisgICAgLy8gQ3V0IG91dCB0aGUgaW50cmluc2ljIG1hcmdpbnMgY29tcGxl
dGVseSBpZiB3ZSBlbmQgdXAgdXNpbmcgYSBzbWFsbCBmb250IHNpemUKKyAgICBpZiAoc3R5bGUt
PmZvbnRTaXplKCkgPCAxMSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEludHJpbnNp
YyBtYXJnaW4gdmFsdWUuCisgICAgY29uc3QgaW50IG0gPSAyOworICAgIAorICAgIC8vIEZJWE1F
OiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4t
d2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQoKS5xdWlyaygp
KQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkxlZnQoTGVuZ3RoKG0sIEZpeGVkKSk7Cisg
ICAgICAgIGlmIChzdHlsZS0+bWFyZ2luUmlnaHQoKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5
bGUtPnNldE1hcmdpblJpZ2h0KExlbmd0aChtLCBGaXhlZCkpOworICAgIH0KKworICAgIGlmIChz
dHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Ub3Ao
KS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5ndGgobSwgRml4
ZWQpKTsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Cb3R0b20oKS5xdWlyaygpKQorICAgICAg
ICAgICAgc3R5bGUtPnNldE1hcmdpbkJvdHRvbShMZW5ndGgobSwgRml4ZWQpKTsKKyAgICB9Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFw
cGVhcmFuY2UpCit7CisgICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7CisgICAgICAgIGNhc2UgUHVz
aEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBUZXh0
RmllbGRQYXJ0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkg
Y29uc3QKK3sKKyAgICAvLyBQYWRkaW5nIGNvZGUgaXMgdGFrZW4gZnJvbSBSZW5kZXJUaGVtZVNh
ZmFyaS5jcHAKKyAgICAvLyBJdCBtYWtlcyBzdXJlIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGZvciB0
aGUgYnV0dG9uIHRleHQuCisgICAgY29uc3QgaW50IHBhZGRpbmcgPSA4OworICAgIHN0eWxlLT5z
ZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFk
ZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRNaW5IZWln
aHQoTGVuZ3RoKHN0eWxlLT5mb250U2l6ZSgpICsgQlVUVE9OX1BBRERJTkcsIEZpeGVkKSk7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIGlyKQor
eworICAgIHJldHVybiBwYWludEJydXNoKG1fY2hlY2tib3gsIG8sIGksIGlyKTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIGlyKQoreworICAgIC8v
IElmIGl0IGlzIGEgZGlzYWJsZWQgYnV0dG9uLCBzaW1wbHkgcGFpbnQgaXQgdG8gdGhlIG1hc3Rl
ciBwaWN0dXJlLgorICAgIE5vZGUqIGVsZW1lbnQgPSBvLT5lbGVtZW50KCk7CisgICAgaWYgKCFl
bGVtZW50LT5pc0VuYWJsZWQoKSkgeworICAgICAgICBSZW5kZXJTa2luQnV0dG9uOjpEcmF3KGdl
dENhbnZhc0Zyb21JbmZvKGkpLCBpciwgUmVuZGVyU2tpbkFuZHJvaWQ6OmtEaXNhYmxlZCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU3RvcmUgYWxsIHRoZSBpbXBvcnRhbnQgaW5mb3JtYXRp
b24gaW4gdGhlIHBsYXRmb3JtIGNvbnRleHQuCisgICAgICAgIGkuY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPnN0b3JlQnV0dG9uSW5mbyhlbGVtZW50LCBpcik7CisgICAgfQorICAgIC8vIFdl
IGFsd2F5cyByZXR1cm4gZmFsc2Ugc28gd2UgZG8gbm90IHJlcXVlc3QgdG8gYmUgcmVkcmF3bi4K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludFJh
ZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIGlyKQoreworICAgIHJldHVybiBwYWludEJydXNoKG1fcmFkaW8sIG8sIGks
IGlyKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnNldENoZWNrYm94U2l6ZShSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxOSwg
Rml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgxOSwgRml4ZWQpKTsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBjaGVja2JveGVzLgorICAgIHNl
dENoZWNrYm94U2l6ZShzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1
c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAoreworICAgIGFkZEludHJpbnNpY01h
cmdpbnMoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgaXIpCit7CisgICAgcmV0dXJuIHRydWU7ICAgIAorfQorCit2b2lkIFJlbmRl
clRoZW1lQW5kcm9pZDo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAorewor
ICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lQW5k
cm9pZDo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBpcikKK3sKKyAgICBpZiAoby0+aXNNZW51TGlz
dCgpKSB7CisgICAgICAgIHJldHVybiBwYWludENvbWJvKG8sIGksIGlyKTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7ICAgIAorfQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUp
OworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiBpcikKK3sKKyAgICByZXR1cm4gdHJ1ZTsgICAgCit9CisKK3ZvaWQgUmVuZGVyVGhlbWVBbmRy
b2lkOjphZGp1c3RMaXN0Ym94U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0UGFkZGlu
Z1JpZ2h0KExlbmd0aChSZW5kZXJTa2luQ29tYm86OmV4dHJhV2lkdGgoKSwgRml4ZWQpKTsKKyAg
ICBzdHlsZS0+c2V0TWF4SGVpZ2h0KExlbmd0aChzdHlsZS0+Zm9udFNpemUoKSArIExJU1RCT1hf
UEFERElORywgRml4ZWQpKTsKKyAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sK
KyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChSZW5kZXJTa2luQ29tYm86OmV4dHJh
V2lkdGgoKSwgRml4ZWQpKTsKKyAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50Q29tYm8oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgIGNvbnN0IEludFJlY3QmIGlyKQoreworICAg
IGlmIChvLT5zdHlsZSgpICYmIG8tPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLmFscGhhKCkg
PT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgTm9kZSogZWxlbWVudCA9IG8tPmVsZW1l
bnQoKTsKKyAgICBpbnQgaGVpZ2h0ID0gaXIuaGVpZ2h0KCk7CisgICAgaW50IHkgPSBpci55KCk7
CisgICAgLy8gSWYgdGhlIGNvbWJvIGJveCBpcyB0b28gbGFyZ2UsIGxlYXZlIGl0IGF0IGl0cyBt
YXggaGVpZ2h0LCBhbmQgY2VudGVyIGl0LgorICAgIGlmIChoZWlnaHQgPiBNQVhfQ09NQk9fSEVJ
R0hUKSB7CisgICAgICAgIHkgKz0gKGhlaWdodCAtIE1BWF9DT01CT19IRUlHSFQpID4+IDE7Cisg
ICAgICAgIGhlaWdodCA9IE1BWF9DT01CT19IRUlHSFQ7CisgICAgfQorICAgIHJldHVybiBtX2Nv
bWJvLT5EcmF3KGdldENhbnZhc0Zyb21JbmZvKGkpLCBlbGVtZW50LCBpci54KCksIHksIGlyLndp
ZHRoKCksIGhlaWdodCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludE1lbnVM
aXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIGlyKSAKK3sgCisgICAgcmV0dXJuIHBhaW50Q29tYm8obywgaSwgaXIpOwor
fQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAoreworICAgIC8vIENvcGllZCBmcm9tIFJlbmRlclRoZW1lU2FmYXJpLgorICAgIGNv
bnN0IGZsb2F0IGJhc2VGb250U2l6ZSA9IDExLjBmOworICAgIGNvbnN0IGludCBiYXNlQm9yZGVy
UmFkaXVzID0gNTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJh
c2VGb250U2l6ZTsKKyAgICAKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUt
PnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxl
IC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6
IFJvdW5kIHVwPworCisgICAgY29uc3QgaW50IG1pbkhlaWdodCA9IDE1OworICAgIHN0eWxlLT5z
ZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKKyAgICAKKyAgICBzdHlsZS0+
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgLy8g
Rm91bmQgdGhlc2UgcGFkZGluZyBudW1iZXJzIGJ5IHRyaWFsIGFuZCBlcnJvci4KKyAgICBjb25z
dCBpbnQgcGFkZGluZyA9IDQ7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBG
aXhlZCkpOworICAgIC8vIEFkZGVkIHRvIG1ha2Ugcm9vbSBmb3Igb3VyIGFycm93LgorICAgIHN0
eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKFJlbmRlclNraW5Db21ibzo6ZXh0cmFXaWR0aCgp
LCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRNZW51TGlzdEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiBpcikgCit7CisgICAgcmV0dXJuIHBhaW50Q29tYm8obywgaSwgaXIpOwor
fQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiAoc3R5bGUtPm9wYWNpdHkoKSA+
IDAgJiYgc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSAKKyAgICAgICAgICAgICAgICAgICAgJiYgc3R5
bGUtPmFwcGVhcmFuY2UoKSAhPSBUZXh0RmllbGRQYXJ0IAorICAgICAgICAgICAgICAgICAgICAm
JiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNlYXJjaEZpZWxkUGFydCAKKyAgICAgICAgICAgICAg
ICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBUZXh0QXJlYVBhcnQgCisgICAgICAgICAg
ICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gQ2hlY2tib3hQYXJ0CisgICAgICAg
ICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gUmFkaW9QYXJ0CisgICAgICAg
ICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gUHVzaEJ1dHRvblBhcnQKKyAg
ICAgICAgICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBTcXVhcmVCdXR0b25Q
YXJ0CisgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gQnV0dG9u
UGFydAorICAgICAgICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IEJ1dHRv
bkJldmVsUGFydAorICAgICAgICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9
IE1lbnVsaXN0UGFydAorICAgICAgICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgp
ICE9IE1lbnVsaXN0QnV0dG9uUGFydAorICAgICAgICAgICAgICAgICAgICApOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUmVuZGVy
VGhlbWVBbmRyb2lkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1Jl
bmRlclRoZW1lQW5kcm9pZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL1JlbmRlclRoZW1lQW5kcm9pZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAor
LyoKKyAqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUmVuZGVyVGhlbWVBbmRyb2lkX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVB
bmRyb2lkX2gKKworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVuZGVyU2tpbkJ1dHRvbjsKK2NsYXNzIFJlbmRlclNraW5SYWRpbzsKK2Ns
YXNzIFJlbmRlclNraW5Db21ibzsKKworc3RydWN0IFRoZW1lRGF0YSB7CisgICAgVGhlbWVEYXRh
KCkgOm1fcGFydCgwKSwgbV9zdGF0ZSgwKSB7fQorCisgICAgdW5zaWduZWQgbV9wYXJ0OworICAg
IHVuc2lnbmVkIG1fc3RhdGU7Cit9OworCitjbGFzcyBSZW5kZXJUaGVtZUFuZHJvaWQgOiBwdWJs
aWMgUmVuZGVyVGhlbWUgeworcHVibGljOgorICAgIFJlbmRlclRoZW1lQW5kcm9pZCgpOworICAg
IH5SZW5kZXJUaGVtZUFuZHJvaWQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc3RhdGVDaGFu
Z2VkKFJlbmRlck9iamVjdCosIENvbnRyb2xTdGF0ZSkgY29uc3Q7CisgICAgICAgCisgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3Q7CisgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVh
bGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KKyAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygpOyB9CisKKyAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZp
cnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHN5
c3RlbUZvbnQoaW50LCBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24mKSBjb25zdCB7fQorCisgICAg
dmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworCisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CisgICAgCisgICAgYm9vbCBwYWludENvbWJvKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksICBjb25zdCBJ
bnRSZWN0JiBpcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TGlzdGJveFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworCisgICAgdmlydHVhbCB2
b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CisgICAgCisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworCitwcml2YXRlOgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0OworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wgc3VwcG9ydHNGb2N1
cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKTsKKyAgICAvLyBGSVhNRTogVGhlcmUgc2hvdWxkIGJl
IGEgd2F5IHRvIHVzZSBvbmUgUmVuZGVyU2tpblJhZGlvIGZvciBib3RoIHJhZGlvIGFuZCBjaGVj
a2JveAorICAgIFJlbmRlclNraW5SYWRpbyogICAgbV9yYWRpbzsKKyAgICBSZW5kZXJTa2luUmFk
aW8qICAgIG1fY2hlY2tib3g7CisgICAgUmVuZGVyU2tpbkNvbWJvKiAgICBtX2NvbWJvOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVuZGVyVGhlbWVBbmRyb2lk
X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27438</attachid>
            <date>2009-02-06 17:01:05 -0800</date>
            <delta_ts>2009-05-04 16:32:18 -0700</delta_ts>
            <desc>patch part 7</desc>
            <filename>23296-patch-7.txt</filename>
            <type>text/plain</type>
            <size>11086</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3JlZW5BbmRyb2lkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2NyZWVuQW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2NyZWVuQW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBB
bmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjZGVmaW5lIExPR19U
QUcgIldlYkNvcmUiCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JlZW4uaCIK
KworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorCisjdW5kZWYg
TE9HIC8vIEZJWE1FOiBTdGlsbCBoYXZlIHRvIGRvIHRoaXMgdG8gZ2V0IHRoZSBsb2cgdG8gc2hv
dyB1cAorI2luY2x1ZGUgInV0aWxzL0xvZy5oIgorCisjaW5jbHVkZSAidWkvU3VyZmFjZUNvbXBv
c2VyQ2xpZW50LmgiCisjaW5jbHVkZSAidWkvUGl4ZWxGb3JtYXQuaCIKKyNpbmNsdWRlICJ1aS9E
aXNwbGF5SW5mby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBzY3JlZW5EZXB0aChX
aWRnZXQqIHBhZ2UpCit7CisgICAgYW5kcm9pZDo6RGlzcGxheUluZm8gaW5mbzsKKyAgICBhbmRy
b2lkOjpTdXJmYWNlQ29tcG9zZXJDbGllbnQ6OmdldERpc3BsYXlJbmZvKGFuZHJvaWQ6OkRpc3Bs
YXlJRCgwKSwgJmluZm8pOworICAgIHJldHVybiBpbmZvLnBpeGVsRm9ybWF0SW5mby5iaXRzUGVy
UGl4ZWw7Cit9CisKK2ludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqIHBhZ2UpCit7
CisgICAgYW5kcm9pZDo6RGlzcGxheUluZm8gaW5mbzsKKyAgICBhbmRyb2lkOjpTdXJmYWNlQ29t
cG9zZXJDbGllbnQ6OmdldERpc3BsYXlJbmZvKGFuZHJvaWQ6OkRpc3BsYXlJRCgwKSwgJmluZm8p
OworICAgIHJldHVybiBpbmZvLnBpeGVsRm9ybWF0SW5mby5iaXRzUGVyUGl4ZWw7Cit9CisKK2Jv
b2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogcGFnZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKyNpZmRlZiBBTkRST0lEX09SSUVOVEFUSU9OX1NVUFBPUlQKK2ludCBTY3JlZW46Om9y
aWVudGF0aW9uKCkgY29uc3QKK3sKKyAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOworICAg
IGFuZHJvaWQ6OlN1cmZhY2VDb21wb3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oCisgICAgICAg
ICAgICBhbmRyb2lkOjpEaXNwbGF5SUQoMCksICZpbmZvKTsKKyAgICAvLyBnZXREaXNwbGF5SW5m
byByZXR1cm5zIGFuIGVudW0gZGVzY3JpYmluZyB0aGUgb3JpZW50YXRpb24uIE1hcCB0aGUgZW51
bQorICAgIC8vIHRvIHRoZSB2YWx1ZXMgZGVzY3JpYmVkIGhlcmUKKyAgICAvLyAoaHR0cDovL2Rl
dmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9BcHBsZUFwcGxpY2F0aW9ucy9SZWZlcmVu
Y2UvU2FmYXJpV2ViQ29udGVudC9IYW5kbGluZ0V2ZW50cy9jaGFwdGVyXzhfc2VjdGlvbl82Lmh0
bWwpCisgICAgc3dpdGNoIChpbmZvLm9yaWVudGF0aW9uKSB7CisgICAgICAgIGNhc2UgYW5kcm9p
ZDo6SVN1cmZhY2VDb21wb3Nlcjo6ZU9yaWVudGF0aW9uRGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBjYXNlIGFuZHJvaWQ6OklTdXJmYWNlQ29tcG9zZXI6OmVPcmllbnRh
dGlvbjkwOgorICAgICAgICAgICAgcmV0dXJuIDkwOworICAgICAgICBjYXNlIGFuZHJvaWQ6OklT
dXJmYWNlQ29tcG9zZXI6OmVPcmllbnRhdGlvbjE4MDoKKyAgICAgICAgICAgIHJldHVybiAxODA7
CisgICAgICAgIGNhc2UgYW5kcm9pZDo6SVN1cmZhY2VDb21wb3Nlcjo6ZU9yaWVudGF0aW9uMjcw
OgorICAgICAgICAgICAgcmV0dXJuIC05MDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IExPR0UoIkJhZCBvcmllbnRhdGlvbiByZXR1cm5lZCBmcm9tIGdldERpc3BsYXlJbmRvICVkIiwK
KyAgICAgICAgICAgICAgICAgICAgaW5mby5vcmllbnRhdGlvbik7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisjZW5kaWYKKworLy8gVGhlIG9ubHkgcGxhY2UgSSBoYXZlIHNlZW4g
dGhlc2UgdmFsdWVzIHVzZWQgaXMKKy8vIHBvc2l0aW9uaW5nIHBvcHVwIHdpbmRvd3MuIElmIHdl
IHN1cHBvcnQgbXVsdGlwbGUgd2luZG93cworLy8gdGhleSB3aWxsIGJlIG1vc3QgbGlrZWx5IGZ1
bGwgc2NyZWVuLiBUaGVyZWZvcmUsCisvLyB0aGUgYWNjdXJhY3kgb2YgdGhlc2UgbnVtYmVyIGFy
ZSBub3QgdG9vIGltcG9ydGFudC4KK0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogcGFnZSkK
K3sKKyAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOworICAgIGFuZHJvaWQ6OlN1cmZhY2VD
b21wb3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDApLCAmaW5m
byk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgwLjAsIDAuMCwgaW5mby53LCBpbmZvLmgpOworfQor
CisvLyBTaW1pbGFyIHNjcmVlblJlY3QsIHRoaXMgZnVuY3Rpb24gaXMgY29tbW9ubHkgdXNlZCBi
eSBqYXZhc2NyaXB0cworLy8gdG8gcG9zaXRpb24gYW5kIHJlc2l6ZSB3aW5kb3dzICh1c3VhbGx5
IHRvIGZ1bGwgc2NyZWVuKS4gCitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQq
KQoreworICAgIGFuZHJvaWQ6OkRpc3BsYXlJbmZvIGluZm87CisgICAgYW5kcm9pZDo6U3VyZmFj
ZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5SW5mbyhhbmRyb2lkOjpEaXNwbGF5SUQoMCksICZp
bmZvKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KDAuMCwgMC4wLCBpbmZvLncsIGluZm8uaCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9p
ZC9TY3JvbGxWaWV3QW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1Njcm9sbFZpZXdBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vYW5kcm9pZC9TY3JvbGxWaWV3QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNl
IFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNkZWZpbmUgTE9HX1RBRyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlRnJhbWVCcmlkZ2UuaCIKKyNpbmNsdWRlICJXZWJDb3JlVmlld0JyaWRnZS5oIgor
I2luY2x1ZGUgIldlYlZpZXdDb3JlLmgiCisKKy8qCisgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRh
dGlvbiBkb2VzIE5PVCBhY3R1YWxseSBlbXVsYXRlIHRoZSBRdCBTY3JvbGxWaWV3LgorICAgIEl0
IGRvZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGtodG1sIHdpbGwgdXNlIHRvIGlu
dGVyYWN0IHdpdGgKKyAgICBXZWJLaXQncyBXZWJGcmFtZVZpZXcgZG9jdW1lbnRWaWV3IGFuZCBv
dXIgTlNTY3JvbGxWaWV3IHN1YmNsYXNzLgorCisgICAgU2Nyb2xsVmlldydzIHZpZXcgaXMgYSBO
U1Njcm9sbFZpZXcgKG9yIHN1YmNsYXNzIG9mIE5TU2Nyb2xsVmlldykKKyAgICBpbiBtb3N0IGNh
c2VzLiBUaGF0IHNjcm9sbHZpZXcgaXMgYSBzdWJ2aWV3IG9mIGFuCisgICAgV2ViQ29yZUZyYW1l
Vmlldy4gVGhlIFdlYkNvcmVGcmFtZVZpZXcncyBkb2N1bWVudFZpZXcgd2lsbCBhbHNvIGJlCisg
ICAgdGhlIHNjcm9sbCB2aWV3J3MgZG9jdW1lbnRWaWV3LgorICAgIAorICAgIFRoZSBXZWJDb3Jl
RnJhbWVWaWV3J3Mgc2l6ZSBpcyB0aGUgZnJhbWUgc2l6ZS4gIFRoZSBXZWJDb3JlRnJhbWVWaWV3
J3MgZG9jdW1lbnRWaWV3CisgICAgY29ycmVzcG9uZHMgdG8gdGhlIGZyYW1lIGNvbnRlbnQgc2l6
ZS4gIFRoZSBzY3JvbGx2aWV3IGl0c2VsZiBpcyBhdXRvc2l6ZWQgdG8gdGhlCisgICAgV2ViQ29y
ZUZyYW1lVmlldydzIHNpemUgKHNlZSBXaWRnZXQ6OnJlc2l6ZSkuCisqLworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ludFJlY3QgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGVudFJl
Y3QoYm9vbCBpbmNsdWRlU2Nyb2xsYmFycykgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBw
bGF0Zm9ybVdpZGdldCgpLT5nZXRCb3VuZHMoKTsKKyAgICAvLyBUaGlzIG1ha2VzIHN1YmZyYW1l
cyBkcmF3IGNvcnJlY3RseSwgc2luY2Ugc3ViZnJhbWVzIGNhbm5vdCBzY3JvbGwuCisgICAgaWYg
KHBhcmVudCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRTaXplIFNjcm9sbFZpZXc6
OnBsYXRmb3JtQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50c1Np
emU7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1TZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcHQpCit7CisgICAgaWYgKHBhcmVudCgpKSAvLyBkb24ndCBh
dHRlbXB0IHRvIHNjcm9sbCBzdWJmcmFtZXM7IHRoZXkncmUgZnVsbHkgdmlzaWJsZQorICAgICAg
ICByZXR1cm47CisgICAgYW5kcm9pZDo6V2ViVmlld0NvcmU6OmdldFdlYlZpZXdDb3JlKHRoaXMp
LT5zY3JvbGxUbyhwdC54KCksIHB0LnkoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZv
cm1TY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJNb2RlJiBoLCBTY3JvbGxiYXJNb2RlJiB2KSBjb25z
dAoreworICAgIGggPSB2ID0gU2Nyb2xsYmFyQWx3YXlzT2ZmOworfQorCitib29sIFNjcm9sbFZp
ZXc6OnBsYXRmb3JtUHJvaGliaXRzU2Nyb2xsaW5nKCkKK3sKKyAgICBpZiAoIWlzRnJhbWVWaWV3
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih0aGlzKTsKKyAgICAvLyBXZSB3YW50IHRvIGlnbm9yZSByZXF1ZXN0
cyB0byBzY3JvbGwgdGhhdCB3ZXJlIG5vdCBpbml0aWF0ZWQgYnkgdGhlIHVzZXIuICBBbgorICAg
IC8vIGV4YW1wbGUgb2YgdGhpcyBpcyB3aGVuIHRleHQgaXMgaW5zZXJ0ZWQgaW50byBhIHRleHRm
aWVsZC9hcmVhLCB3aGljaCByZXN1bHRzIGluCisgICAgLy8gYSBzY3JvbGwuICBXZSBpZ25vcmUg
dGhpcyBiZWNhdXNlIHdlIG5vdyBob3cgdG8gZG8gdGhpcyBvdXJzZWx2ZXMgaW4gdGhlIFVJIHRo
cmVhZC4KKyAgICAvLyBBbiBleGFtcGxlIG9mIGl0IGJlaW5nIGluaXRpYXRlZCBieSB0aGUgdXNl
ciBpcyBpZiB0aGUgdXNlciBjbGlja3MgYW4gYW5jaG9yCisgICAgLy8gZWxlbWVudCB3aGljaCBz
aW1wbHkgc2Nyb2xscyB0aGUgcGFnZS4KKyAgICByZXR1cm4gIWFuZHJvaWQ6OldlYkZyYW1lOjpn
ZXRXZWJGcmFtZSh2aWV3LT5mcmFtZSgpKS0+dXNlckluaXRpYXRlZENsaWNrKCk7Cit9CisKK3Zv
aWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1SZXBhaW50Q29udGVudFJlY3RhbmdsZShjb25zdCBJbnRS
ZWN0ICZyZWN0LCBib29sIG5vdykKK3sKKyAgICBhbmRyb2lkOjpXZWJWaWV3Q29yZTo6Z2V0V2Vi
Vmlld0NvcmUodGhpcyktPmNvbnRlbnRJbnZhbGlkYXRlKHJlY3QpOworfQorCisjaWZkZWYgQU5E
Uk9JRF9DQVBUVVJFX09GRlNDUkVFTl9QQUlOVFMKK3ZvaWQgU2Nyb2xsVmlldzo6cGxhdGZvcm1P
ZmZzY3JlZW5Db250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgYW5k
cm9pZDo6V2ViVmlld0NvcmU6OmdldFdlYlZpZXdDb3JlKHRoaXMpLT5vZmZJbnZhbGlkYXRlKHJl
Y3QpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9TZWFyY2hQb3B1cE1lbnVBbmRyb2lkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2VhcmNoUG9wdXBNZW51QW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2VhcmNoUG9wdXBNZW51QW5k
cm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
MjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gU2F2ZSB0aGUgcGFzdCBzZWFyY2hlcyBzdG9yZWQgaW4gJ3NlYXJjaEl0ZW1z
JyB0byBhIGRhdGFiYXNlIGFzc29jaWF0ZWQgd2l0aCAnbmFtZScKK3ZvaWQgU2VhcmNoUG9wdXBN
ZW51OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpIAoreyAKK30KKworLy8gTG9hZCBwYXN0IHNlYXJj
aGVzIGFzc29jaWF0ZWQgd2l0aCAnbmFtZScgZnJvbSB0aGUgZGF0YWJhc2UgdG8gJ3NlYXJjaEl0
ZW1zJwordm9pZCBTZWFyY2hQb3B1cE1lbnU6OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcykgCit7IAorfQorCisv
LyBDcmVhdGUgYSBzZWFyY2ggcG9wdXAgbWVudSAtIG5vdCBzdXJlIHdoYXQgZWxzZSB3ZSBoYXZl
IHRvIGRvIGhlcmUKK1NlYXJjaFBvcHVwTWVudTo6U2VhcmNoUG9wdXBNZW51KFBvcHVwTWVudUNs
aWVudCogY2xpZW50KQorICAgIDogUG9wdXBNZW51KGNsaWVudCkgCit7IAorfQorICAgICAgICAK
K2Jvb2wgU2VhcmNoUG9wdXBNZW51OjplbmFibGVkKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27439</attachid>
            <date>2009-02-06 17:01:39 -0800</date>
            <delta_ts>2009-05-04 16:35:19 -0700</delta_ts>
            <desc>patch part 8</desc>
            <filename>23296-patch-8.txt</filename>
            <type>text/plain</type>
            <size>10876</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TeXN0ZW1UaW1lQW5kcm9pZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1N5c3RlbVRpbWVBbmRyb2lkLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TeXN0ZW1UaW1lQW5k
cm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
MjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorCisjaW5jbHVkZSA8c3lzL3RpbWUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitkb3VibGUgY3VycmVudFRpbWUoKQoreworICAg
IHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgZ2V0dGltZW9mZGF5KCZ0diwgKHN0cnVjdCB0aW1l
em9uZSAqKSBOVUxMKTsKKyAgICBkb3VibGUgbm93ID0gdHYudHZfc2VjICsgKHR2LnR2X3VzZWMg
LyAxMDAwMDAwLjApOworICAgIAorICAgIHJldHVybiBub3c7Cit9CisKK3VpbnQzMl90IGdldF90
aHJlYWRfbXNlYygpCit7CisjaWYgZGVmaW5lZChIQVZFX1BPU0lYX0NMT0NLUykKKyAgICBzdHJ1
Y3QgdGltZXNwZWMgdG07CisKKyAgICBjbG9ja19nZXR0aW1lKENMT0NLX1RIUkVBRF9DUFVUSU1F
X0lELCAmdG0pOworICAgIAorICAgIHJldHVybiB0bS50dl9zZWMgKiAxMDAwTEwgKyB0bS50dl9u
c2VjIC8gMTAwMDAwMDsKKyNlbHNlCisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgCisgICAg
Z2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisgICAgcmV0dXJuIHR2LnR2X3NlYyAqIDEwMDBMTCAr
IHR2LnR2X3VzZWMgLyAxMDAwOworI2VuZGlmCit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGV4dEJvdW5kYXJpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZXh0Qm91bmRhcmllcy5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvVGV4dEJvdW5kYXJpZXMuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRo
ZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgorCisjaW5jbHVkZSA8dW5pY29kZS91
YnJrLmg+CisKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2ludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNoYXIqIGNoYXJzLCBp
bnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKK3sKKyAgICBVQnJlYWtJdGVyYXRv
ciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKKworICAgIGludCBuZXdQb3Np
dGlvbiA9IHBvc2l0aW9uOworCisgICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAgcG9zaXRpb24g
PSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgICAgICB3aGlsZSAocG9zaXRpb24g
IT0gVUJSS19ET05FKSB7CisgICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRo
ZSBjaGFyYWN0ZXIgcHJlY2VlZGluZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFscGhh
bnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxlbiAmJiB1X2lzYWxudW0oY2hh
cnNbcG9zaXRpb24gLSAxXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisg
ICAgICAgICAgICBwb3NpdGlvbiA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gbGVuOworICAgIH0gZWxzZSB7CisgICAgICAgIHBvc2l0
aW9uID0gdWJya19wcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgd2hpbGUgKHBvc2l0
aW9uICE9IFVCUktfRE9ORSkgeworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hl
biB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFs
cGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IDAgJiYgdV9pc2FsbnVtKGNo
YXJzW3Bvc2l0aW9uXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAg
ICAgICAgICBwb3NpdGlvbiA9IHVicmtfcHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgZmluZFdvcmRCb3VuZGFy
eShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwg
aW50KiBlbmQpCit7CisgICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3Io
Y2hhcnMsIGxlbik7CisgICAgKmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7Cisg
ICAgaWYgKCplbmQgPCAwKQorICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0KTsKKyAgICAqc3Rh
cnQgPSB1YnJrX3ByZXZpb3VzKGl0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZXh0QnJlYWtJdGVy
YXRvckludGVybmFsSUNVLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5k
cm9pZC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJj
ZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0QnJl
YWtJdGVyYXRvckludGVybmFsSUNVLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qg
Y2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkKK3sKKyAgICByZXR1cm4gImVuX3VzIjsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL1dpZGdldEFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5k
cm9pZC9XaWRnZXRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9XaWRnZXRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
RnJhbWVCcmlkZ2UuaCIKKyNpbmNsdWRlICJXZWJDb3JlVmlld0JyaWRnZS5oIgorI2luY2x1ZGUg
IldlYlZpZXdDb3JlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2lkZ2V0OjpXaWRnZXQo
UGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQoreworICAgIGluaXQod2lkZ2V0KTsKK30KKworV2lkZ2V0
Ojp+V2lkZ2V0KCkKK3sKKyAgICBBU1NFUlQoIXBhcmVudCgpKTsKKyAgICByZWxlYXNlUGxhdGZv
cm1XaWRnZXQoKTsKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lUmVjdCgpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IHVzZSBtX2ZyYW1lIGluc3RlYWQ/CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdl
dCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCAwLCAwKTsKKyAgICByZXR1cm4gcGxh
dGZvcm1XaWRnZXQoKS0+Z2V0Qm91bmRzKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIC8vIEZJWE1FOiBpbiB3
aGF0IGNhc2UsIHdpbGwgdGhpcyBiZSBjYWxsZWQgZm9yIHRoZSB0b3AgZnJhbWU/CisgICAgaWYg
KCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm47CisgICAgcGxhdGZvcm1XaWRnZXQo
KS0+ZHJhdyhjdHgsIHIpOworfQorCit2b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0
KCkKK3sKKyAgICBSZWxlYXNlKHBsYXRmb3JtV2lkZ2V0KCkpOworfQorCit2b2lkIFdpZGdldDo6
cmV0YWluUGxhdGZvcm1XaWRnZXQoKQoreworICAgIFJldGFpbihwbGF0Zm9ybVdpZGdldCgpKTsK
K30KKwordm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsgCit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOyAKK30KKwordm9pZCBXaWRnZXQ6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIC8vIEZJWE1FOiBzZXQgbV9mcmFtZSBpbnN0ZWFkPworICAgIC8vIHBs
YXRmb3JtV2lkZ2V0KCkgaXMgTlVMTCB3aGVuIGNhbGxlZCBmcm9tIFNjcm9sbGJhcgorICAgIGlm
ICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBsYXRmb3JtV2lkZ2V0
KCktPnNldExvY2F0aW9uKHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgcGxhdGZvcm1XaWRnZXQo
KS0+c2V0U2l6ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQorCit2b2lkIFdpZGdl
dDo6c2V0SXNTZWxlY3RlZChib29sIGlzU2VsZWN0ZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworaW50IFdpZGdldDo6c2NyZWVuV2lkdGgoKSBjb25zdAoreworICAgIGNvbnN0IFdp
ZGdldCogd2lkZ2V0ID0gdGhpczsKKyAgICB3aGlsZSAoIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkg
eworICAgICAgICB3aWRnZXQgPSB3aWRnZXQtPnBhcmVudCgpOworICAgICAgICBpZiAoIXdpZGdl
dCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIXdpZGdldCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gYW5kcm9pZDo6V2ViVmlld0NvcmU6OmdldFdlYlZpZXdD
b3JlKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgU2Nyb2xsVmlldyo+KHdpZGdldCkp
LT5zY3JlZW5XaWR0aCgpOworfQorCit9IC8vIFdlYkNvcmUgbmFtZXBzYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27440</attachid>
            <date>2009-02-06 17:02:27 -0800</date>
            <delta_ts>2009-05-04 16:38:12 -0700</delta_ts>
            <desc>patch part 9</desc>
            <filename>23296-patch-9.txt</filename>
            <type>text/plain</type>
            <size>20768</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTY1IEBACisvKgorICogQ29weXJp
Z2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNkZWZpbmUg
TE9HX1RBRyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjZGVmaW5lIEFORFJP
SURfQ09NUElMRV9IQUNLCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNs
dWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNpbmNsdWRlICJDb250
ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKy8vI2luY2x1
ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKKyNp
bmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiRmlsZUxpc3Qu
aCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MS2V5Z2VuRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhpc3RvcnkuaCIKKyNpbmNsdWRlICJJY29uLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNl
LmgiCisjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5j
bHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1Nl
cnZlci5oIgorI2luY2x1ZGUgIkFQSS9KU0NsYXNzUmVmLmgiCisjaW5jbHVkZSAiSmF2YVNjcmlw
dENhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9maWxlLmgiCisjaW5jbHVkZSAi
am5pX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIK
KyNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5j
bHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBhZ2VDYWNoZS5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQYXRo
LmgiCisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJv
ci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJTY3JlZW4uaCIKKyNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNtYXJ0UmVwbGFjZS5oIgorI2luY2x1
ZGUgIldpZGdldC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgZnJhbWUgdmlldyBoYXMgY2hhbmdlZCB0aGUgc3RhdGUg
b2YgaXQncyBib3JkZXIuCisvLyBpRnJhbWVzLCB3aGljaCBhcmUgaGF2ZSBhIEZyYW1lVmlldywg
YXJlIGRyYXduIHdpdGggYSAxcHggbGVmdC9yaWdodCBib3JkZXIgYW5kIDJweCB0b3AvYm90dG9t
IGJvcmRlcgorLy8gQ2hlY2sgZnVuY3Rpb24gX3Nob3VsZERyYXdCb3JkZXIgaW4gV2ViRnJhbWVW
aWV3Lm1tCisvLyBXZSBkb24ndCBkcmF3IGJvcmRlcnMgdW5sZXNzIGNzcyBkcmF3cyB0aGVtLgor
Ly92b2lkIEZyYW1lVmlldzo6dXBkYXRlQm9yZGVyKCkgeyB2ZXJpZmllZE9rKCk7IH0KKy8vaW50
IFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopIHsgQVNTRVJUKDApOyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorLy9ib29sIFdlYkNvcmU6OnNjcmVlbklzTW9u
b2Nocm9tZShXaWRnZXQqKSB7IEFTU0VSVCgwKTsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZh
bHNlOyB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKy8qIENvbXBsZXRlbHkgZW1wdHkgc3R1YnMgKG1vc3RseSB0byBhbGxvdyBE
UlQgdG8gcnVuKTogKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKworLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IEphdmFzY3Jp
cHQgdG8gZmluZCBvdXQgd2hhdCB0aGUgZGVmYXVsdCBsYW5ndWFnZQorLy8gdGhlIHVzZXIgaGFz
IHNlbGVjdGVkLiBJdCBpcyB1c2VkIGJ5IHRoZSBKUyBvYmplY3QgTmF2aWdhdG9yLmxhbmd1YWdl
CisvLyBJIGd1ZXNzIHRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIGJlIG1hcHBlZCB3aXRoIHRoZSBB
Y2NlcHQtTGFuZ3VhZ2U6IEhUVFAgaGVhZGVyLgorU3RyaW5nIFdlYkNvcmU6OmRlZmF1bHRMYW5n
dWFnZSgpCit7CisgICAgdmVyaWZpZWRPaygpOworICAgIHJldHVybiAiZW4iOworfQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhZGVmaW5lZChBTkRST0lEX1BMVUdJTlMpCisvLyBJZiBw
bHVnaW5zIHN1cHBvcnQgaXMgdHVybmVkIG9uLCBkb24ndCB1c2UgdGhlc2Ugc3R1YnMuCisKKy8v
IEV4Y2VwdCBmb3Igc3VwcG9ydHNNSU1FVHlwZSgpLCB0aGVzZSBQbHVnaW4gZnVuY3Rpb25zIGFy
ZSB1c2VkIGJ5IGphdmFzY3JpcHQncworLy8gbmF2aWdhdG9yLnBsdWdpbnNbXSBvYmplY3QgdG8g
cHJvdmlkZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcGx1Z2lucy4gVGhpcyBpcyBtb3N0CisvLyBv
ZnRlbiB1c2VkIHdpdGggdG8gY2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIEZs
YXNoIG9yIHdoaWNoIHZpZGVvCisvLyBjb2RlYyB0byB1c2UuCisvLyBUaGUgc3VwcG9ydHNNSU1F
VHlwZSgpIGlzIHVzZWQgYnkgdGhlIEZyYW1lIHRvIGRldGVybWluZSBpZiBhIGZ1bGwgc2NyZWVu
IGluc3RhbmNlCisvLyBvZiBhIHBsdWdpbiBjYW4gYmUgdXNlZCB0byByZW5kZXIgYSBtaW1ldHlw
ZSB0aGF0IGlzIG5vdCBuYXRpdmUgdG8gdGhlIGJyb3dzZXIuCitQbHVnaW5JbmZvKiBQbHVnaW5J
bmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkKQorewor
ICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgUGx1Z2luSW5mb1N0
b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgdmVyaWZpZWRPaygpOworICAgIHJldHVy
biAwOworfQorCitTdHJpbmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICB2ZXJpZmllZE9rKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wpCit7CisgICAgdmVyaWZpZWRPaygpOworfQorCisjZW5k
aWYgLy8gIWRlZmluZWQoQU5EUk9JRF9QTFVHSU5TKQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlbGxz
IHRoZSBicmlkZ2UgdGhhdCBhIHJlc291cmNlIHdhcyBsb2FkZWQgZnJvbSB0aGUgY2FjaGUgYW5k
IHRodXMKKy8vIHRoZSBhcHAgbWF5IHVwZGF0ZSBwcm9ncmVzcyB3aXRoIHRoZSBhbW91bnQgb2Yg
ZGF0YSBsb2FkZWQuCit2b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9hZGVyKiwgQ2Fj
aGVkUmVzb3VyY2UqKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgRmlsZSBV
cGxvYWQgZm9ybSBlbGVtZW50LCBhbmQKKy8vIHRoZXJlZm9yZSByZWxhdGVzIHRvIHRoZSBhYm92
ZS4gV2hlbiBhIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWQsIGFuIGljb24KKy8vIHJlcHJlc2VudGlu
ZyB0aGUgZmlsZSB0eXBlIGNhbiBiZSByZW5kZXJlZCBuZXh0IHRvIHRoZSBmaWxlbmFtZSBvbiB0
aGUKKy8vIHdlYiBwYWdlLiBUaGUgaWNvbiBmb3IgdGhlIGZpbGUgaXMgZW5jYXBzdWxhdGVkIHdp
dGhpbiB0aGlzIGNsYXNzLgorSWNvbjo6fkljb24oKSB7IH0KK3ZvaWQgSWNvbjo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIHsgfQorCisvLyAqKiogVGhlIGZvbGxvd2lu
ZyBzdHJpbmdzIHNob3VsZCBiZSBsb2NhbGl6ZWQgKioqIC8vCisKKy8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGZldGNoIGxvY2FsaXplZCB0ZXh0IGZvciBIVE1MIGZvcm0K
Ky8vIGVsZW1lbnRzIHN1Ym1pdCBhbmQgcmVzZXQuIFRoZXNlIHN0cmluZ3MgYXJlIHVzZWQgd2hl
biB0aGUgcGFnZSBhdXRob3IKKy8vIGhhcyBub3Qgc3BlY2lmaWVkIGFueSB0ZXh0IGZvciB0aGVz
ZSBidXR0b25zLgorU3RyaW5nIHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpCit7CisgICAgdmVy
aWZpZWRPaygpOworICAgIHJldHVybiAiU3VibWl0IjsKK30KKworU3RyaW5nIHJlc2V0QnV0dG9u
RGVmYXVsdExhYmVsKCkKK3sKKyAgICB2ZXJpZmllZE9rKCk7CisgICAgcmV0dXJuICJSZXNldCI7
Cit9CisKKy8vIFRoZSBhbHQgdGV4dCBmb3IgYW4gaW5wdXQgZWxlbWVudCBpcyBub3QgdXNlZCB2
aXN1YWxseSwgYnV0IHJhdGhlciBpcworLy8gdXNlZCBmb3IgYWNjZXNzYWJpbGl0eSAtIGVnIHJl
YWRpbmcgdGhlIHdlYiBwYWdlLiBTZWUKKy8vIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdFRleHQoKSBm
b3IgbW9yZSBpbmZvcm1hdGlvbi4KK1N0cmluZyBpbnB1dEVsZW1lbnRBbHRUZXh0KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworLy8gVGhpcyBp
cyB0aGUgc3RyaW5nIHRoYXQgYXBwZWFycyBiZWZvcmUgYW4gaW5wdXQgYm94IHdoZW4gdGhlIEhU
TUwgZWxlbWVudAorLy8gPElTSU5ERVg+IGlzIHVzZWQuIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMg
dXNlZCBpZiBubyBQUk9NUFQgYXR0cmlidXRlIGlzCisvLyBwcm92aWRlZC4KKy8vIG5vdGU6IFNh
ZmFyaSBhbmQgRmlyZUZveCB1c2UgKHRvbyBsb25nIGZvciB1cyBpbWhvKSAiVGhpcyBpcyBhIHNl
YXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBrZXl3b3JkczoiCitTdHJpbmcgc2VhcmNoYWJs
ZUluZGV4SW50cm9kdWN0aW9uKCkKK3sKKyAgICB2ZXJpZmllZE9rKCk7CisgICAgcmV0dXJuIFN0
cmluZygiRW50ZXIgc2VhcmNoOiIpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRo
ZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgQ1NTIHByb3BlcnR5OgorLy8gLXdlYmtpdC1mb2N1cy1y
aW5nLWNvbG9yCisvLyBJdCBpcyBhbHNvIHJlbGF0ZWQgdG8gdGhlIENTUyBwcm9wZXJ0eSBvdXRs
aW5lLWNvbG9yOgorQ29sb3IgZm9jdXNSaW5nQ29sb3IoKQoreworICAgIHZlcmlmaWVkT2soKTsK
KyAgICByZXR1cm4gMHhGRjAwMDBGRjsKK30KKworLy8gTG9jYWxpemVkU3RyaW5ncworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKQoreworICAgIEFTU0VSVCgw
KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdE
b3dubG9hZExpbmtUb0Rpc2soKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkKCkK
K3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKQoreworICAgIEFTU0VSVCgwKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3du
bG9hZEltYWdlVG9EaXNrKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQoKQor
eworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpCit7CisgICAgQVNTRVJUKDApOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NvcHko
KQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKQorewor
ICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdTdG9wKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkKK3sKKyAgICBBU1NFUlQo
MCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
Q3V0KCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3Vu
ZCgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkKK3sKKyAgICBBU1NFUlQoMCk7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVhcm5T
cGVsbGluZygpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpCit7CisgICAgQVNTRVJUKDApOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0xvb2tV
cEluRGljdGlvbmFyeSgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKCkKK3sKKyAgICBBU1NFUlQo
MCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFn
SWdub3JlR3JhbW1hcigpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpCit7CisgICAgQVNT
RVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmco
KQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKQoreworICAgIEFTU0VS
VCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpCit7
CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0JvbGQoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMoKQoreworICAgIEFTU0VS
VCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdVbmRlcmxpbmUoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lKCkKK3sKKyAgICBBU1NFUlQoMCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnV3Jp
dGluZ0RpcmVjdGlvbk1lbnUoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkKK3sK
KyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdCgpCit7
CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfSAgLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworLy8gRklYTUUsIG5vIHN1cHBvcnQgZm9yIHNwZWxsaW5nIHlldC4KK1Bh
c3RlYm9hcmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCkKK3sKKyAgICByZXR1cm4g
bmV3IFBhc3RlYm9hcmQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihS
YW5nZSosIGJvb2wsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFtZSop
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBQYXN0ZWJvYXJkOjpjYW5TbWFy
dFJlcGxhY2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJh
Z21lbnQoRnJhbWUqLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnBs
YWluVGV4dChGcmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK1Bhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK1Bhc3RlYm9hcmQ6On5QYXN0ZWJvYXJkKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCisKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoMCk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSgp
Cit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29u
dGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJikKK3sKKyAgICBBU1NFUlQoMCk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudTo6c2V0UGxhdGZv
cm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQoreworICAgIEFTU0VS
VCgwKTsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBtZW51OworfQorCitQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxhdGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0Cit7
CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRpb247Cit9CisK
K0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlw
dGlvbikKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ29u
dGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1lbnUqKQoreworICAgIEFTU0VS
VCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVudUl0ZW06OkNvbnRl
eHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlLCBDb250ZXh0TWVudUFjdGlvbiwgY29uc3Qg
U3RyaW5nJiwgQ29udGV4dE1lbnUqKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitDb250ZXh0TWVudUl0ZW06On5Db250ZXh0TWVudUl0ZW0oKQoreworICAg
IEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQbGF0Zm9ybU1lbnVJdGVt
RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigp
Cit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbjsKK30KKworQ29udGV4dE1lbnVJdGVtVHlwZSBDb250ZXh0TWVu
dUl0ZW06OnR5cGUoKSBjb25zdAoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBBY3Rpb25UeXBlOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6
c2V0VHlwZShDb250ZXh0TWVudUl0ZW1UeXBlKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVudUFjdGlvbiBDb250ZXh0TWVudUl0ZW06OmFj
dGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOworfQorCit2b2lkIENvbnRleHRN
ZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRNZW51QWN0aW9uKQoreworICAgIEFTU0VSVCgwKTsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgQ29udGV4dE1lbnVJdGVtOjp0aXRs
ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0VGl0bGUoY29u
c3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpwbGF0Zm9ybVN1Yk1l
bnUoKSBjb25zdAoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0
TWVudSopCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wpCit7CisgICAgQVNTRVJUKDApOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRFbmFi
bGVkKGJvb2wpCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgdXNlcklkbGVUaW1lKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCisvLyBzeXN0ZW1CZWVwKCkgaXMgY2Fs
bGVkIGJ5IHRoZSBFZGl0b3IgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSB3YXMgbm90aGluZyB0byBj
b3B5LCBhbmQgbWF5IGJlIGNhbGxlZCBmcm9tCisvLyBvdGhlciBwbGFjZXMgdG9vLgordm9pZCBz
eXN0ZW1CZWVwKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CisKKy8vIGZ1bmN0
aW9ucyBuZXcgdG8gSnVuLTA3IHRpcCBvZiB0cmVlIG1lcmdlOgorCisvLyB2b2lkIFdlYkNvcmU6
OkNhY2hlZFBhZ2U6OmNsb3NlKCkge30KKworLy92b2lkIFdlYkNvcmU6OkZyYW1lOjpwcmludCgp
IHt9CisvLyB2b2lkIFdlYkNvcmU6OkZyYW1lOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKSB7fQor
Ly92b2lkIFdlYkNvcmU6OkZyYW1lOjpjbGVhbnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkge30K
Ky8vIHZvaWQgV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCkge30KKy8v
Ym9vbCBXZWJDb3JlOjpGcmFtZTo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQodW5zaWdu
ZWQgc2hvcnQsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3ZvaWQqIFdlYkNvcmU6OkZyYW1l
OjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKQoreworICAgIHJldHVybiAwOworfQorCisKK1dlYkNv
cmU6OlN0cmluZyBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVu
c2lvbihXZWJDb3JlOjpTdHJpbmcgY29uc3QmKQoreworICAgIHJldHVybiBXZWJDb3JlOjpTdHJp
bmcoKTsKK30KKwordm9pZCBXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKFdlYkNvcmU6
Ok5vZGUqLCBXZWJDb3JlOjpLVVJMIGNvbnN0JiwgV2ViQ29yZTo6U3RyaW5nIGNvbnN0Jikge30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplIGRyYWdJbWFnZVNpemUodm9pZCopCit7
CisgICAgcmV0dXJuIEludFNpemUoMCwgMCk7Cit9CisKK3ZvaWQgZGVsZXRlRHJhZ0ltYWdlKHZv
aWQqKSB7fQordm9pZCogY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKikKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCogZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKHZvaWQqLCBm
bG9hdCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogY3JlYXRlRHJhZ0ltYWdlSWNvbkZv
ckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKK3sKKyAgICByZXR1cm4gMDsKK30KKworQ3Vyc29y
IGR1bW15Q3Vyc29yOworY29uc3QgQ3Vyc29yJiB6b29tSW5DdXJzb3IoKQoreworICAgIHJldHVy
biBkdW1teUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vyc29yKCkKK3sKKyAg
ICByZXR1cm4gZHVtbXlDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm90QWxsb3dlZEN1cnNv
cigpCit7CisgICAgcmV0dXJuIGR1bW15Q3Vyc29yOworfQorCit2b2lkKiBzY2FsZURyYWdJbWFn
ZSh2b2lkKiwgRmxvYXRTaXplKQoreworICAgIHJldHVybiAwOworfQorCitTdHJpbmcgc2VhcmNo
TWVudVJlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitT
dHJpbmcgc2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKQor
eworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5
U2l6ZXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJp
bmc+KCk7Cit9CisKK1N0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5z
aWduZWQgaW50LCBTdHJpbmcgY29uc3QmLCBXZWJDb3JlOjpLVVJMIGNvbnN0JikKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gYWRkZWQg
Zm9yIE5vdi0xNi0wNyBUb1QgaW50ZWdyYXRpb24KKy8vbmFtZXNwYWNlIFdlYkNvcmUgeworLy92
b2lkIEZyYW1lOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQorCisvL30KKworLy8gZnVuY3Rpb25zIG5ldyB0byBGZWItMTkgdGlwIG9mIHRyZWUgbWVy
Z2U6CituYW1lc3BhY2UgV2ViQ29yZSB7CisvLyBpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1w
dCBpcyBkZWZpbmVkIGluIFNtYXJ0UmVwbGFjZUlDVS5jcHA7IGluIHRoZW9yeSwgd2UgY291bGQg
dXNlIHRoYXQgb25lCisvLyAgICAgIGJ1dCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvZiB0aGUgcmVx
dWlyZWQgaWN1IGZ1bmN0aW9ucworYm9vbCBpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdChV
Q2hhcjMyLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9ICAvLyBXZWJDb3JlCisKK2ludCBNYWtlRGF0YUV4ZWN1dGFibGU7CisKKy8vIGZ1
bmN0aW9ucyBuZXcgdG8gTWFyLTIgdGlwIG9mIHRyZWUgbWVyZ2U6CitTdHJpbmcgS1VSTDo6Zmls
ZVN5c3RlbVBhdGgoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCisKKy8vIGZ1bmN0aW9ucyBuZXcgdG8gSnVuLTEgdGlwIG9mIHRyZWUg
bWVyZ2U6CitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRo
Q29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQmluZGluZ3Mg
eworYm9vbCBkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRlKiwgdm9pZCBjb25zdCosIF9qb2JqZWN0
KiwgYm9vbCwgSk5JVHlwZSwKKyAgICBfam1ldGhvZElEKiwganZhbHVlKiwganZhbHVlJiwgY2hh
ciBjb25zdCosIEpTVmFsdWUqJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworfSB9ICAvLyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5ncworCitjaGFyKiBk
aXJuYW1lKGNvbnN0IGNoYXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKKyAgICAvLyBuZXcgYXMgb2YgU1ZOIGNoYW5nZSAzNjI2OSwgU2VwdCA4LCAyMDA4
Citjb25zdCBTdHJpbmcmIERhdGFiYXNlOjpkYXRhYmFzZUluZm9UYWJsZU5hbWUoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyBkdW1teTsKKyAgICBy
ZXR1cm4gZHVtbXk7Cit9CisKKyAgICAvLyBuZXcgYXMgb2YgU1ZOIGNoYW5nZSAzODA2OCwgTm92
IDUsIDIwMDgKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3ZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3Ry
aW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIGdldFN1cHBvcnRlZEtl
eVNpemVzKFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQ
YXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJ
Y29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpIGlzIGNhbGxlZCBieSBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY1By
ZWZXaWR0aHMoKQorLy8gbGlrZSB0aGlzOiBzY3JvbGxiYXJTaXplID0gU2Nyb2xsYmFyVGhlbWU6
Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOworLy8gd2l0aCB0aGlzIGNvbW1l
bnQ6CisvLyAvLyBGSVhNRTogV2Ugc2hvdWxkIGdldCB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFy
IGZyb20gdGhlIFJlbmRlclRoZW1lIGluc3RlYWQuCisvLyBzaW5jZSBvdXIgdGV4dCBjb250cm9s
IGRvZXNuJ3QgaGF2ZSBzY3JvbGxiYXJzLCB0aGUgZGVmYXVsdCBzaXplIG9mIDAgd2lkdGggc2hv
dWxkIGJlCisvLyBvay4gbm90SW1wbGVtZW50ZWQoKSBpcyBjb21tZW50ZWQgb3V0IGJlbG93IHNv
IHRoYXQgd2UgY2FuIGZpbmQgb3RoZXIgdW5yZXNvbHZlZAorLy8gdW5pbXBsZW1lbnRlZCBmdW5j
dGlvbnMuCitTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKK3sK
KyAgICAvKiBub3RJbXBsZW1lbnRlZCgpOyAqLworICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZSB0
aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCitKU0M6OkpTVmFsdWUqIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb2ZpbGUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK0ZpbGVMaXN0OjpGaWxl
TGlzdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmlsZSogRmlsZUxpc3Q6Oml0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKKy8vIFRoaXMgdmFsdWUgdHVybnMgb24gb3Igb2ZmIHRoZSBN
YWMgc3BlY2lmaWMgQWNjZXNzaWJpbGl0eSBzdXBwb3J0LgorYm9vbCBBWE9iamVjdENhY2hlOjpn
QWNjZXNzaWJpbGl0eUVuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vz
c2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0gZmFsc2U7CisKK3ZvaWQgQVhP
YmplY3RDYWNoZTo6Y2hpbGRyZW5DaGFuZ2VkKFJlbmRlck9iamVjdCopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoUmVuZGVyT2JqZWN0
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CisKK09wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6On5PcGFxdWVKU0NsYXNzQ29udGV4
dERhdGEoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworSlNDOjpKU1ZhbHVlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZShKU0M6OlVT
dHJpbmcgY29uc3QmLCBKU0M6OkpTVmFsdWUqJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCitjb25zdCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBKYXZh
U2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCitKU0M6OkpTT2JqZWN0KiBKYXZhU2NyaXB0Q2FsbEZy
YW1lOjp0aGlzT2JqZWN0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCitKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIEphdmFTY3JpcHRDYWxs
RnJhbWU6OnR5cGUoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlKSAwOworfQorCitKYXZhU2NyaXB0Q2FsbEZy
YW1lKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpmdW5j
dGlvbk5hbWUoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorfQorCitKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OkphdmFTY3JpcHREZWJ1Z1Nl
cnZlcigpIDoKKyAgICBtX3JlY29tcGlsZVRpbWVyKHRoaXMsIDApCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworSmF2YVNjcmlwdERlYnVnU2VydmVyOjp+SmF2YVNjcmlwdERlYnVnU2Vy
dmVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitKYXZhU2NyaXB0RGVidWdTZXJ2
ZXImIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkKK3sKKyAgICBzdGF0aWMgSmF2YVNj
cmlwdERlYnVnU2VydmVyIHNlcnZlcjsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBzZXJ2ZXI7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjphdFN0YXRlbWVudChj
b25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpjYWxsRXZlbnQoY29uc3QgRGVi
dWdnZXJDYWxsRnJhbWUmLCBpbnQsIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVi
dWdnZXJDYWxsRnJhbWUmLCBpbnQsIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hCcmVha3BvaW50KGNvbnN0IERl
YnVnZ2VyQ2FsbEZyYW1lJiwgaW50LCBpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlvbihjb25zdCBEZWJ1Z2dlckNh
bGxGcmFtZSYsIGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
SmF2YVNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYsIGludCwgY29uc3QgVVN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnBhZ2VDcmVhdGVkKFBhZ2UqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpy
ZXR1cm5FdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludCwgaW50KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjp3aWxsRXhl
Y3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnQsIGludCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29997</attachid>
            <date>2009-05-04 16:16:25 -0700</date>
            <delta_ts>2009-05-21 19:23:19 -0700</delta_ts>
            <desc>new patch part 2 with ChangeLog</desc>
            <filename>bug23296-part-2.txt</filename>
            <type>text/plain</type>
            <size>10581</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDUtMDQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCAyKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL0N1cnNvckFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9hbmRyb2lkL0RyYWdEYXRhQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2FuZHJvaWQvRXZlbnRMb29wQW5kcm9pZC5jcHA6IEFkZGVkLgorCiAyMDA5LTA1LTA0
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9DdXJzb3JBbmRyb2lk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5kcm9p
ZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvQ3Vyc29yQW5k
cm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0
IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyNkZWZpbmUgTE9HX1RBRyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkN1cnNvci5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDdXJzb3I6OkN1cnNvcihJbWFnZSosIGNvbnN0IEludFBvaW50JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJz
b3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1cnNvcjo6fkN1cnNvcigpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShj
b25zdCBDdXJzb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCitzdGF0aWMgQ3Vyc29yIGM7Citjb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNv
ciYgY3Jvc3NDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGlC
ZWFtQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQor
Citjb25zdCBDdXJzb3ImIHdhaXRDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0UmVz
aXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQor
Citjb25zdCBDdXJzb3ImIG5vcnRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1
cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29u
c3QgQ3Vyc29yJiBub3J0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3Io
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1
cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vy
c29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYg
ZWFzdFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29y
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBD
dXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBjb2x1bW5SZXNpemVD
dXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2Nv
bnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29y
JiBjZWxsQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOwor
fQorCitjb25zdCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vy
c29yJiBjb3B5Q3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBj
OworfQorCitjb25zdCBDdXJzb3ImIHByb2dyZXNzQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJz
b3ImIG5vbmVDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgbWlkZGxlUGFubmluZ0N1cnNvcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBlYXN0UGFubmlu
Z0N1cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKwor
Y29uc3QgQ3Vyc29yJiBub3J0aFBhbm5pbmdDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0UGFubmluZ0N1
cnNvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29u
c3QgQ3Vyc29yJiBub3J0aFdlc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoUGFubmluZ0N1cnNv
cigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3Qg
Q3Vyc29yJiBzb3V0aEVhc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJz
b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0
IEN1cnNvciYgd2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgZ3JhYkN1cnNvcigpIHsKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5n
Q3Vyc29yKCkgeworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGM7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9EcmFn
RGF0YUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9E
cmFnRGF0YUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL0RyYWdEYXRhQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgorCisjaW5jbHVk
ZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBEcmFnRGF0YTo6Y2Fu
U21hcnRSZXBsYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitib29s
IERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1N0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK0NvbG9yIERyYWdEYXRhOjphc0NvbG9yKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoKTsKK30KKyAgICAKK1Bhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBEcmFnRGF0YTo6Y3JlYXRlQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSkgY29u
c3QKK3sKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29t
cGF0aWJsZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jv
b2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisgICAgCitTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKFN0cmluZyopIGNvbnN0Cit7CisgICAgcmV0
dXJuIFN0cmluZygpOworfQorICAgIAorICAgIAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBEcmFnRGF0YTo6YXNGcmFnbWVudChEb2N1bWVudCopIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JikgY29uc3QK
K3sKK30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2FuZHJvaWQvRXZlbnRMb29wQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9hbmRyb2lkL0V2ZW50TG9vcEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0V2ZW50TG9vcEFuZHJvaWQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9w
ZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkV2ZW50TG9vcC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIEV2ZW50TG9vcDo6Y3ljbGUoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="15042"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29998</attachid>
            <date>2009-05-04 16:21:41 -0700</date>
            <delta_ts>2009-06-08 13:44:22 -0700</delta_ts>
            <desc>new patch part 3 with ChangeLog</desc>
            <filename>bug23296-part-3.txt</filename>
            <type>text/plain</type>
            <size>6805</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDktMDUtMDQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCAzKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL0ZpbGVDaG9vc2VyQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwOiBBZGRlZC4KKwogMjAw
OS0wNS0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRmlsZUNo
b29zZXJBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
RmlsZUNob29zZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
YW5kcm9pZC9GaWxlQ2hvb3NlckFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgi
CisKKyNpbmNsdWRlICJGb250LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIEZp
bGVDaG9vc2VyOjpiYXNlbmFtZUZvcldpZHRoKGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCkg
Y29uc3QgCit7IAorICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGEgbG90IGZhc3RlciwgYnV0
IGFzc3VtaW5nIHRoZSBkYXRhIHdpbGwgbm90CisgICAgLy8gb2Z0ZW4gYmUgbXVjaCBsb25nZXIg
dGhhbiB0aGUgcHJvdmlkZWQgd2lkdGgsIHRoaXMgbWF5IGJlIGZhc3QgZW5vdWdoLgorICAgIFN0
cmluZyBvdXRwdXQgPSBtX2ZpbGVuYW1lc1swXS5jb3B5KCk7CisgICAgd2hpbGUgKGZvbnQud2lk
dGgoVGV4dFJ1bihvdXRwdXQuaW1wbCgpKSkgPiB3aWR0aCAmJiBvdXRwdXQubGVuZ3RoKCkgPiA0
KSB7CisgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKG91dHB1dC5sZW5ndGgoKSAtIDQs
IDQsIFN0cmluZygiLi4uIikpOworICAgIH0KKyAgICByZXR1cm4gb3V0cHV0OworfQorCisvLyBU
aGUgZm9sbG93aW5nIHR3byBzdHJpbmdzIGFyZSB1c2VkIGZvciBGaWxlIFVwbG9hZCBmb3JtIGNv
bnRyb2wsIGllCisvLyA8aW5wdXQgdHlwZT0iZmlsZSI+LiBUaGUgZmlyc3QgaXMgdGhlIHRleHQg
dGhhdCBhcHBlYXJzIG9uIHRoZSBidXR0b24KKy8vIHRoYXQgd2hlbiBwcmVzc2VkLCB0aGUgdXNl
ciBjYW4gYnJvd3NlIGZvciBhbmQgc2VsZWN0IGEgZmlsZS4gVGhlCisvLyBzZWNvbmQgc3RyaW5n
IGlzIHJlbmRlcmVkIG9uIHRoZSBzY3JlZW4gd2hlbiBubyBmaWxlIGhhcyBiZWVuIHNlbGVjdGVk
LgorU3RyaW5nIGZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwoKQoreworICAgIHJldHVybiBTdHJp
bmcoIlVwbG9hZHMgRGlzYWJsZWQiKTsKK30KKworU3RyaW5nIGZpbGVCdXR0b25Ob0ZpbGVTZWxl
Y3RlZExhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCJObyBmaWxlIHNlbGVjdGVkIik7Cit9
CisKK30gLy8gbmFtZXNhcGNlIFdlYkNvcmUKKwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL0ZpbGVTeXN0ZW1BbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9hbmRyb2lkL0ZpbGVTeXN0ZW1BbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3Vy
Y2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1
ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgor
I2luY2x1ZGUgImN1dGlscy9sb2cuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBHbG9i
YWwgc3RhdGljIHVzZWQgdG8gc3RvcmUgdGhlIGJhc2UgdG8gdGhlIHBsdWdpbiBwYXRoLgorLy8g
VGhpcyBpcyBzZXQgaW4gV2ViU2V0dGluZ3MuY3BwCitTdHJpbmcgc1BsdWdpblBhdGg7CisKK0NT
dHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkgeworICAg
IHJldHVybiBwYXRoLnV0ZjgoKTsKK30KKworQ1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25z
dCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIGludCBu
dW1iZXIgPSByYW5kKCkgJSAxMDAwMCArIDE7CisgICAgQ1N0cmluZyBmaWxlbmFtZTsKKyAgICBk
byB7CisgICAgICAgIFN0cmluZyBwYXRoID0gc1BsdWdpblBhdGg7CisgICAgICAgIHBhdGguYXBw
ZW5kKCIvIik7CisgICAgICAgIHBhdGguYXBwZW5kKHByZWZpeCk7CisgICAgICAgIHBhdGguYXBw
ZW5kKFN0cmluZzo6bnVtYmVyKG51bWJlcikpOworICAgICAgICBmaWxlbmFtZSA9IHBhdGgudXRm
OCgpOworICAgICAgICBjb25zdCBjaGFyICpmc3RyID0gZmlsZW5hbWUuZGF0YSgpOworICAgICAg
ICBoYW5kbGUgPSBvcGVuKGZpbGVuYW1lLmRhdGEoKSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19F
WENMLCBTX0lSVVNSIHwgU19JV1VTUik7CisgICAgICAgIG51bWJlcisrOworICAgIH0gd2hpbGUg
KGhhbmRsZSA9PSAtMSAmJiBlcnJubyA9PSBFRVhJU1QpOworICAgIAorICAgIGlmIChoYW5kbGUg
IT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIGZpbGVuYW1lOworICAgIH0KKyAgICByZXR1cm4gQ1N0
cmluZygpOworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCit7
CisgICAgcmV0dXJuIGRsY2xvc2UobW9kdWxlKSA9PSAwOworfQorCit2b2lkIGNsb3NlRmlsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoaXNIYW5kbGVWYWxpZChoYW5k
bGUpKSB7CisgICAgICAgIGNsb3NlKGhhbmRsZSk7CisgICAgICAgIGhhbmRsZSA9IGludmFsaWRQ
bGF0Zm9ybUZpbGVIYW5kbGU7CisgICAgfQorfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBp
bnQgdG90YWxCeXRlc1dyaXR0ZW4gPSAwOworICAgIHdoaWxlICh0b3RhbEJ5dGVzV3JpdHRlbiA8
IGxlbmd0aCkgeworICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gd3JpdGUoaGFuZGxlLCBkYXRh
LCBsZW5ndGggLSB0b3RhbEJ5dGVzV3JpdHRlbik7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4g
PCAwICYmIGVycm5vICE9IEVJTlRSKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBl
bHNlIGlmIChieXRlc1dyaXR0ZW4gPiAwKQorICAgICAgICAgICAgdG90YWxCeXRlc1dyaXR0ZW4g
Kz0gYnl0ZXNXcml0dGVuOworICAgIH0KKworICAgIHJldHVybiB0b3RhbEJ5dGVzV3JpdHRlbjsK
K30KKworLy8gbmV3IGFzIG9mIFNWTiBjaGFuZ2UgMzYyNjksIFNlcHQgOCwgMjAwOAorU3RyaW5n
IGhvbWVEaXJlY3RvcnlQYXRoKCkgCit7CisgICAgcmV0dXJuIHNQbHVnaW5QYXRoOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="15043"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29999</attachid>
            <date>2009-05-04 16:25:17 -0700</date>
            <delta_ts>2009-06-08 14:11:25 -0700</delta_ts>
            <desc>new patch part 4 with ChangeLog</desc>
            <filename>bug23296-part-4.txt</filename>
            <type>text/plain</type>
            <size>22773</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDktMDUtMDQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCA0KS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL0tleUV2ZW50QW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2FuZHJvaWQvS2V5Ym9hcmRDb2Rlcy5oOiBBZGRlZC4KKwogMjAwOS0wNS0wNCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvS2V5RXZlbnRBbmRyb2lk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvS2V5RXZlbnRBbmRy
b2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlFdmVu
dEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHly
aWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKworI2lu
Y2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgPHVpL0tleWNvZGVMYWJlbHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBj
b21wYXJlIHRvIHNhbWUgZnVuY3Rpb24gaW4gZ2RrL0tleUV2ZW50R2RrLmNwcAorc3RhdGljIGlu
dCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXlDb2RlKSB7CisgICAg
Ly8gRG9lcyBub3QgcHJvdmlkZSBhbGwga2V5IGNvZGVzLCBhbmQgZG9lcyBub3QgaGFuZGxlIGFs
bCBrZXlzLgorICAgIHN3aXRjaChrZXlDb2RlKSB7CisgICAgICAgIGNhc2Uga0tleUNvZGVEZWw6
CisgICAgICAgICAgICByZXR1cm4gVktfQkFDSzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVRhYjoK
KyAgICAgICAgICAgIHJldHVybiBWS19UQUI7CisgICAgICAgIGNhc2Uga0tleUNvZGVDbGVhcjoK
KyAgICAgICAgICAgIHJldHVybiBWS19DTEVBUjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRD
ZW50ZXI6CisgICAgICAgIGNhc2Uga0tleUNvZGVOZXdsaW5lOgorICAgICAgICAgICAgcmV0dXJu
IFZLX1JFVFVSTjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVNoaWZ0TGVmdDoKKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZVNoaWZ0UmlnaHQ6CisgICAgICAgICAgICByZXR1cm4gVktfU0hJRlQ7CisgICAg
ICAgIC8vIGJhY2sgd2lsbCBzZXJ2ZSBhcyBlc2NhcGUsIGFsdGhvdWdoIHdlIHByb2JhYmx5IGRv
IG5vdCBoYXZlIGFjY2VzcyB0byBpdAorICAgICAgICBjYXNlIGtLZXlDb2RlQmFjazoKKyAgICAg
ICAgICAgIHJldHVybiBWS19FU0NBUEU7CisgICAgICAgIGNhc2Uga0tleUNvZGVTcGFjZToKKyAg
ICAgICAgICAgIHJldHVybiBWS19TUEFDRTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUhvbWU6Cisg
ICAgICAgICAgICByZXR1cm4gVktfSE9NRTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRMZWZ0
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0xFRlQ7CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFk
VXA6CisgICAgICAgICAgICByZXR1cm4gVktfVVA7CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFk
UmlnaHQ6CisgICAgICAgICAgICByZXR1cm4gVktfUklHSFQ7CisgICAgICAgIGNhc2Uga0tleUNv
ZGVEcGFkRG93bjoKKyAgICAgICAgICAgIHJldHVybiBWS19ET1dOOworICAgICAgICBjYXNlIGtL
ZXlDb2RlMDoKKyAgICAgICAgICAgIHJldHVybiBWS18wOworICAgICAgICBjYXNlIGtLZXlDb2Rl
MToKKyAgICAgICAgICAgIHJldHVybiBWS18xOworICAgICAgICBjYXNlIGtLZXlDb2RlMjoKKyAg
ICAgICAgICAgIHJldHVybiBWS18yOworICAgICAgICBjYXNlIGtLZXlDb2RlMzoKKyAgICAgICAg
ICAgIHJldHVybiBWS18zOworICAgICAgICBjYXNlIGtLZXlDb2RlNDoKKyAgICAgICAgICAgIHJl
dHVybiBWS180OworICAgICAgICBjYXNlIGtLZXlDb2RlNToKKyAgICAgICAgICAgIHJldHVybiBW
S181OworICAgICAgICBjYXNlIGtLZXlDb2RlNjoKKyAgICAgICAgICAgIHJldHVybiBWS182Owor
ICAgICAgICBjYXNlIGtLZXlDb2RlNzoKKyAgICAgICAgICAgIHJldHVybiBWS183OworICAgICAg
ICBjYXNlIGtLZXlDb2RlODoKKyAgICAgICAgICAgIHJldHVybiBWS184OworICAgICAgICBjYXNl
IGtLZXlDb2RlOToKKyAgICAgICAgICAgIHJldHVybiBWS185OworICAgICAgICBjYXNlIGtLZXlD
b2RlQToKKyAgICAgICAgICAgIHJldHVybiBWS19BOworICAgICAgICBjYXNlIGtLZXlDb2RlQjoK
KyAgICAgICAgICAgIHJldHVybiBWS19COworICAgICAgICBjYXNlIGtLZXlDb2RlQzoKKyAgICAg
ICAgICAgIHJldHVybiBWS19DOworICAgICAgICBjYXNlIGtLZXlDb2RlRDoKKyAgICAgICAgICAg
IHJldHVybiBWS19EOworICAgICAgICBjYXNlIGtLZXlDb2RlRToKKyAgICAgICAgICAgIHJldHVy
biBWS19FOworICAgICAgICBjYXNlIGtLZXlDb2RlRjoKKyAgICAgICAgICAgIHJldHVybiBWS19G
OworICAgICAgICBjYXNlIGtLZXlDb2RlRzoKKyAgICAgICAgICAgIHJldHVybiBWS19HOworICAg
ICAgICBjYXNlIGtLZXlDb2RlSDoKKyAgICAgICAgICAgIHJldHVybiBWS19IOworICAgICAgICBj
YXNlIGtLZXlDb2RlSToKKyAgICAgICAgICAgIHJldHVybiBWS19JOworICAgICAgICBjYXNlIGtL
ZXlDb2RlSjoKKyAgICAgICAgICAgIHJldHVybiBWS19KOworICAgICAgICBjYXNlIGtLZXlDb2Rl
SzoKKyAgICAgICAgICAgIHJldHVybiBWS19LOworICAgICAgICBjYXNlIGtLZXlDb2RlTDoKKyAg
ICAgICAgICAgIHJldHVybiBWS19MOworICAgICAgICBjYXNlIGtLZXlDb2RlTToKKyAgICAgICAg
ICAgIHJldHVybiBWS19NOworICAgICAgICBjYXNlIGtLZXlDb2RlTjoKKyAgICAgICAgICAgIHJl
dHVybiBWS19OOworICAgICAgICBjYXNlIGtLZXlDb2RlTzoKKyAgICAgICAgICAgIHJldHVybiBW
S19POworICAgICAgICBjYXNlIGtLZXlDb2RlUDoKKyAgICAgICAgICAgIHJldHVybiBWS19QOwor
ICAgICAgICBjYXNlIGtLZXlDb2RlUToKKyAgICAgICAgICAgIHJldHVybiBWS19ROworICAgICAg
ICBjYXNlIGtLZXlDb2RlUjoKKyAgICAgICAgICAgIHJldHVybiBWS19SOworICAgICAgICBjYXNl
IGtLZXlDb2RlUzoKKyAgICAgICAgICAgIHJldHVybiBWS19TOworICAgICAgICBjYXNlIGtLZXlD
b2RlVDoKKyAgICAgICAgICAgIHJldHVybiBWS19UOworICAgICAgICBjYXNlIGtLZXlDb2RlVToK
KyAgICAgICAgICAgIHJldHVybiBWS19VOworICAgICAgICBjYXNlIGtLZXlDb2RlVjoKKyAgICAg
ICAgICAgIHJldHVybiBWS19WOworICAgICAgICBjYXNlIGtLZXlDb2RlVzoKKyAgICAgICAgICAg
IHJldHVybiBWS19XOworICAgICAgICBjYXNlIGtLZXlDb2RlWDoKKyAgICAgICAgICAgIHJldHVy
biBWS19YOworICAgICAgICBjYXNlIGtLZXlDb2RlWToKKyAgICAgICAgICAgIHJldHVybiBWS19Z
OworICAgICAgICBjYXNlIGtLZXlDb2RlWjoKKyAgICAgICAgICAgIHJldHVybiBWS19aOworICAg
ICAgICAvLyBjb2xvbgorICAgICAgICBjYXNlIGtLZXlDb2RlU2VtaWNvbG9uOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX09FTV8xOworICAgICAgICBjYXNlIGtLZXlDb2RlQ29tbWE6CisgICAgICAg
ICAgICByZXR1cm4gVktfT0VNX0NPTU1BOworICAgICAgICBjYXNlIGtLZXlDb2RlTWludXM6Cisg
ICAgICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOworICAgICAgICBjYXNlIGtLZXlDb2RlRXF1
YWxzOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9QTFVTOworICAgICAgICBjYXNlIGtLZXlD
b2RlUGVyaW9kOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9QRVJJT0Q7CisgICAgICAgIGNh
c2Uga0tleUNvZGVTbGFzaDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fMjsKKyAgICAgICAg
Ly8gbWF5YmUgbm90IHRoZSByaWdodCBjaG9pY2UKKyAgICAgICAgY2FzZSBrS2V5Q29kZUxlZnRC
cmFja2V0OgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV80OworICAgICAgICBjYXNlIGtLZXlD
b2RlQmFja3NsYXNoOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV81OworICAgICAgICBjYXNl
IGtLZXlDb2RlUmlnaHRCcmFja2V0OgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV82OworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMg
U3RyaW5nIGtleUlkZW50aWZpZXJGb3JBbmRyb2lkS2V5Q29kZShpbnQga2V5Q29kZSkKK3sKKyAg
ICAvLyBEb2VzIG5vdCByZXR1cm4gYWxsIG9mIHRoZSBzYW1lIGtleSBpZGVudGlmaWVycywgYW5k
CisgICAgLy8gZG9lcyBub3QgaGFuZGxlIGFsbCB0aGUga2V5cy4KKyAgICBzd2l0Y2ggKGtleUNv
ZGUpIHsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUNsZWFyOgorICAgICAgICAgICAgcmV0dXJuICJD
bGVhciI7CisgICAgICAgIGNhc2Uga0tleUNvZGVOZXdsaW5lOgorICAgICAgICBjYXNlIGtLZXlD
b2RlRHBhZENlbnRlcjoKKyAgICAgICAgICAgIHJldHVybiAiRW50ZXIiOworICAgICAgICBjYXNl
IGtLZXlDb2RlSG9tZToKKyAgICAgICAgICAgIHJldHVybiAiSG9tZSI7CisgICAgICAgIGNhc2Ug
a0tleUNvZGVEcGFkRG93bjoKKyAgICAgICAgICAgIHJldHVybiAiRG93biI7CisgICAgICAgIGNh
c2Uga0tleUNvZGVEcGFkTGVmdDoKKyAgICAgICAgICAgIHJldHVybiAiTGVmdCI7CisgICAgICAg
IGNhc2Uga0tleUNvZGVEcGFkUmlnaHQ6CisgICAgICAgICAgICByZXR1cm4gIlJpZ2h0IjsKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZURwYWRVcDoKKyAgICAgICAgICAgIHJldHVybiAiVXAiOworICAg
ICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDAwN0YuCisgICAgICAg
IGNhc2Uga0tleUNvZGVEZWw6CisgICAgICAgICAgICByZXR1cm4gIlUrMDAwMDdGIjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNoYXIgdXBwZXJbMTZdOworICAgICAgICAgICAgc3By
aW50Zih1cHBlciwgIlUrJTA2WCIsIHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoa2V5Q29kZSkp
OworICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cHBlcik7CisgICAgfQorfQorCitzdGF0aWMg
aW5saW5lIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoaW50IGMpIAoreworICAgIGlmICgh
YykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmIChjID4gMHhmZmZmKSB7CisgICAg
ICAgIFVDaGFyIGxlYWQgPSBVMTZfTEVBRChjKTsKKyAgICAgICAgVUNoYXIgdHJhaWwgPSBVMTZf
VFJBSUwoYyk7CisgICAgICAgIFVDaGFyIHV0ZjE2WzJdID0ge2xlYWQsIHRyYWlsfTsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZyh1dGYxNiwgMik7CisgICAgfQorICAgIFVDaGFyIG4gPSAoVUNoYXIp
YzsKKyAgICByZXR1cm4gU3RyaW5nKCZuLCAxKTsKK30KKworUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoaW50IGtleUNvZGUsIFVDaGFyMzIgdW5pY2hhciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgdHlwZSwgaW50
IHJlcGVhdENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTW9kaWZpZXJLZXkgbW9kcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV90ZXh0KHNp
bmdsZUNoYXJhY3RlclN0cmluZyh1bmljaGFyKSkKKyAgICAsIG1fdW5tb2RpZmllZFRleHQoc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKHVuaWNoYXIpKQorICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlk
ZW50aWZpZXJGb3JBbmRyb2lkS2V5Q29kZShrZXlDb2RlKSkKKyAgICAsIG1fYXV0b1JlcGVhdChy
ZXBlYXRDb3VudCA+IDApCisgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzS2V5
Q29kZUZvcktleUV2ZW50KGtleUNvZGUpKQorICAgICwgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZShr
ZXlDb2RlKQorICAgICwgbV9pc0tleXBhZChmYWxzZSkKKyAgICAsIG1fc2hpZnRLZXkoKG1vZHMg
JiBTaGlmdEtleSkgIT0gMCkKKyAgICAsIG1fY3RybEtleSgobW9kcyAmIEN0cmxLZXkpICE9IDAp
CisgICAgLCBtX2FsdEtleSgobW9kcyAmIEFsdEtleSkgIT0gMCkKKyAgICAsIG1fbWV0YUtleSgo
bW9kcyAmIE1ldGFLZXkpICE9IDApCisgICAgLy8gYWRkZWQgZm9yIGFuZHJvaWQKKyAgICAsIG1f
cmVwZWF0Q291bnQocmVwZWF0Q291bnQpCisgICAgLCBtX3VuaWNoYXIodW5pY2hhcikKK3sKKyAg
ICAvLyBDb3BpZWQgZnJvbSB0aGUgbWFjIHBvcnQKKyAgICBpZiAobV93aW5kb3dzVmlydHVhbEtl
eUNvZGUgPT0gJ1xyJykgeworICAgICAgICBtX3RleHQgPSAiXHIiOworICAgICAgICBtX3VubW9k
aWZpZWRUZXh0ID0gIlxyIjsKKyAgICB9CisKKyAgICBpZiAobV90ZXh0ID09ICJceDdGIikKKyAg
ICAgICAgbV90ZXh0ID0gIlx4OCI7CisgICAgaWYgKG1fdW5tb2RpZmllZFRleHQgPT0gIlx4N0Yi
KQorICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gIlx4OCI7CisKKyAgICBpZiAobV93aW5kb3dz
VmlydHVhbEtleUNvZGUgPT0gOSkgeworICAgICAgICBtX3RleHQgPSAiXHg5IjsKKyAgICAgICAg
bV91bm1vZGlmaWVkVGV4dCA9ICJceDkiOworICAgIH0KK30KKworYm9vbCBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRp
c2FtYmlndWF0ZUtleURvd25FdmVudChUeXBlIHR5cGUsIGJvb2wgYmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSkKK3sKKyAgICAvLyBDb3BpZWQgd2l0aCBtb2RpZmljYXRpb24gZnJvbSB0aGUgbWFj
IHBvcnQuCisgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlEb3duKTsKKyAgICBBU1NFUlQodHlwZSA9
PSBSYXdLZXlEb3duIHx8IHR5cGUgPT0gQ2hhcik7CisgICAgbV90eXBlID0gdHlwZTsKKyAgICBp
ZiAoYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHR5cGUgPT0gUmF3S2V5RG93bikgeworICAgICAgICBtX3RleHQgPSBTdHJpbmcoKTsKKyAgICAg
ICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
a2V5SWRlbnRpZmllciA9IFN0cmluZygpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9IDA7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2FuZHJvaWQvS2V5Ym9hcmRDb2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9LZXlib2FyZENvZGVzLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2FuZHJvaWQvS2V5Ym9hcmRDb2Rlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU0NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQ
cm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbSAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEtl
eWJvYXJkQ29kZXNfSAorI2RlZmluZSBLZXlib2FyZENvZGVzX0gKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBWS19MQlVUVE9OICgwMSkgTGVmdCBtb3VzZSBidXR0b24KKy8vIFZLX1JCVVRU
T04gKDAyKSBSaWdodCBtb3VzZSBidXR0b24KKy8vIFZLX0NBTkNFTCAoMDMpIENvbnRyb2wtYnJl
YWsgcHJvY2Vzc2luZworLy8gVktfTUJVVFRPTiAoMDQpIE1pZGRsZSBtb3VzZSBidXR0b24gKHRo
cmVlLWJ1dHRvbiBtb3VzZSkKKy8vIFZLX1hCVVRUT04xICgwNSkKKy8vIFZLX1hCVVRUT04yICgw
NikKKworLy8gVktfQkFDSyAoMDgpIEJBQ0tTUEFDRSBrZXkKK2NvbnN0IGludCBWS19CQUNLID0g
MHgwODsKKworLy8gVktfVEFCICgwOSkgVEFCIGtleQorY29uc3QgaW50IFZLX1RBQiA9IDB4MDk7
CisKKy8vIFZLX0NMRUFSICgwQykgQ0xFQVIga2V5Citjb25zdCBpbnQgVktfQ0xFQVIgPSAweDBD
OworCisvLyBWS19SRVRVUk4gKDBEKQorY29uc3QgaW50IFZLX1JFVFVSTiA9IDB4MEQ7CisKKy8v
IFZLX1NISUZUICgxMCkgU0hJRlQga2V5Citjb25zdCBpbnQgVktfU0hJRlQgPSAweDEwOworCisv
LyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKK2NvbnN0IGludCBWS19DT05UUk9MID0gMHgxMTsK
KworLy8gVktfTUVOVSAoMTIpIEFMVCBrZXkKK2NvbnN0IGludCBWS19NRU5VID0gMHgxMjsKKwor
Ly8gVktfUEFVU0UgKDEzKSBQQVVTRSBrZXkKK2NvbnN0IGludCBWS19QQVVTRSA9IDB4MTM7CisK
Ky8vIFZLX0NBUElUQUwgKDE0KSBDQVBTIExPQ0sga2V5Citjb25zdCBpbnQgVktfQ0FQSVRBTCA9
IDB4MTQ7CisKKy8vIFZLX0tBTkEgKDE1KSBJbnB1dCBNZXRob2QgRWRpdG9yIChJTUUpIEthbmEg
bW9kZQorY29uc3QgaW50IFZLX0tBTkEgPSAweDE1OworCisvLyBWS19IQU5HVUVMICgxNSkgSU1F
IEhhbmd1ZWwgbW9kZSAobWFpbnRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eTsgdXNlIFZLX0hBTkdV
TCkKKy8vIFZLX0hBTkdVTCAoMTUpIElNRSBIYW5ndWwgbW9kZQorY29uc3QgaW50IFZLX0hBTkdV
TCA9IDB4MTU7CisKKy8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUKK2NvbnN0IGludCBW
S19KVU5KQSA9IDB4MTc7CisKKy8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKK2NvbnN0
IGludCBWS19GSU5BTCA9IDB4MTg7CisKKy8vIFZLX0hBTkpBICgxOSkgSU1FIEhhbmphIG1vZGUK
K2NvbnN0IGludCBWS19IQU5KQSA9IDB4MTk7CisKKy8vIFZLX0tBTkpJICgxOSkgSU1FIEthbmpp
IG1vZGUKK2NvbnN0IGludCBWS19LQU5KSSA9IDB4MTk7CisKKy8vIFZLX0VTQ0FQRSAoMUIpIEVT
QyBrZXkKK2NvbnN0IGludCBWS19FU0NBUEUgPSAweDFCOworCisvLyBWS19DT05WRVJUICgxQykg
SU1FIGNvbnZlcnQKK2NvbnN0IGludCBWS19DT05WRVJUID0gMHgxQzsKKworLy8gVktfTk9OQ09O
VkVSVCAoMUQpIElNRSBub25jb252ZXJ0Citjb25zdCBpbnQgVktfTk9OQ09OVkVSVCA9IDB4MUQ7
CisKKy8vIFZLX0FDQ0VQVCAoMUUpIElNRSBhY2NlcHQKK2NvbnN0IGludCBWS19BQ0NFUFQgPSAw
eDFFOworCisvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QKK2Nv
bnN0IGludCBWS19NT0RFQ0hBTkdFID0gMHgxRjsKKworLy8gVktfU1BBQ0UgKDIwKSBTUEFDRUJB
UgorY29uc3QgaW50IFZLX1NQQUNFID0gMHgyMDsKKworLy8gVktfUFJJT1IgKDIxKSBQQUdFIFVQ
IGtleQorY29uc3QgaW50IFZLX1BSSU9SID0gMHgyMTsKKworLy8gVktfTkVYVCAoMjIpIFBBR0Ug
RE9XTiBrZXkKK2NvbnN0IGludCBWS19ORVhUID0gMHgyMjsKKworLy8gVktfRU5EICgyMykgRU5E
IGtleQorY29uc3QgaW50IFZLX0VORCA9IDB4MjM7CisKKy8vIFZLX0hPTUUgKDI0KSBIT01FIGtl
eQorY29uc3QgaW50IFZLX0hPTUUgPSAweDI0OworCisvLyBWS19MRUZUICgyNSkgTEVGVCBBUlJP
VyBrZXkKK2NvbnN0IGludCBWS19MRUZUID0gMHgyNTsKKworLy8gVktfVVAgKDI2KSBVUCBBUlJP
VyBrZXkKK2NvbnN0IGludCBWS19VUCA9IDB4MjY7CisKKy8vIFZLX1JJR0hUICgyNykgUklHSFQg
QVJST1cga2V5Citjb25zdCBpbnQgVktfUklHSFQgPSAweDI3OworCisvLyBWS19ET1dOICgyOCkg
RE9XTiBBUlJPVyBrZXkKK2NvbnN0IGludCBWS19ET1dOID0gMHgyODsKKworLy8gVktfU0VMRUNU
ICgyOSkgU0VMRUNUIGtleQorY29uc3QgaW50IFZLX1NFTEVDVCA9IDB4Mjk7CisKKy8vIFZLX1BS
SU5UICgyQSkgUFJJTlQga2V5Citjb25zdCBpbnQgVktfUFJJTlQgPSAweDJBOworCisvLyBWS19F
WEVDVVRFICgyQikgRVhFQ1VURSBrZXkKK2NvbnN0IGludCBWS19FWEVDVVRFID0gMHgyQjsKKwor
Ly8gVktfU05BUFNIT1QgKDJDKSBQUklOVCBTQ1JFRU4ga2V5Citjb25zdCBpbnQgVktfU05BUFNI
T1QgPSAweDJDOworCisvLyBWS19JTlNFUlQgKDJEKSBJTlMga2V5Citjb25zdCBpbnQgVktfSU5T
RVJUID0gMHgyRDsKKworLy8gVktfREVMRVRFICgyRSkgREVMIGtleQorY29uc3QgaW50IFZLX0RF
TEVURSA9IDB4MkU7CisKKy8vIFZLX0hFTFAgKDJGKSBIRUxQIGtleQorY29uc3QgaW50IFZLX0hF
TFAgPSAweDJGOworCisvLyAoMzApIDAga2V5Citjb25zdCBpbnQgVktfMCA9IDB4MzA7CisKKy8v
ICgzMSkgMSBrZXkKK2NvbnN0IGludCBWS18xID0gMHgzMTsKKworLy8gKDMyKSAyIGtleQorY29u
c3QgaW50IFZLXzIgPSAweDMyOworCisvLyAoMzMpIDMga2V5Citjb25zdCBpbnQgVktfMyA9IDB4
MzM7CisKKy8vICgzNCkgNCBrZXkKK2NvbnN0IGludCBWS180ID0gMHgzNDsKKworLy8gKDM1KSA1
IGtleTsKKworY29uc3QgaW50IFZLXzUgPSAweDM1OworCisvLyAoMzYpIDYga2V5Citjb25zdCBp
bnQgVktfNiA9IDB4MzY7CisKKy8vICgzNykgNyBrZXkKK2NvbnN0IGludCBWS183ID0gMHgzNzsK
KworLy8gKDM4KSA4IGtleQorY29uc3QgaW50IFZLXzggPSAweDM4OworCisvLyAoMzkpIDkga2V5
Citjb25zdCBpbnQgVktfOSA9IDB4Mzk7CisKKy8vICg0MSkgQSBrZXkKK2NvbnN0IGludCBWS19B
ID0gMHg0MTsKKworLy8gKDQyKSBCIGtleQorY29uc3QgaW50IFZLX0IgPSAweDQyOworCisvLyAo
NDMpIEMga2V5Citjb25zdCBpbnQgVktfQyA9IDB4NDM7CisKKy8vICg0NCkgRCBrZXkKK2NvbnN0
IGludCBWS19EID0gMHg0NDsKKworLy8gKDQ1KSBFIGtleQorY29uc3QgaW50IFZLX0UgPSAweDQ1
OworCisvLyAoNDYpIEYga2V5Citjb25zdCBpbnQgVktfRiA9IDB4NDY7CisKKy8vICg0NykgRyBr
ZXkKK2NvbnN0IGludCBWS19HID0gMHg0NzsKKworLy8gKDQ4KSBIIGtleQorY29uc3QgaW50IFZL
X0ggPSAweDQ4OworCisvLyAoNDkpIEkga2V5Citjb25zdCBpbnQgVktfSSA9IDB4NDk7CisKKy8v
ICg0QSkgSiBrZXkKK2NvbnN0IGludCBWS19KID0gMHg0QTsKKworLy8gKDRCKSBLIGtleQorY29u
c3QgaW50IFZLX0sgPSAweDRCOworCisvLyAoNEMpIEwga2V5Citjb25zdCBpbnQgVktfTCA9IDB4
NEM7CisKKy8vICg0RCkgTSBrZXkKK2NvbnN0IGludCBWS19NID0gMHg0RDsKKworLy8gKDRFKSBO
IGtleQorY29uc3QgaW50IFZLX04gPSAweDRFOworCisvLyAoNEYpIE8ga2V5Citjb25zdCBpbnQg
VktfTyA9IDB4NEY7CisKKy8vICg1MCkgUCBrZXkKK2NvbnN0IGludCBWS19QID0gMHg1MDsKKwor
Ly8gKDUxKSBRIGtleQorY29uc3QgaW50IFZLX1EgPSAweDUxOworCisvLyAoNTIpIFIga2V5Citj
b25zdCBpbnQgVktfUiA9IDB4NTI7CisKKy8vICg1MykgUyBrZXkKK2NvbnN0IGludCBWS19TID0g
MHg1MzsKKworLy8gKDU0KSBUIGtleQorY29uc3QgaW50IFZLX1QgPSAweDU0OworCisvLyAoNTUp
IFUga2V5Citjb25zdCBpbnQgVktfVSA9IDB4NTU7CisKKy8vICg1NikgViBrZXkKK2NvbnN0IGlu
dCBWS19WID0gMHg1NjsKKworLy8gKDU3KSBXIGtleQorY29uc3QgaW50IFZLX1cgPSAweDU3Owor
CisvLyAoNTgpIFgga2V5Citjb25zdCBpbnQgVktfWCA9IDB4NTg7CisKKy8vICg1OSkgWSBrZXkK
K2NvbnN0IGludCBWS19ZID0gMHg1OTsKKworLy8gKDVBKSBaIGtleQorY29uc3QgaW50IFZLX1og
PSAweDVBOworCisvLyBWS19MV0lOICg1QikgTGVmdCBXaW5kb3dzIGtleSAoTWljcm9zb2Z0IE5h
dHVyYWwga2V5Ym9hcmQpCitjb25zdCBpbnQgVktfTFdJTiA9IDB4NUI7CisKKy8vIFZLX1JXSU4g
KDVDKSBSaWdodCBXaW5kb3dzIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKK2NvbnN0IGludCBWS19S
V0lOID0gMHg1QzsKKworLy8gVktfQVBQUyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwg
a2V5Ym9hcmQpCitjb25zdCBpbnQgVktfQVBQUyA9IDB4NUQ7CisKKy8vIFZLX1NMRUVQICg1Rikg
Q29tcHV0ZXIgU2xlZXAga2V5Citjb25zdCBpbnQgVktfU0xFRVAgPSAweDVGOworCisvLyBWS19O
VU1QQUQwICg2MCkgTnVtZXJpYyBrZXlwYWQgMCBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQwID0g
MHg2MDsKKworLy8gVktfTlVNUEFEMSAoNjEpIE51bWVyaWMga2V5cGFkIDEga2V5Citjb25zdCBp
bnQgVktfTlVNUEFEMSA9IDB4NjE7CisKKy8vIFZLX05VTVBBRDIgKDYyKSBOdW1lcmljIGtleXBh
ZCAyIGtleQorY29uc3QgaW50IFZLX05VTVBBRDIgPSAweDYyOworCisvLyBWS19OVU1QQUQzICg2
MykgTnVtZXJpYyBrZXlwYWQgMyBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQzID0gMHg2MzsKKwor
Ly8gVktfTlVNUEFENCAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5Citjb25zdCBpbnQgVktfTlVN
UEFENCA9IDB4NjQ7CisKKy8vIFZLX05VTVBBRDUgKDY1KSBOdW1lcmljIGtleXBhZCA1IGtleQor
Y29uc3QgaW50IFZLX05VTVBBRDUgPSAweDY1OworCisvLyBWS19OVU1QQUQ2ICg2NikgTnVtZXJp
YyBrZXlwYWQgNiBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ2ID0gMHg2NjsKKworLy8gVktfTlVN
UEFENyAoNjcpIE51bWVyaWMga2V5cGFkIDcga2V5Citjb25zdCBpbnQgVktfTlVNUEFENyA9IDB4
Njc7CisKKy8vIFZLX05VTVBBRDggKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorY29uc3QgaW50
IFZLX05VTVBBRDggPSAweDY4OworCisvLyBWS19OVU1QQUQ5ICg2OSkgTnVtZXJpYyBrZXlwYWQg
OSBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ5ID0gMHg2OTsKKworLy8gVktfTVVMVElQTFkgKDZB
KSBNdWx0aXBseSBrZXkKK2NvbnN0IGludCBWS19NVUxUSVBMWSA9IDB4NkE7CisKKy8vIFZLX0FE
RCAoNkIpIEFkZCBrZXkKK2NvbnN0IGludCBWS19BREQgPSAweDZCOworCisvLyBWS19TRVBBUkFU
T1IgKDZDKSBTZXBhcmF0b3Iga2V5Citjb25zdCBpbnQgVktfU0VQQVJBVE9SID0gMHg2QzsKKwor
Ly8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKK2NvbnN0IGludCBWS19TVUJUUkFDVCA9
IDB4NkQ7CisKKy8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorY29uc3QgaW50IFZLX0RF
Q0lNQUwgPSAweDZFOworCisvLyBWS19ESVZJREUgKDZGKSBEaXZpZGUga2V5Citjb25zdCBpbnQg
VktfRElWSURFID0gMHg2RjsKKworLy8gVktfRjEgKDcwKSBGMSBrZXkKK2NvbnN0IGludCBWS19G
MSA9IDB4NzA7CisKKy8vIFZLX0YyICg3MSkgRjIga2V5Citjb25zdCBpbnQgVktfRjIgPSAweDcx
OworCisvLyBWS19GMyAoNzIpIEYzIGtleQorY29uc3QgaW50IFZLX0YzID0gMHg3MjsKKworLy8g
VktfRjQgKDczKSBGNCBrZXkKK2NvbnN0IGludCBWS19GNCA9IDB4NzM7CisKKy8vIFZLX0Y1ICg3
NCkgRjUga2V5Citjb25zdCBpbnQgVktfRjUgPSAweDc0OworCisvLyBWS19GNiAoNzUpIEY2IGtl
eQorY29uc3QgaW50IFZLX0Y2ID0gMHg3NTsKKworLy8gVktfRjcgKDc2KSBGNyBrZXkKK2NvbnN0
IGludCBWS19GNyA9IDB4NzY7CisKKy8vIFZLX0Y4ICg3NykgRjgga2V5Citjb25zdCBpbnQgVktf
RjggPSAweDc3OworCisvLyBWS19GOSAoNzgpIEY5IGtleQorY29uc3QgaW50IFZLX0Y5ID0gMHg3
ODsKKworLy8gVktfRjEwICg3OSkgRjEwIGtleQorY29uc3QgaW50IFZLX0YxMCA9IDB4Nzk7CisK
Ky8vIFZLX0YxMSAoN0EpIEYxMSBrZXkKK2NvbnN0IGludCBWS19GMTEgPSAweDdBOworCisvLyBW
S19GMTIgKDdCKSBGMTIga2V5Citjb25zdCBpbnQgVktfRjEyID0gMHg3QjsKKworLy8gVktfRjEz
ICg3QykgRjEzIGtleQorY29uc3QgaW50IFZLX0YxMyA9IDB4N0M7CisKKy8vIFZLX0YxNCAoN0Qp
IEYxNCBrZXkKK2NvbnN0IGludCBWS19GMTQgPSAweDdEOworCisvLyBWS19GMTUgKDdFKSBGMTUg
a2V5Citjb25zdCBpbnQgVktfRjE1ID0gMHg3RTsKKworLy8gVktfRjE2ICg3RikgRjE2IGtleQor
Y29uc3QgaW50IFZLX0YxNiA9IDB4N0Y7CisKKy8vIFZLX0YxNyAoODBIKSBGMTcga2V5Citjb25z
dCBpbnQgVktfRjE3ID0gMHg4MDsKKworLy8gVktfRjE4ICg4MUgpIEYxOCBrZXkKK2NvbnN0IGlu
dCBWS19GMTggPSAweDgxOworCisvLyBWS19GMTkgKDgySCkgRjE5IGtleQorY29uc3QgaW50IFZL
X0YxOSA9IDB4ODI7CisKKy8vIFZLX0YyMCAoODNIKSBGMjAga2V5Citjb25zdCBpbnQgVktfRjIw
ID0gMHg4MzsKKworLy8gVktfRjIxICg4NEgpIEYyMSBrZXkKK2NvbnN0IGludCBWS19GMjEgPSAw
eDg0OworCisvLyBWS19GMjIgKDg1SCkgRjIyIGtleQorY29uc3QgaW50IFZLX0YyMiA9IDB4ODU7
CisKKy8vIFZLX0YyMyAoODZIKSBGMjMga2V5Citjb25zdCBpbnQgVktfRjIzID0gMHg4NjsKKwor
Ly8gVktfRjI0ICg4N0gpIEYyNCBrZXkKK2NvbnN0IGludCBWS19GMjQgPSAweDg3OworCisvLyBW
S19OVU1MT0NLICg5MCkgTlVNIExPQ0sga2V5Citjb25zdCBpbnQgVktfTlVNTE9DSyA9IDB4OTA7
CisKKy8vIFZLX1NDUk9MTCAoOTEpIFNDUk9MTCBMT0NLIGtleQorY29uc3QgaW50IFZLX1NDUk9M
TCA9IDB4OTE7CisKKy8vIFZLX0xTSElGVCAoQTApIExlZnQgU0hJRlQga2V5Citjb25zdCBpbnQg
VktfTFNISUZUID0gMHhBMDsKKworLy8gVktfUlNISUZUIChBMSkgUmlnaHQgU0hJRlQga2V5Citj
b25zdCBpbnQgVktfUlNISUZUID0gMHhBMTsKKworLy8gVktfTENPTlRST0wgKEEyKSBMZWZ0IENP
TlRST0wga2V5Citjb25zdCBpbnQgVktfTENPTlRST0wgPSAweEEyOworCisvLyBWS19SQ09OVFJP
TCAoQTMpIFJpZ2h0IENPTlRST0wga2V5Citjb25zdCBpbnQgVktfUkNPTlRST0wgPSAweEEzOwor
CisvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKK2NvbnN0IGludCBWS19MTUVOVSA9IDB4
QTQ7CisKKy8vIFZLX1JNRU5VIChBNSkgUmlnaHQgTUVOVSBrZXkKK2NvbnN0IGludCBWS19STUVO
VSA9IDB4QTU7CisKKy8vIFZLX0JST1dTRVJfQkFDSyAoQTYpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBCYWNrIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfQkFDSyA9IDB4QTY7CisKKy8vIFZL
X0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3YXJkIGtl
eQorY29uc3QgaW50IFZLX0JST1dTRVJfRk9SV0FSRCA9IDB4QTc7CisKKy8vIFZLX0JST1dTRVJf
UkVGUkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZyZXNoIGtleQorY29uc3Qg
aW50IFZLX0JST1dTRVJfUkVGUkVTSCA9IDB4QTg7CisKKy8vIFZLX0JST1dTRVJfU1RPUCAoQTkp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdG9wIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJf
U1RPUCA9IDB4QTk7CisKKy8vIFZLX0JST1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAyMDAwL1hQ
OiBCcm93c2VyIFNlYXJjaCBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX1NFQVJDSCA9IDB4QUE7
CisKKy8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBCcm93c2Vy
IEZhdm9yaXRlcyBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX0ZBVk9SSVRFUyA9IDB4QUI7CisK
Ky8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdGFydCBh
bmQgSG9tZSBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX0hPTUUgPSAweEFDOworCisvLyBWS19W
T0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIE11dGUga2V5Citjb25zdCBp
bnQgVktfVk9MVU1FX01VVEUgPSAweEFEOworCisvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdpbmRv
d3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5Citjb25zdCBpbnQgVktfVk9MVU1FX0RPV04gPSAw
eEFFOworCisvLyBWS19WT0xVTUVfVVAgKEFGKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBVcCBr
ZXkKK2NvbnN0IGludCBWS19WT0xVTUVfVVAgPSAweEFGOworCisvLyBWS19NRURJQV9ORVhUX1RS
QUNLIChCMCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQorY29uc3QgaW50IFZLX01F
RElBX05FWFRfVFJBQ0sgPSAweEIwOworCisvLyBWS19NRURJQV9QUkVWX1RSQUNLIChCMSkgV2lu
ZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFjayBrZXkKK2NvbnN0IGludCBWS19NRURJQV9QUkVW
X1RSQUNLID0gMHhCMTsKKworLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAwMC9YUDog
U3RvcCBNZWRpYSBrZXkKK2NvbnN0IGludCBWS19NRURJQV9TVE9QID0gMHhCMjsKKworLy8gVktf
TUVESUFfUExBWV9QQVVTRSAoQjMpIFdpbmRvd3MgMjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBr
ZXkKK2NvbnN0IGludCBWS19NRURJQV9QTEFZX1BBVVNFID0gMHhCMzsKKworLy8gVktfTEFVTkNI
X01BSUwgKEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwga2V5Citjb25zdCBpbnQgVktf
TUVESUFfTEFVTkNIX01BSUwgPSAweEI0OworCisvLyBWS19MQVVOQ0hfTUVESUFfU0VMRUNUIChC
NSkgV2luZG93cyAyMDAwL1hQOiBTZWxlY3QgTWVkaWEga2V5Citjb25zdCBpbnQgVktfTUVESUFf
TEFVTkNIX01FRElBX1NFTEVDVCA9IDB4QjU7CisKKy8vIFZLX0xBVU5DSF9BUFAxIChCNikgV2lu
ZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQorY29uc3QgaW50IFZLX01FRElB
X0xBVU5DSF9BUFAxID0gMHhCNjsKKworLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5kb3dzIDIw
MDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5Citjb25zdCBpbnQgVktfTUVESUFfTEFVTkNI
X0FQUDIgPSAweEI3OworCisvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMg
Y2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9y
IHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5Citjb25zdCBpbnQgVktfT0VN
XzEgPSAweEJBOworCisvLyBWS19PRU1fUExVUyAoQkIpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFu
eSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcrJyBrZXkKK2NvbnN0IGludCBWS19PRU1fUExVUyA9IDB4
QkI7CisKKy8vIFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3Vu
dHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKK2NvbnN0IGludCBWS19PRU1fQ09NTUEgPSAweEJDOwor
CisvLyBWS19PRU1fTUlOVVMgKEJEKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9y
ZWdpb24sIHRoZSAnLScga2V5Citjb25zdCBpbnQgVktfT0VNX01JTlVTID0gMHhCRDsKKworLy8g
VktfT0VNX1BFUklPRCAoQkUpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lv
biwgdGhlICcuJyBrZXkKK2NvbnN0IGludCBWS19PRU1fUEVSSU9EID0gMHhCRTsKKworLy8gVktf
T0VNXzIgKEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5
IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9h
cmQsIHRoZSAnLz8nIGtleQorY29uc3QgaW50IFZLX09FTV8yID0gMHhCRjsKKworLy8gVktfT0VN
XzMgKEMwKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5
IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQs
IHRoZSAnYH4nIGtleQorY29uc3QgaW50IFZLX09FTV8zID0gMHhDMDsKKworLy8gVktfT0VNXzQg
KERCKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtl
eWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRo
ZSAnW3snIGtleQorY29uc3QgaW50IFZLX09FTV80ID0gMHhEQjsKKworLy8gVktfT0VNXzUgKERD
KSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJv
YXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAn
XHwnIGtleQorY29uc3QgaW50IFZLX09FTV81ID0gMHhEQzsKKworLy8gVktfT0VNXzYgKEREKSBV
c2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJk
LiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXX0n
IGtleQorY29uc3QgaW50IFZLX09FTV82ID0gMHhERDsKKworLy8gVktfT0VNXzcgKERFKSBVc2Vk
IGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBX
aW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnc2luZ2xl
LXF1b3RlL2RvdWJsZS1xdW90ZScga2V5Citjb25zdCBpbnQgVktfT0VNXzcgPSAweERFOworCisv
LyBWS19PRU1fOCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuCitjb25zdCBpbnQgVktfT0VNXzggPSAweERGOworCisvLyBWS19P
RU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQga2V5
IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJvYXJkCitjb25zdCBp
bnQgVktfT0VNXzEwMiA9IDB4RTI7CisKKy8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5kb3dzIDk1
Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VTUyBrZXkK
K2NvbnN0IGludCBWS19QUk9DRVNTS0VZID0gMHhFNTsKKworLy8gVktfUEFDS0VUIChFNykgV2lu
ZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFzIGlmIHRoZXkg
d2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93IHdvcmQgb2YgYSAz
Mi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJkIGlucHV0IG1ldGhv
ZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJESU5QVVQsU2VuZElu
cHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKK2NvbnN0IGludCBWS19QQUNLRVQgPSAweEU3
OworCisvLyBWS19BVFROIChGNikgQXR0biBrZXkKK2NvbnN0IGludCBWS19BVFROID0gMHhGNjsK
KworLy8gVktfQ1JTRUwgKEY3KSBDclNlbCBrZXkKK2NvbnN0IGludCBWS19DUlNFTCA9IDB4Rjc7
CisKKy8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5Citjb25zdCBpbnQgVktfRVhTRUwgPSAweEY4
OworCisvLyBWS19FUkVPRiAoRjkpIEVyYXNlIEVPRiBrZXkKK2NvbnN0IGludCBWS19FUkVPRiA9
IDB4Rjk7CisKKy8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQorY29uc3QgaW50IFZLX1BMQVkgPSAw
eEZBOworCisvLyBWS19aT09NIChGQikgWm9vbSBrZXkKK2NvbnN0IGludCBWS19aT09NID0gMHhG
QjsKKworLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKK2NvbnN0IGlu
dCBWS19OT05BTUUgPSAweEZDOworCisvLyBWS19QQTEgKEZEKSBQQTEga2V5Citjb25zdCBpbnQg
VktfUEExID0gMHhGRDsKKworLy8gVktfT0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5Citjb25zdCBp
bnQgVktfT0VNX0NMRUFSID0gMHhGRTsKKworY29uc3QgaW50IFZLX1VOS05PV04gPSAwOworCit9
CisKKyNlbmRpZiAvLyBLZXlib2FyZENvZGVzX2gK
</data>
<flag name="review"
          id="15044"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30000</attachid>
            <date>2009-05-04 16:27:34 -0700</date>
            <delta_ts>2009-06-08 13:55:47 -0700</delta_ts>
            <desc>new patch part 5 with ChangeLog</desc>
            <filename>bug23296-part-5.txt</filename>
            <type>text/plain</type>
            <size>4703</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDktMDUtMDQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCA1KS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL0xvY2FsaXplZFN0cmluZ3NBbmRyb2lkLmNwcDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9Qb3B1cE1lbnVBbmRyb2lkLmNwcDogQWRkZWQuCisK
IDIwMDktMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0xv
Y2FsaXplZFN0cmluZ3NBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvTG9jYWxpemVkU3RyaW5nc0FuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL0xvY2FsaXplZFN0cmluZ3NBbmRyb2lkLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9p
ZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVs
IEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxl
bWVudCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIkluc3BlY3QgRWxlbWVudCIp
OworfQorCitTdHJpbmcgdW5rbm93bkZpbGVTaXplVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoIlVua25vd24iKTsKK30KKworU3RyaW5nIGltYWdlVGl0bGUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9Qb3B1cE1lbnVBbmRyb2lkLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9Qb3B1cE1lbnVBbmRyb2lk
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50
cyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNv
dXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gTm93IHdlIGhhbmRsZSBhbGwgb2YgdGhpcyBpbiBXZWJWaWV3Q29y
ZS5jcHAuCitQb3B1cE1lbnU6OlBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIG1lbnVMaXN0KQor
ICAgIDogbV9wb3B1cENsaWVudChtZW51TGlzdCkKK3sKK30KKworUG9wdXBNZW51Ojp+UG9wdXBN
ZW51KCkKK3sKK30KKwordm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYsIEZyYW1l
VmlldyosIGludCkKK3sKKworfQorCit2b2lkIFBvcHVwTWVudTo6aGlkZSgpCit7Cit9CisKK3Zv
aWQgUG9wdXBNZW51Ojp1cGRhdGVGcm9tRWxlbWVudCgpIAoreworfQorCitib29sIFBvcHVwTWVu
dTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="15045"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30002</attachid>
            <date>2009-05-04 16:29:53 -0700</date>
            <delta_ts>2009-06-08 17:56:17 -0700</delta_ts>
            <desc>new patch part 6 with ChangeLog</desc>
            <filename>bug23296-part-6.txt</filename>
            <type>text/plain</type>
            <size>17807</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDktMDUtMDQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCA2KS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmg6IEFkZGVkLgorCiAyMDA5
LTA1LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9SZW5kZXJU
aGVtZUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9S
ZW5kZXJUaGVtZUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzM5
IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQW5k
cm9pZC5oIgorCisjaW5jbHVkZSAiUmVuZGVyU2tpbkFuZHJvaWQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTa2luQnV0dG9uLmgiCisjaW5jbHVkZSAiUmVuZGVyU2tpbkNvbWJvLmgiCisjaW5jbHVkZSAi
UmVuZGVyU2tpblJhZGlvLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSAiU2tDYW52YXMuaCIK
KworI2RlZmluZSBNQVhfQ09NQk9fSEVJR0hUIDIwCisKKy8vIEFkZCBhIGNvbnN0YW50IGFtb3Vu
dCBvZiBwYWRkaW5nIHRvIHRoZSB0ZXh0c2l6ZSB0byBnZXQgdGhlIGZpbmFsIGhlaWdodCBvZiBi
dXR0b25zLAorLy8gc28gdGhhdCBvdXIgYnV0dG9uIGltYWdlcyBhcmUgbGFyZ2UgZW5vdWdoIHRv
IHByb3Blcmx5IGZpdCB0aGUgdGV4dC4KKyNkZWZpbmUgQlVUVE9OX1BBRERJTkcgMTgKKworLy8g
QWRkIHBhZGRpbmcgdG8gdGhlIGZvbnRTaXplIG9mIExpc3RCb3hlcyB0byBnZXQgdGhlaXIgbWF4
aW11bSBzaXplcy4KKy8vIExpc3Rib3hlcyBvZnRlbiBoYXZlIGEgc3BlY2lmaWVkIHNpemUuICBT
aW5jZSB3ZSBjaGFuZ2UgdGhlbSBpbnRvIGRyb3Bkb3ducywKKy8vIHdlIHdhbnQgYSBtdWNoIHNt
YWxsZXIgaGVpZ2h0LCB3aGljaCBlbmNvbXBhc3NlcyB0aGUgdGV4dC4KKyNkZWZpbmUgTElTVEJP
WF9QQURESU5HIDUKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU2tDYW52YXMqIGdl
dENhbnZhc0Zyb21JbmZvKGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpbmZvKQorewor
ICAgIHJldHVybiBpbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tQ2FudmFzOworfQor
CisvLyAgSGVscGVyIGZ1bmN0aW9uIHRoYXQgcGFpbnRzIHRoZSBSZW5kZXJPYmplY3QKKy8vICBw
YXJhbXRlcnM6CisvLyAgICAgIHRoZSBza2luIHRvIHVzZSwgCisvLyAgICAgIHRoZSBvYmplY3Qg
dG8gYmUgcGFpbnRlZCwgdGhlIFBhaW50SW5mbywgZnJvbSB3aGljaCB3ZSBnZXQgdGhlIGNhbnZh
cywgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSwgCisvLyAgcmV0dXJucyBmYWxzZSwgbWVhbmluZyBu
byBvbmUgZWxzZSBoYXMgdG8gcGFpbnQgaXQKK3N0YXRpYyBib29sIHBhaW50QnJ1c2goUmVuZGVy
U2tpbkFuZHJvaWQqIHJTa2luLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCAgY29uc3QgSW50UmVjdCYgaXIpCit7CisgICAgTm9kZSogZWxlbWVudCA9
IG8tPmVsZW1lbnQoKTsKKyAgICBTa0NhbnZhcyogY2FudmFzID0gZ2V0Q2FudmFzRnJvbUluZm8o
aSk7CisgICAgY2FudmFzLT5zYXZlKCk7CisgICAgY2FudmFzLT50cmFuc2xhdGUoU2tJbnRUb1Nj
YWxhcihpci54KCkpLCBTa0ludFRvU2NhbGFyKGlyLnkoKSkpOworICAgIHJTa2luLT5zZXREaW0o
aXIud2lkdGgoKSwgaXIuaGVpZ2h0KCkpOworICAgIHJTa2luLT5ub3RpZnlTdGF0ZShlbGVtZW50
KTsKKyAgICByU2tpbi0+ZHJhdyhpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBj
YW52YXMtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlbmRlclRoZW1lKiB0
aGVtZSgpCit7CisgICAgc3RhdGljIFJlbmRlclRoZW1lQW5kcm9pZCBhbmRyb2lkVGhlbWU7Cisg
ICAgcmV0dXJuICZhbmRyb2lkVGhlbWU7Cit9CisKK1JlbmRlclRoZW1lQW5kcm9pZDo6UmVuZGVy
VGhlbWVBbmRyb2lkKCkKK3sKKyAgICBtX3JhZGlvID0gbmV3IFJlbmRlclNraW5SYWRpbyhmYWxz
ZSk7CisgICAgbV9jaGVja2JveCA9IG5ldyBSZW5kZXJTa2luUmFkaW8odHJ1ZSk7CisgICAgbV9j
b21ibyA9IG5ldyBSZW5kZXJTa2luQ29tYm8oKTsKK30KKworUmVuZGVyVGhlbWVBbmRyb2lkOjp+
UmVuZGVyVGhlbWVBbmRyb2lkKCkKK3sKKyAgICBkZWxldGUgbV9yYWRpbzsKKyAgICBkZWxldGUg
bV9jaGVja2JveDsKKyAgICBkZWxldGUgbV9jb21ibzsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFu
ZHJvaWQ6OmNsb3NlKCkKK3sKK30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnN0YXRlQ2hh
bmdlZChSZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdGF0ZSBzdGF0ZSkgY29uc3QKK3sKKyAgICBp
ZiAoQ2hlY2tlZFN0YXRlID09IHN0YXRlKSB7CisgICAgICAgIG8tPnJlcGFpbnQoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworQ29sb3IgUmVu
ZGVyVGhlbWVBbmRyb2lkOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKDQ2LCAyNTEsIDApOworfQorCitDb2xvciBSZW5k
ZXJUaGVtZUFuZHJvaWQ6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAoreworICAgIHJldHVybiBDb2xvcigyNTUsIDI1NSwgMCwgMjU1KTsKK30KKworQ29s
b3IgUmVuZGVyVGhlbWVBbmRyb2lkOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjpibGFjazsKK30KKworQ29sb3IgUmVu
ZGVyVGhlbWVBbmRyb2lkOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBSZW5kZXJU
aGVtZUFuZHJvaWQ6OnBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gQ29sb3IoMTkyLCAxOTIsIDE5Mik7Cit9CisKK2ludCBSZW5kZXJUaGVtZUFu
ZHJvaWQ6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvYmopIGNvbnN0Cit7
CisgICAgLy8gRnJvbSB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcyBmdW5jdGlvbiBpbiBSZW5kZXJU
aGVtZS5oOgorICAgIC8vIEEgbWV0aG9kIHRvIG9idGFpbiB0aGUgYmFzZWxpbmUgcG9zaXRpb24g
Zm9yIGEgImxlYWYiIGNvbnRyb2wuICBUaGlzIHdpbGwgb25seSBiZSB1c2VkIGlmIGEgYmFzZWxp
bmUKKyAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hp
bGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YK
KyAgICAvLyBjb250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KKyAgICAvLworICAgIC8vIE91
ciBjaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIG5lZWQgdG8gYmUgb2Zmc2V0IHRvIGxpbmUg
dXAgcHJvcGVybHkuCisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKG9i
aikgLSA1OworfQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRkSW50cmluc2ljTWFyZ2lu
cyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gQ3V0IG91dCB0aGUgaW50cmlu
c2ljIG1hcmdpbnMgY29tcGxldGVseSBpZiB3ZSBlbmQgdXAgdXNpbmcgYSBzbWFsbCBmb250IHNp
emUKKyAgICBpZiAoc3R5bGUtPmZvbnRTaXplKCkgPCAxMSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIC8vIEludHJpbnNpYyBtYXJnaW4gdmFsdWUuCisgICAgY29uc3QgaW50IG0gPSAyOwor
ICAgIAorICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNv
IGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KKyAgICBpZiAoc3R5
bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1h
cmdpbkxlZnQoKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkxlZnQoTGVu
Z3RoKG0sIEZpeGVkKSk7CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luUmlnaHQoKS5xdWlyaygp
KQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblJpZ2h0KExlbmd0aChtLCBGaXhlZCkpOwor
ICAgIH0KKworICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAgICAgICAgaWYg
KHN0eWxlLT5tYXJnaW5Ub3AoKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdp
blRvcChMZW5ndGgobSwgRml4ZWQpKTsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Cb3R0b20o
KS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkJvdHRvbShMZW5ndGgobSwg
Rml4ZWQpKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpzdXBwb3J0c0Zv
Y3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpCit7CisgICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7
CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDoK
KyAgICAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0QnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2Vi
Q29yZTo6RWxlbWVudCogZSkgY29uc3QKK3sKKyAgICAvLyBQYWRkaW5nIGNvZGUgaXMgdGFrZW4g
ZnJvbSBSZW5kZXJUaGVtZVNhZmFyaS5jcHAKKyAgICAvLyBJdCBtYWtlcyBzdXJlIHdlIGhhdmUg
ZW5vdWdoIHNwYWNlIGZvciB0aGUgYnV0dG9uIHRleHQuCisgICAgY29uc3QgaW50IHBhZGRpbmcg
PSA4OworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsK
KyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
IHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKHN0eWxlLT5mb250U2l6ZSgpICsgQlVUVE9OX1BB
RERJTkcsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVBbmRyb2lkOjpwYWludENoZWNr
Ym94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIGlyKQoreworICAgIHJldHVybiBwYWludEJydXNoKG1fY2hlY2tib3gsIG8s
IGksIGlyKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIGlyKQoreworICAgIC8vIElmIGl0IGlzIGEgZGlzYWJsZWQgYnV0dG9uLCBzaW1wbHkgcGFp
bnQgaXQgdG8gdGhlIG1hc3RlciBwaWN0dXJlLgorICAgIE5vZGUqIGVsZW1lbnQgPSBvLT5lbGVt
ZW50KCk7CisgICAgaWYgKCFlbGVtZW50LT5pc0VuYWJsZWQoKSkgeworICAgICAgICBSZW5kZXJT
a2luQnV0dG9uOjpEcmF3KGdldENhbnZhc0Zyb21JbmZvKGkpLCBpciwgUmVuZGVyU2tpbkFuZHJv
aWQ6OmtEaXNhYmxlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU3RvcmUgYWxsIHRoZSBp
bXBvcnRhbnQgaW5mb3JtYXRpb24gaW4gdGhlIHBsYXRmb3JtIGNvbnRleHQuCisgICAgICAgIGku
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnN0b3JlQnV0dG9uSW5mbyhlbGVtZW50LCBpcik7
CisgICAgfQorICAgIC8vIFdlIGFsd2F5cyByZXR1cm4gZmFsc2Ugc28gd2UgZG8gbm90IHJlcXVl
c3QgdG8gYmUgcmVkcmF3bi4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVBbmRyb2lkOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIGlyKQoreworICAgIHJldHVybiBwYWludEJy
dXNoKG1fcmFkaW8sIG8sIGksIGlyKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aCgxOSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCgx
OSwgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnNldFJhZGlvU2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBj
aGVja2JveGVzLgorICAgIHNldENoZWNrYm94U2l6ZShzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVBbmRyb2lkOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAorewor
ICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lQW5k
cm9pZDo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgaXIpCit7CisgICAgcmV0dXJuIHRydWU7ICAg
IAorfQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVt
ZW50KiBlKSBjb25zdAoreworICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOworfQorCiti
b29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBpcikKK3sKKyAg
ICBpZiAoby0+aXNNZW51TGlzdCgpKSB7CisgICAgICAgIHJldHVybiBwYWludENvbWJvKG8sIGks
IGlyKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7ICAgIAorfQorCit2b2lkIFJlbmRlclRoZW1l
QW5kcm9pZDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIGFkZEludHJp
bnNpY01hcmdpbnMoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6cGFpbnRT
ZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiBpcikKK3sKKyAgICByZXR1cm4gdHJ1ZTsgICAgCit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVBbmRyb2lkOjphZGp1c3RMaXN0Ym94U3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChSZW5kZXJTa2luQ29tYm86OmV4dHJhV2lk
dGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0TWF4SGVpZ2h0KExlbmd0aChzdHlsZS0+Zm9u
dFNpemUoKSArIExJU1RCT1hfUEFERElORywgRml4ZWQpKTsKKyAgICBhZGRJbnRyaW5zaWNNYXJn
aW5zKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFuZHJvaWQ6OmFkanVzdE1lbnVMaXN0
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChSZW5k
ZXJTa2luQ29tYm86OmV4dHJhV2lkdGgoKSwgRml4ZWQpKTsKKyAgICBhZGRJbnRyaW5zaWNNYXJn
aW5zKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUFuZHJvaWQ6OnBhaW50Q29tYm8oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgIGNvbnN0IElu
dFJlY3QmIGlyKQoreworICAgIGlmIChvLT5zdHlsZSgpICYmIG8tPnN0eWxlKCktPmJhY2tncm91
bmRDb2xvcigpLmFscGhhKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgTm9kZSog
ZWxlbWVudCA9IG8tPmVsZW1lbnQoKTsKKyAgICBpbnQgaGVpZ2h0ID0gaXIuaGVpZ2h0KCk7Cisg
ICAgaW50IHkgPSBpci55KCk7CisgICAgLy8gSWYgdGhlIGNvbWJvIGJveCBpcyB0b28gbGFyZ2Us
IGxlYXZlIGl0IGF0IGl0cyBtYXggaGVpZ2h0LCBhbmQgY2VudGVyIGl0LgorICAgIGlmIChoZWln
aHQgPiBNQVhfQ09NQk9fSEVJR0hUKSB7CisgICAgICAgIHkgKz0gKGhlaWdodCAtIE1BWF9DT01C
T19IRUlHSFQpID4+IDE7CisgICAgICAgIGhlaWdodCA9IE1BWF9DT01CT19IRUlHSFQ7CisgICAg
fQorICAgIHJldHVybiBtX2NvbWJvLT5EcmF3KGdldENhbnZhc0Zyb21JbmZvKGkpLCBlbGVtZW50
LCBpci54KCksIHksIGlyLndpZHRoKCksIGhlaWdodCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVB
bmRyb2lkOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIGlyKSAKK3sgCisgICAgcmV0dXJuIHBhaW50
Q29tYm8obywgaSwgaXIpOworfQorCit2b2lkIFJlbmRlclRoZW1lQW5kcm9pZDo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIC8vIENvcGllZCBmcm9tIFJlbmRlclRo
ZW1lU2FmYXJpLgorICAgIGNvbnN0IGZsb2F0IGJhc2VGb250U2l6ZSA9IDExLjBmOworICAgIGNv
bnN0IGludCBiYXNlQm9yZGVyUmFkaXVzID0gNTsKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICAKKyAgICBzdHlsZS0+cmVzZXRQYWRk
aW5nKCk7CisgICAgc3R5bGUtPnNldEJvcmRlclJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVy
UmFkaXVzICsgZm9udFNjYWxlIC0gMSksIGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxl
IC0gMSkpKTsgLy8gRklYTUU6IFJvdW5kIHVwPworCisgICAgY29uc3QgaW50IG1pbkhlaWdodCA9
IDE1OworICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsK
KyAgICAKKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7CisgICAgLy8gRm91bmQgdGhlc2UgcGFkZGluZyBudW1iZXJzIGJ5IHRyaWFsIGFu
ZCBlcnJvci4KKyAgICBjb25zdCBpbnQgcGFkZGluZyA9IDQ7CisgICAgc3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIC8vIEFkZGVkIHRvIG1ha2Ugcm9vbSBmb3Ig
b3VyIGFycm93LgorICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKFJlbmRlclNraW5D
b21ibzo6ZXh0cmFXaWR0aCgpLCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9p
ZDo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBpcikgCit7CisgICAgcmV0dXJuIHBhaW50
Q29tYm8obywgaSwgaXIpOworfQorCitib29sIFJlbmRlclRoZW1lQW5kcm9pZDo6c3VwcG9ydHNG
b2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiAo
c3R5bGUtPm9wYWNpdHkoKSA+IDAgJiYgc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSAKKyAgICAgICAg
ICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBUZXh0RmllbGRQYXJ0IAorICAg
ICAgICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBwZWFyYW5jZSgpICE9IFNlYXJjaEZpZWxkUGFy
dCAKKyAgICAgICAgICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2UoKSAhPSBUZXh0QXJl
YVBhcnQgCisgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0gQ2hl
Y2tib3hQYXJ0CisgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0g
UmFkaW9QYXJ0CisgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBlYXJhbmNlKCkgIT0g
UHVzaEJ1dHRvblBhcnQKKyAgICAgICAgICAgICAgICAgICAgJiYgc3R5bGUtPmFwcGVhcmFuY2Uo
KSAhPSBTcXVhcmVCdXR0b25QYXJ0CisgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlLT5hcHBl
YXJhbmNlKCkgIT0gQnV0dG9uUGFydAorICAgICAgICAgICAgICAgICAgICAmJiBzdHlsZS0+YXBw
ZWFyYW5jZSgpICE9IEJ1dHRvbkJldmVsUGFydAorICAgICAgICAgICAgICAgICAgICAmJiBzdHls
ZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0UGFydAorICAgICAgICAgICAgICAgICAgICAmJiBz
dHlsZS0+YXBwZWFyYW5jZSgpICE9IE1lbnVsaXN0QnV0dG9uUGFydAorICAgICAgICAgICAgICAg
ICAgICApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2FuZHJvaWQvUmVuZGVyVGhlbWVBbmRyb2lkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL1JlbmRlclRoZW1lQW5kcm9pZC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVu
IFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyVGhlbWVBbmRyb2lkX2gKKyNk
ZWZpbmUgUmVuZGVyVGhlbWVBbmRyb2lkX2gKKworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU2tpbkJ1dHRvbjsKK2NsYXNzIFJl
bmRlclNraW5SYWRpbzsKK2NsYXNzIFJlbmRlclNraW5Db21ibzsKKworc3RydWN0IFRoZW1lRGF0
YSB7CisgICAgVGhlbWVEYXRhKCkgOm1fcGFydCgwKSwgbV9zdGF0ZSgwKSB7fQorCisgICAgdW5z
aWduZWQgbV9wYXJ0OworICAgIHVuc2lnbmVkIG1fc3RhdGU7Cit9OworCitjbGFzcyBSZW5kZXJU
aGVtZUFuZHJvaWQgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworcHVibGljOgorICAgIFJlbmRlclRo
ZW1lQW5kcm9pZCgpOworICAgIH5SZW5kZXJUaGVtZUFuZHJvaWQoKTsKKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgc3RhdGVDaGFuZ2VkKFJlbmRlck9iamVjdCosIENvbnRyb2xTdGF0ZSkgY29uc3Q7
CisgICAgICAgCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3Q7CisgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVt
ZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4K
KyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0IHsgcmV0dXJuIHN0eWxlLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygpOyB9CisKKyAgICB2
aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0Owor
CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisgICAgCisg
ICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50LCBXZWJDb3JlOjpGb250RGVzY3JpcHRpb24m
KSBjb25zdCB7fQorCisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9v
bCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2Jv
eFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3Jl
OjpFbGVtZW50KiBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCog
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwor
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CisgICAgCisgICAg
Ym9vbCBwYWludENvbWJvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksICBjb25zdCBJbnRSZWN0JiBpcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TGlzdGJveFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworCitwcml2YXRlOgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFy
Z2lucyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OworICAgIHZvaWQgY2xvc2UoKTsKKworICAg
IGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKTsKKyAgICAvLyBGSVhN
RTogVGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIHVzZSBvbmUgUmVuZGVyU2tpblJhZGlvIGZvciBi
b3RoIHJhZGlvIGFuZCBjaGVja2JveAorICAgIFJlbmRlclNraW5SYWRpbyogICAgbV9yYWRpbzsK
KyAgICBSZW5kZXJTa2luUmFkaW8qICAgIG1fY2hlY2tib3g7CisgICAgUmVuZGVyU2tpbkNvbWJv
KiAgICBtX2NvbWJvOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
UmVuZGVyVGhlbWVBbmRyb2lkX2gKKwo=
</data>
<flag name="review"
          id="15047"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30003</attachid>
            <date>2009-05-04 16:32:18 -0700</date>
            <delta_ts>2009-05-22 06:44:54 -0700</delta_ts>
            <desc>new patch part 7 with ChangeLog</desc>
            <filename>bug23296-part-7.txt</filename>
            <type>text/plain</type>
            <size>11733</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDUtMDQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCA3KS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL1NjcmVlbkFuZHJvaWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9hbmRyb2lkL1Njcm9sbFZpZXdBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vYW5kcm9pZC9TZWFyY2hQb3B1cE1lbnVBbmRyb2lkLmNwcDogQWRkZWQuCisKIDIw
MDktMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NjcmVl
bkFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TY3Jl
ZW5BbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9T
Y3JlZW5BbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNkZWZpbmUgTE9HX1RBRyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNjcmVlbi5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
V2lkZ2V0LmgiCisKKyN1bmRlZiBMT0cgLy8gRklYTUU6IFN0aWxsIGhhdmUgdG8gZG8gdGhpcyB0
byBnZXQgdGhlIGxvZyB0byBzaG93IHVwCisjaW5jbHVkZSAidXRpbHMvTG9nLmgiCisKKyNpbmNs
dWRlICJ1aS9TdXJmYWNlQ29tcG9zZXJDbGllbnQuaCIKKyNpbmNsdWRlICJ1aS9QaXhlbEZvcm1h
dC5oIgorI2luY2x1ZGUgInVpL0Rpc3BsYXlJbmZvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworaW50IHNjcmVlbkRlcHRoKFdpZGdldCogcGFnZSkKK3sKKyAgICBhbmRyb2lkOjpEaXNwbGF5
SW5mbyBpbmZvOworICAgIGFuZHJvaWQ6OlN1cmZhY2VDb21wb3NlckNsaWVudDo6Z2V0RGlzcGxh
eUluZm8oYW5kcm9pZDo6RGlzcGxheUlEKDApLCAmaW5mbyk7CisgICAgcmV0dXJuIGluZm8ucGl4
ZWxGb3JtYXRJbmZvLmJpdHNQZXJQaXhlbDsKK30KKworaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9u
ZW50KFdpZGdldCogcGFnZSkKK3sKKyAgICBhbmRyb2lkOjpEaXNwbGF5SW5mbyBpbmZvOworICAg
IGFuZHJvaWQ6OlN1cmZhY2VDb21wb3NlckNsaWVudDo6Z2V0RGlzcGxheUluZm8oYW5kcm9pZDo6
RGlzcGxheUlEKDApLCAmaW5mbyk7CisgICAgcmV0dXJuIGluZm8ucGl4ZWxGb3JtYXRJbmZvLmJp
dHNQZXJQaXhlbDsKK30KKworYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiBwYWdlKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmZGVmIEFORFJPSURfT1JJRU5UQVRJT05fU1VQ
UE9SVAoraW50IFNjcmVlbjo6b3JpZW50YXRpb24oKSBjb25zdAoreworICAgIGFuZHJvaWQ6OkRp
c3BsYXlJbmZvIGluZm87CisgICAgYW5kcm9pZDo6U3VyZmFjZUNvbXBvc2VyQ2xpZW50OjpnZXRE
aXNwbGF5SW5mbygKKyAgICAgICAgICAgIGFuZHJvaWQ6OkRpc3BsYXlJRCgwKSwgJmluZm8pOwor
ICAgIC8vIGdldERpc3BsYXlJbmZvIHJldHVybnMgYW4gZW51bSBkZXNjcmliaW5nIHRoZSBvcmll
bnRhdGlvbi4gTWFwIHRoZSBlbnVtCisgICAgLy8gdG8gdGhlIHZhbHVlcyBkZXNjcmliZWQgaGVy
ZQorICAgIC8vIChodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL0FwcGxl
QXBwbGljYXRpb25zL1JlZmVyZW5jZS9TYWZhcmlXZWJDb250ZW50L0hhbmRsaW5nRXZlbnRzL2No
YXB0ZXJfOF9zZWN0aW9uXzYuaHRtbCkKKyAgICBzd2l0Y2ggKGluZm8ub3JpZW50YXRpb24pIHsK
KyAgICAgICAgY2FzZSBhbmRyb2lkOjpJU3VyZmFjZUNvbXBvc2VyOjplT3JpZW50YXRpb25EZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgYW5kcm9pZDo6SVN1cmZh
Y2VDb21wb3Nlcjo6ZU9yaWVudGF0aW9uOTA6CisgICAgICAgICAgICByZXR1cm4gOTA7CisgICAg
ICAgIGNhc2UgYW5kcm9pZDo6SVN1cmZhY2VDb21wb3Nlcjo6ZU9yaWVudGF0aW9uMTgwOgorICAg
ICAgICAgICAgcmV0dXJuIDE4MDsKKyAgICAgICAgY2FzZSBhbmRyb2lkOjpJU3VyZmFjZUNvbXBv
c2VyOjplT3JpZW50YXRpb24yNzA6CisgICAgICAgICAgICByZXR1cm4gLTkwOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgTE9HRSgiQmFkIG9yaWVudGF0aW9uIHJldHVybmVkIGZyb20g
Z2V0RGlzcGxheUluZG8gJWQiLAorICAgICAgICAgICAgICAgICAgICBpbmZvLm9yaWVudGF0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKyNlbmRpZgorCisvLyBUaGUgb25s
eSBwbGFjZSBJIGhhdmUgc2VlbiB0aGVzZSB2YWx1ZXMgdXNlZCBpcworLy8gcG9zaXRpb25pbmcg
cG9wdXAgd2luZG93cy4gSWYgd2Ugc3VwcG9ydCBtdWx0aXBsZSB3aW5kb3dzCisvLyB0aGV5IHdp
bGwgYmUgbW9zdCBsaWtlbHkgZnVsbCBzY3JlZW4uIFRoZXJlZm9yZSwKKy8vIHRoZSBhY2N1cmFj
eSBvZiB0aGVzZSBudW1iZXIgYXJlIG5vdCB0b28gaW1wb3J0YW50LgorRmxvYXRSZWN0IHNjcmVl
blJlY3QoV2lkZ2V0KiBwYWdlKQoreworICAgIGFuZHJvaWQ6OkRpc3BsYXlJbmZvIGluZm87Cisg
ICAgYW5kcm9pZDo6U3VyZmFjZUNvbXBvc2VyQ2xpZW50OjpnZXREaXNwbGF5SW5mbyhhbmRyb2lk
OjpEaXNwbGF5SUQoMCksICZpbmZvKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KDAuMCwgMC4wLCBp
bmZvLncsIGluZm8uaCk7Cit9CisKKy8vIFNpbWlsYXIgc2NyZWVuUmVjdCwgdGhpcyBmdW5jdGlv
biBpcyBjb21tb25seSB1c2VkIGJ5IGphdmFzY3JpcHRzCisvLyB0byBwb3NpdGlvbiBhbmQgcmVz
aXplIHdpbmRvd3MgKHVzdWFsbHkgdG8gZnVsbCBzY3JlZW4pLiAKK0Zsb2F0UmVjdCBzY3JlZW5B
dmFpbGFibGVSZWN0KFdpZGdldCopCit7CisgICAgYW5kcm9pZDo6RGlzcGxheUluZm8gaW5mbzsK
KyAgICBhbmRyb2lkOjpTdXJmYWNlQ29tcG9zZXJDbGllbnQ6OmdldERpc3BsYXlJbmZvKGFuZHJv
aWQ6OkRpc3BsYXlJRCgwKSwgJmluZm8pOworICAgIHJldHVybiBGbG9hdFJlY3QoMC4wLCAwLjAs
IGluZm8udywgaW5mby5oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL1Njcm9sbFZpZXdBbmRyb2lkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvU2Nyb2xsVmlld0FuZHJvaWQuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1Njcm9sbFZpZXdBbmRyb2lkLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhl
IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2RlZmluZSBMT0dfVEFHICJXZWJD
b3JlIgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIldlYkNvcmVGcmFtZUJyaWRnZS5oIgorI2luY2x1ZGUgIldl
YkNvcmVWaWV3QnJpZGdlLmgiCisjaW5jbHVkZSAiV2ViVmlld0NvcmUuaCIKKworLyoKKyAgICBU
aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uIGRvZXMgTk9UIGFjdHVhbGx5IGVtdWxhdGUgdGhlIFF0
IFNjcm9sbFZpZXcuCisgICAgSXQgZG9lcyBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHRoYXQg
a2h0bWwgd2lsbCB1c2UgdG8gaW50ZXJhY3Qgd2l0aAorICAgIFdlYktpdCdzIFdlYkZyYW1lVmll
dyBkb2N1bWVudFZpZXcgYW5kIG91ciBOU1Njcm9sbFZpZXcgc3ViY2xhc3MuCisKKyAgICBTY3Jv
bGxWaWV3J3MgdmlldyBpcyBhIE5TU2Nyb2xsVmlldyAob3Igc3ViY2xhc3Mgb2YgTlNTY3JvbGxW
aWV3KQorICAgIGluIG1vc3QgY2FzZXMuIFRoYXQgc2Nyb2xsdmlldyBpcyBhIHN1YnZpZXcgb2Yg
YW4KKyAgICBXZWJDb3JlRnJhbWVWaWV3LiBUaGUgV2ViQ29yZUZyYW1lVmlldydzIGRvY3VtZW50
VmlldyB3aWxsIGFsc28gYmUKKyAgICB0aGUgc2Nyb2xsIHZpZXcncyBkb2N1bWVudFZpZXcuCisg
ICAgCisgICAgVGhlIFdlYkNvcmVGcmFtZVZpZXcncyBzaXplIGlzIHRoZSBmcmFtZSBzaXplLiAg
VGhlIFdlYkNvcmVGcmFtZVZpZXcncyBkb2N1bWVudFZpZXcKKyAgICBjb3JyZXNwb25kcyB0byB0
aGUgZnJhbWUgY29udGVudCBzaXplLiAgVGhlIHNjcm9sbHZpZXcgaXRzZWxmIGlzIGF1dG9zaXpl
ZCB0byB0aGUKKyAgICBXZWJDb3JlRnJhbWVWaWV3J3Mgc2l6ZSAoc2VlIFdpZGdldDo6cmVzaXpl
KS4KKyovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50UmVjdCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybVZpc2libGVDb250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdAorewor
ICAgIEludFJlY3QgcmVjdCA9IHBsYXRmb3JtV2lkZ2V0KCktPmdldEJvdW5kcygpOworICAgIC8v
IFRoaXMgbWFrZXMgc3ViZnJhbWVzIGRyYXcgY29ycmVjdGx5LCBzaW5jZSBzdWJmcmFtZXMgY2Fu
bm90IHNjcm9sbC4KKyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KDAs
IDAsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisK
K0ludFNpemUgU2Nyb2xsVmlldzo6cGxhdGZvcm1Db250ZW50c1NpemUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwdCkKK3sKKyAgICBpZiAo
cGFyZW50KCkpIC8vIGRvbid0IGF0dGVtcHQgdG8gc2Nyb2xsIHN1YmZyYW1lczsgdGhleSdyZSBm
dWxseSB2aXNpYmxlCisgICAgICAgIHJldHVybjsKKyAgICBhbmRyb2lkOjpXZWJWaWV3Q29yZTo6
Z2V0V2ViVmlld0NvcmUodGhpcyktPnNjcm9sbFRvKHB0LngoKSwgcHQueSgpKTsKK30KKwordm9p
ZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVNjcm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUmIGgsIFNj
cm9sbGJhck1vZGUmIHYpIGNvbnN0Cit7CisgICAgaCA9IHYgPSBTY3JvbGxiYXJBbHdheXNPZmY7
Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1Qcm9oaWJpdHNTY3JvbGxpbmcoKQorewor
ICAgIGlmICghaXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEZyYW1l
VmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpOworICAgIC8vIFdlIHdh
bnQgdG8gaWdub3JlIHJlcXVlc3RzIHRvIHNjcm9sbCB0aGF0IHdlcmUgbm90IGluaXRpYXRlZCBi
eSB0aGUgdXNlci4gIEFuCisgICAgLy8gZXhhbXBsZSBvZiB0aGlzIGlzIHdoZW4gdGV4dCBpcyBp
bnNlcnRlZCBpbnRvIGEgdGV4dGZpZWxkL2FyZWEsIHdoaWNoIHJlc3VsdHMgaW4KKyAgICAvLyBh
IHNjcm9sbC4gIFdlIGlnbm9yZSB0aGlzIGJlY2F1c2Ugd2Ugbm93IGhvdyB0byBkbyB0aGlzIG91
cnNlbHZlcyBpbiB0aGUgVUkgdGhyZWFkLgorICAgIC8vIEFuIGV4YW1wbGUgb2YgaXQgYmVpbmcg
aW5pdGlhdGVkIGJ5IHRoZSB1c2VyIGlzIGlmIHRoZSB1c2VyIGNsaWNrcyBhbiBhbmNob3IKKyAg
ICAvLyBlbGVtZW50IHdoaWNoIHNpbXBseSBzY3JvbGxzIHRoZSBwYWdlLgorICAgIHJldHVybiAh
YW5kcm9pZDo6V2ViRnJhbWU6OmdldFdlYkZyYW1lKHZpZXctPmZyYW1lKCkpLT51c2VySW5pdGlh
dGVkQ2xpY2soKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybVJlcGFpbnRDb250ZW50
UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QgJnJlY3QsIGJvb2wgbm93KQoreworICAgIGFuZHJvaWQ6
OldlYlZpZXdDb3JlOjpnZXRXZWJWaWV3Q29yZSh0aGlzKS0+Y29udGVudEludmFsaWRhdGUocmVj
dCk7Cit9CisKKyNpZmRlZiBBTkRST0lEX0NBUFRVUkVfT0ZGU0NSRUVOX1BBSU5UUwordm9pZCBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybU9mZnNjcmVlbkNvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBhbmRyb2lkOjpXZWJWaWV3Q29yZTo6Z2V0V2ViVmlld0NvcmUodGhp
cyktPm9mZkludmFsaWRhdGUocmVjdCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1NlYXJjaFBvcHVwTWVudUFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9TZWFyY2hQb3B1
cE1lbnVBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9p
ZC9TZWFyY2hQb3B1cE1lbnVBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTYXZlIHRoZSBwYXN0IHNlYXJjaGVzIHN0
b3JlZCBpbiAnc2VhcmNoSXRlbXMnIHRvIGEgZGF0YWJhc2UgYXNzb2NpYXRlZCB3aXRoICduYW1l
Jwordm9pZCBTZWFyY2hQb3B1cE1lbnU6OnNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcykgCit7IAorfQor
CisvLyBMb2FkIHBhc3Qgc2VhcmNoZXMgYXNzb2NpYXRlZCB3aXRoICduYW1lJyBmcm9tIHRoZSBk
YXRhYmFzZSB0byAnc2VhcmNoSXRlbXMnCit2b2lkIFNlYXJjaFBvcHVwTWVudTo6bG9hZFJlY2Vu
dFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9yPFN0cmluZz4mIHNlYXJj
aEl0ZW1zKSAKK3sgCit9CisKKy8vIENyZWF0ZSBhIHNlYXJjaCBwb3B1cCBtZW51IC0gbm90IHN1
cmUgd2hhdCBlbHNlIHdlIGhhdmUgdG8gZG8gaGVyZQorU2VhcmNoUG9wdXBNZW51OjpTZWFyY2hQ
b3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCisgICAgOiBQb3B1cE1lbnUoY2xpZW50
KSAKK3sgCit9CisgICAgICAgIAorYm9vbCBTZWFyY2hQb3B1cE1lbnU6OmVuYWJsZWQoKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="15048"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30004</attachid>
            <date>2009-05-04 16:35:19 -0700</date>
            <delta_ts>2009-06-08 17:56:43 -0700</delta_ts>
            <desc>new patch part 8 with ChangeLog</desc>
            <filename>bug23296-part-8.txt</filename>
            <type>text/plain</type>
            <size>11584</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDktMDUtMDQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCA4KS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL1N5c3RlbVRpbWVBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vYW5kcm9pZC9UZXh0Qm91bmRhcmllcy5jcHA6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2FuZHJvaWQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5jcHA6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2FuZHJvaWQvV2lkZ2V0QW5kcm9pZC5jcHA6IEFkZGVkLgor
CiAyMDA5LTA1LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9T
eXN0ZW1UaW1lQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL1N5c3RlbVRpbWVBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9TeXN0ZW1UaW1lQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv
amVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3lzdGVtVGltZS5o
IgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitkb3Vi
bGUgY3VycmVudFRpbWUoKQoreworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisgICAgZ2V0dGlt
ZW9mZGF5KCZ0diwgKHN0cnVjdCB0aW1lem9uZSAqKSBOVUxMKTsKKyAgICBkb3VibGUgbm93ID0g
dHYudHZfc2VjICsgKHR2LnR2X3VzZWMgLyAxMDAwMDAwLjApOworICAgIAorICAgIHJldHVybiBu
b3c7Cit9CisKK3VpbnQzMl90IGdldF90aHJlYWRfbXNlYygpCit7CisjaWYgZGVmaW5lZChIQVZF
X1BPU0lYX0NMT0NLUykKKyAgICBzdHJ1Y3QgdGltZXNwZWMgdG07CisKKyAgICBjbG9ja19nZXR0
aW1lKENMT0NLX1RIUkVBRF9DUFVUSU1FX0lELCAmdG0pOworICAgIAorICAgIHJldHVybiB0bS50
dl9zZWMgKiAxMDAwTEwgKyB0bS50dl9uc2VjIC8gMTAwMDAwMDsKKyNlbHNlCisgICAgc3RydWN0
IHRpbWV2YWwgdHY7CisgICAgCisgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisgICAgcmV0
dXJuIHR2LnR2X3NlYyAqIDEwMDBMTCArIHR2LnR2X3VzZWMgLyAxMDAwOworI2VuZGlmCit9CisK
K30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
VGV4dEJvdW5kYXJpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9p
ZC9UZXh0Qm91bmRhcmllcy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Fu
ZHJvaWQvVGV4dEJvdW5kYXJpZXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5o
IgorCisjaW5jbHVkZSA8dW5pY29kZS91YnJrLmg+CisKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVy
YXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBmaW5kTmV4dFdvcmRGcm9tSW5k
ZXgoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2Fy
ZCkKK3sKKyAgICBVQnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywg
bGVuKTsKKworICAgIGludCBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOworCisgICAgaWYgKGZvcndh
cmQpIHsKKyAgICAgICAgcG9zaXRpb24gPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOwor
ICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVUJSS19ET05FKSB7CisgICAgICAgICAgICAvLyBX
ZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgcHJlY2VlZGluZyB0aGUgYnJlYWsK
KyAgICAgICAgICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlv
biA8IGxlbiAmJiB1X2lzYWxudW0oY2hhcnNbcG9zaXRpb24gLSAxXSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgICAgICAgICBwb3NpdGlvbiA9IHVicmtfZm9sbG93
aW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGVuOworICAg
IH0gZWxzZSB7CisgICAgICAgIHBvc2l0aW9uID0gdWJya19wcmVjZWRpbmcoaXQsIHBvc2l0aW9u
KTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9ORSkgeworICAgICAgICAgICAg
Ly8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgYnJl
YWsKKyAgICAgICAgICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3Np
dGlvbiA+IDAgJiYgdV9pc2FsbnVtKGNoYXJzW3Bvc2l0aW9uXSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHBvc2l0aW9uOworCisgICAgICAgICAgICBwb3NpdGlvbiA9IHVicmtfcHJlY2VkaW5n
KGl0LCBwb3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9
CisKK3ZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGlu
dCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCit7CisgICAgVUJyZWFrSXRlcmF0b3Iq
IGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisgICAgKmVuZCA9IHVicmtfZm9s
bG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgaWYgKCplbmQgPCAwKQorICAgICAgICAqZW5kID0g
dWJya19sYXN0KGl0KTsKKyAgICAqc3RhcnQgPSB1YnJrX3ByZXZpb3VzKGl0KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNV
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3
LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCkK
K3sKKyAgICByZXR1cm4gImVuX3VzIjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1dpZGdldEFuZHJvaWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9XaWRnZXRBbmRyb2lkLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9XaWRnZXRBbmRyb2lkLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNywgVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJXZWJDb3JlRnJhbWVCcmlkZ2UuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
Vmlld0JyaWRnZS5oIgorI2luY2x1ZGUgIldlYlZpZXdDb3JlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworV2lkZ2V0OjpXaWRnZXQoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQoreworICAgIGlu
aXQod2lkZ2V0KTsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKKyAgICBBU1NFUlQoIXBhcmVu
dCgpKTsKKyAgICByZWxlYXNlUGxhdGZvcm1XaWRnZXQoKTsKK30KKworSW50UmVjdCBXaWRnZXQ6
OmZyYW1lUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHVzZSBtX2ZyYW1lIGluc3RlYWQ/
CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAw
LCAwLCAwKTsKKyAgICByZXR1cm4gcGxhdGZvcm1XaWRnZXQoKS0+Z2V0Qm91bmRzKCk7Cit9CisK
K3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIC8vIEZJWE1FOiBpbiB3aGF0IGNhc2UsIHdpbGwgdGhpcyBiZSBjYWxsZWQgZm9y
IHRoZSB0b3AgZnJhbWU/CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1
cm47CisgICAgcGxhdGZvcm1XaWRnZXQoKS0+ZHJhdyhjdHgsIHIpOworfQorCit2b2lkIFdpZGdl
dDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCkKK3sKKyAgICBSZWxlYXNlKHBsYXRmb3JtV2lkZ2V0
KCkpOworfQorCit2b2lkIFdpZGdldDo6cmV0YWluUGxhdGZvcm1XaWRnZXQoKQoreworICAgIFJl
dGFpbihwbGF0Zm9ybVdpZGdldCgpKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdp
ZGdldDo6c2hvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsgCit9CisKK3ZvaWQgV2lkZ2V0
OjpoaWRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAKK30KKwordm9pZCBXaWRnZXQ6OnNl
dEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIEZJWE1FOiBzZXQgbV9m
cmFtZSBpbnN0ZWFkPworICAgIC8vIHBsYXRmb3JtV2lkZ2V0KCkgaXMgTlVMTCB3aGVuIGNhbGxl
ZCBmcm9tIFNjcm9sbGJhcgorICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHBsYXRmb3JtV2lkZ2V0KCktPnNldExvY2F0aW9uKHJlY3QueCgpLCByZWN0Lnko
KSk7CisgICAgcGxhdGZvcm1XaWRnZXQoKS0+c2V0U2l6ZShyZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpOworfQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sIGlzU2VsZWN0ZWQp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworaW50IFdpZGdldDo6c2NyZWVuV2lkdGgo
KSBjb25zdAoreworICAgIGNvbnN0IFdpZGdldCogd2lkZ2V0ID0gdGhpczsKKyAgICB3aGlsZSAo
IXdpZGdldC0+aXNGcmFtZVZpZXcoKSkgeworICAgICAgICB3aWRnZXQgPSB3aWRnZXQtPnBhcmVu
dCgpOworICAgICAgICBpZiAoIXdpZGdldCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBpZiAoIXdpZGdldCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYW5kcm9pZDo6
V2ViVmlld0NvcmU6OmdldFdlYlZpZXdDb3JlKAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29u
c3QgU2Nyb2xsVmlldyo+KHdpZGdldCkpLT5zY3JlZW5XaWR0aCgpOworfQorCit9IC8vIFdlYkNv
cmUgbmFtZXBzYWNlCg==
</data>
<flag name="review"
          id="15049"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30005</attachid>
            <date>2009-05-04 16:38:12 -0700</date>
            <delta_ts>2009-06-08 17:57:01 -0700</delta_ts>
            <desc>new patch part 9 with ChangeLog</desc>
            <filename>bug23296-part-9.txt</filename>
            <type>text/plain</type>
            <size>21299</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMDktMDUtMDQgIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCA5KS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IEFkZGVkLgorCiAyMDA5
LTA1LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTY1
IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyNkZWZpbmUgTE9HX1RBRyAiV2ViQ29yZSIKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjZGVmaW5lIEFORFJPSURfQ09NUElMRV9IQUNLCisKKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRl
ICJDYWNoZWRQYWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJD
b29raWVKYXIuaCIKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnUu
aCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2UuaCIKKy8vI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAi
RWRpdENvbW1hbmQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKKyNpbmNsdWRlICJGaWxlLmgiCisj
aW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MS2V5Z2Vu
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhpc3RvcnkuaCIKKyNpbmNsdWRlICJJY29uLmgiCisjaW5j
bHVkZSAiSWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSWNvbkxvYWRlci5oIgorI2luY2x1ZGUg
IkludFBvaW50LmgiCisjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgorI2luY2x1ZGUg
IkphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIgorI2luY2x1ZGUgIkFQSS9KU0NsYXNzUmVmLmgiCisj
aW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHRQcm9m
aWxlLmgiCisjaW5jbHVkZSAiam5pX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiTGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJMb2NhbGl6
ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiTWFpblJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQu
aCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJTY3JlZW4uaCIKKyNpbmNsdWRlICJT
Y3JvbGxiYXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNtYXJ0
UmVwbGFjZS5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgZnJhbWUgdmlldyBoYXMg
Y2hhbmdlZCB0aGUgc3RhdGUgb2YgaXQncyBib3JkZXIuCisvLyBpRnJhbWVzLCB3aGljaCBhcmUg
aGF2ZSBhIEZyYW1lVmlldywgYXJlIGRyYXduIHdpdGggYSAxcHggbGVmdC9yaWdodCBib3JkZXIg
YW5kIDJweCB0b3AvYm90dG9tIGJvcmRlcgorLy8gQ2hlY2sgZnVuY3Rpb24gX3Nob3VsZERyYXdC
b3JkZXIgaW4gV2ViRnJhbWVWaWV3Lm1tCisvLyBXZSBkb24ndCBkcmF3IGJvcmRlcnMgdW5sZXNz
IGNzcyBkcmF3cyB0aGVtLgorLy92b2lkIEZyYW1lVmlldzo6dXBkYXRlQm9yZGVyKCkgeyB2ZXJp
ZmllZE9rKCk7IH0KKy8vaW50IFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdl
dCopIHsgQVNTRVJUKDApOyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorLy9ib29sIFdl
YkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKSB7IEFTU0VSVCgwKTsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbXBsZXRlbHkgZW1wdHkgc3R1YnMg
KG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KKy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gVGhpcyBmdW5jdGlvbiBp
cyB1c2VkIGJ5IEphdmFzY3JpcHQgdG8gZmluZCBvdXQgd2hhdCB0aGUgZGVmYXVsdCBsYW5ndWFn
ZQorLy8gdGhlIHVzZXIgaGFzIHNlbGVjdGVkLiBJdCBpcyB1c2VkIGJ5IHRoZSBKUyBvYmplY3Qg
TmF2aWdhdG9yLmxhbmd1YWdlCisvLyBJIGd1ZXNzIHRoaXMgaW5mb3JtYXRpb24gc2hvdWxkIGJl
IG1hcHBlZCB3aXRoIHRoZSBBY2NlcHQtTGFuZ3VhZ2U6IEhUVFAgaGVhZGVyLgorU3RyaW5nIFdl
YkNvcmU6OmRlZmF1bHRMYW5ndWFnZSgpCit7CisgICAgdmVyaWZpZWRPaygpOworICAgIHJldHVy
biAiZW4iOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhZGVmaW5lZChBTkRST0lE
X1BMVUdJTlMpCisvLyBJZiBwbHVnaW5zIHN1cHBvcnQgaXMgdHVybmVkIG9uLCBkb24ndCB1c2Ug
dGhlc2Ugc3R1YnMuCisKKy8vIEV4Y2VwdCBmb3Igc3VwcG9ydHNNSU1FVHlwZSgpLCB0aGVzZSBQ
bHVnaW4gZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IGphdmFzY3JpcHQncworLy8gbmF2aWdhdG9yLnBs
dWdpbnNbXSBvYmplY3QgdG8gcHJvdmlkZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcGx1Z2lucy4g
VGhpcyBpcyBtb3N0CisvLyBvZnRlbiB1c2VkIHdpdGggdG8gY2hlY2sgdG8gc2VlIGlmIHRoZSBi
cm93c2VyIHN1cHBvcnRzIEZsYXNoIG9yIHdoaWNoIHZpZGVvCisvLyBjb2RlYyB0byB1c2UuCisv
LyBUaGUgc3VwcG9ydHNNSU1FVHlwZSgpIGlzIHVzZWQgYnkgdGhlIEZyYW1lIHRvIGRldGVybWlu
ZSBpZiBhIGZ1bGwgc2NyZWVuIGluc3RhbmNlCisvLyBvZiBhIHBsdWdpbiBjYW4gYmUgdXNlZCB0
byByZW5kZXIgYSBtaW1ldHlwZSB0aGF0IGlzIG5vdCBuYXRpdmUgdG8gdGhlIGJyb3dzZXIuCitQ
bHVnaW5JbmZvKiBQbHVnaW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdElu
ZGV4KHVuc2lnbmVkKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5z
aWduZWQgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgdmVyaWZp
ZWRPaygpOworICAgIHJldHVybiAwOworfQorCitTdHJpbmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVn
aW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1cHBv
cnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICB2ZXJpZmllZE9rKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wpCit7CisgICAgdmVyaWZp
ZWRPaygpOworfQorCisjZW5kaWYgLy8gIWRlZmluZWQoQU5EUk9JRF9QTFVHSU5TKQorCisvLyBU
aGlzIGZ1bmN0aW9uIHRlbGxzIHRoZSBicmlkZ2UgdGhhdCBhIHJlc291cmNlIHdhcyBsb2FkZWQg
ZnJvbSB0aGUgY2FjaGUgYW5kIHRodXMKKy8vIHRoZSBhcHAgbWF5IHVwZGF0ZSBwcm9ncmVzcyB3
aXRoIHRoZSBhbW91bnQgb2YgZGF0YSBsb2FkZWQuCit2b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0
dXMoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgRmlsZSBVcGxvYWQgZm9ybSBlbGVtZW50LCBhbmQKKy8vIHRoZXJlZm9yZSBy
ZWxhdGVzIHRvIHRoZSBhYm92ZS4gV2hlbiBhIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWQsIGFuIGlj
b24KKy8vIHJlcHJlc2VudGluZyB0aGUgZmlsZSB0eXBlIGNhbiBiZSByZW5kZXJlZCBuZXh0IHRv
IHRoZSBmaWxlbmFtZSBvbiB0aGUKKy8vIHdlYiBwYWdlLiBUaGUgaWNvbiBmb3IgdGhlIGZpbGUg
aXMgZW5jYXBzdWxhdGVkIHdpdGhpbiB0aGlzIGNsYXNzLgorSWNvbjo6fkljb24oKSB7IH0KK3Zv
aWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIHsgfQorCisv
LyAqKiogVGhlIGZvbGxvd2luZyBzdHJpbmdzIHNob3VsZCBiZSBsb2NhbGl6ZWQgKioqIC8vCisK
Ky8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGZldGNoIGxvY2FsaXplZCB0
ZXh0IGZvciBIVE1MIGZvcm0KKy8vIGVsZW1lbnRzIHN1Ym1pdCBhbmQgcmVzZXQuIFRoZXNlIHN0
cmluZ3MgYXJlIHVzZWQgd2hlbiB0aGUgcGFnZSBhdXRob3IKKy8vIGhhcyBub3Qgc3BlY2lmaWVk
IGFueSB0ZXh0IGZvciB0aGVzZSBidXR0b25zLgorU3RyaW5nIHN1Ym1pdEJ1dHRvbkRlZmF1bHRM
YWJlbCgpCit7CisgICAgdmVyaWZpZWRPaygpOworICAgIHJldHVybiAiU3VibWl0IjsKK30KKwor
U3RyaW5nIHJlc2V0QnV0dG9uRGVmYXVsdExhYmVsKCkKK3sKKyAgICB2ZXJpZmllZE9rKCk7Cisg
ICAgcmV0dXJuICJSZXNldCI7Cit9CisKKy8vIFRoZSBhbHQgdGV4dCBmb3IgYW4gaW5wdXQgZWxl
bWVudCBpcyBub3QgdXNlZCB2aXN1YWxseSwgYnV0IHJhdGhlciBpcworLy8gdXNlZCBmb3IgYWNj
ZXNzYWJpbGl0eSAtIGVnIHJlYWRpbmcgdGhlIHdlYiBwYWdlLiBTZWUKKy8vIEhUTUxJbnB1dEVs
ZW1lbnQ6OmFsdFRleHQoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK1N0cmluZyBpbnB1dEVsZW1l
bnRBbHRUZXh0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworLy8gVGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgYXBwZWFycyBiZWZvcmUgYW4gaW5w
dXQgYm94IHdoZW4gdGhlIEhUTUwgZWxlbWVudAorLy8gPElTSU5ERVg+IGlzIHVzZWQuIFRoZSBy
ZXR1cm5lZCBzdHJpbmcgaXMgdXNlZCBpZiBubyBQUk9NUFQgYXR0cmlidXRlIGlzCisvLyBwcm92
aWRlZC4KKy8vIG5vdGU6IFNhZmFyaSBhbmQgRmlyZUZveCB1c2UgKHRvbyBsb25nIGZvciB1cyBp
bWhvKSAiVGhpcyBpcyBhIHNlYXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBrZXl3b3Jkczoi
CitTdHJpbmcgc2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkKK3sKKyAgICB2ZXJpZmllZE9r
KCk7CisgICAgcmV0dXJuIFN0cmluZygiRW50ZXIgc2VhcmNoOiIpOworfQorCisvLyBUaGlzIGZ1
bmN0aW9uIHByb3ZpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgQ1NTIHByb3BlcnR5Ogor
Ly8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yCisvLyBJdCBpcyBhbHNvIHJlbGF0ZWQgdG8gdGhl
IENTUyBwcm9wZXJ0eSBvdXRsaW5lLWNvbG9yOgorQ29sb3IgZm9jdXNSaW5nQ29sb3IoKQorewor
ICAgIHZlcmlmaWVkT2soKTsKKyAgICByZXR1cm4gMHhGRjAwMDBGRjsKK30KKworLy8gTG9jYWxp
emVkU3RyaW5ncworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3co
KQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2soKQoreworICAgIEFTU0VSVCgwKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5
TGlua1RvQ2xpcGJvYXJkKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKQor
eworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250
ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkKK3sKKyAgICBBU1NFUlQoMCk7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weUlt
YWdlVG9DbGlwYm9hcmQoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpCit7
CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0NvcHkoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKQoreworICAgIEFTU0VS
VCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdHb0ZvcndhcmQoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkKK3sKKyAgICBBU1NFUlQoMCk7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2Fk
KCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnQ3V0KCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKQoreworICAgIEFT
U0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkKK3sK
KyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29udGV4
dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZygpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpCit7
CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRl
eHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSgpCit7CisgICAgQVNTRVJUKDApOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5r
KCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpCit7CisgICAgQVNTRVJUKDApOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5n
TWVudSgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGJvb2wpCit7CisgICAgQVNT
RVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRl
bVRhZ0NoZWNrU3BlbGxpbmcoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBp
bmcoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKQoreworICAgIEFT
U0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdGb250TWVudSgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKQoreworICAgIEFTU0VSVCgwKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJdGFs
aWMoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lKCkK
K3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUoKQoreworICAgIEFTU0VSVCgwKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEZWZh
dWx0RGlyZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKQoreworICAgIEFTU0VS
VCgwKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdSaWdodFRvTGVmdCgpCit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUUsIG5vIHN1cHBvcnQgZm9y
IHNwZWxsaW5nIHlldC4KK1Bhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJk
KCkKK3sKKyAgICByZXR1cm4gbmV3IFBhc3RlYm9hcmQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJk
Ojp3cml0ZVNlbGVjdGlvbihSYW5nZSosIGJvb2wsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmLCBGcmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
YXN0ZWJvYXJkOjpjbGVhcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBQ
YXN0ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3Rl
Ym9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwg
Ym9vbCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworU3Ry
aW5nIFBhc3RlYm9hcmQ6OnBsYWluVGV4dChGcmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1Bhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Bhc3RlYm9hcmQ6On5QYXN0ZWJvYXJkKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK0NvbnRleHRNZW51OjpDb250ZXh0TWVu
dShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkK
K3sKKyAgICBBU1NFUlQoMCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworQ29udGV4dE1l
bnU6On5Db250ZXh0TWVudSgpCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJikK
K3sKKyAgICBBU1NFUlQoMCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBDb250
ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBt
ZW51KQoreworICAgIEFTU0VSVCgwKTsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBtZW51
OworfQorCitQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxhdGZvcm1EZXNj
cmlwdGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKDApOworICAgIHJldHVybiBtX3BsYXRmb3Jt
RGVzY3JpcHRpb247Cit9CisKK0NvbnRleHRNZW51SXRlbTo6Q29udGV4dE1lbnVJdGVtKFBsYXRm
b3JtTWVudUl0ZW1EZXNjcmlwdGlvbikKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworQ29udGV4dE1lbnVJdGVtOjpDb250ZXh0TWVudUl0ZW0oQ29udGV4dE1l
bnUqKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250
ZXh0TWVudUl0ZW06OkNvbnRleHRNZW51SXRlbShDb250ZXh0TWVudUl0ZW1UeXBlLCBDb250ZXh0
TWVudUFjdGlvbiwgY29uc3QgU3RyaW5nJiwgQ29udGV4dE1lbnUqKQoreworICAgIEFTU0VSVCgw
KTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVudUl0ZW06On5Db250ZXh0
TWVudUl0ZW0oKQoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNlUGxh
dGZvcm1EZXNjcmlwdGlvbigpCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EZXNjcmlwdGlvbjsKK30KKworQ29udGV4dE1lbnVJ
dGVtVHlwZSBDb250ZXh0TWVudUl0ZW06OnR5cGUoKSBjb25zdAoreworICAgIEFTU0VSVCgwKTsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBBY3Rpb25UeXBlOworfQorCit2b2lk
IENvbnRleHRNZW51SXRlbTo6c2V0VHlwZShDb250ZXh0TWVudUl0ZW1UeXBlKQoreworICAgIEFT
U0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDb250ZXh0TWVudUFjdGlvbiBD
b250ZXh0TWVudUl0ZW06OmFjdGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKDApOworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOwor
fQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6c2V0QWN0aW9uKENvbnRleHRNZW51QWN0aW9uKQor
eworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgQ29u
dGV4dE1lbnVJdGVtOjp0aXRsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKDApOworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIENvbnRleHRNZW51
SXRlbTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlQoMCk7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVJ
dGVtOjpwbGF0Zm9ybVN1Yk1lbnUoKSBjb25zdAoreworICAgIEFTU0VSVCgwKTsKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbTo6
c2V0U3ViTWVudShDb250ZXh0TWVudSopCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRDaGVja2VkKGJvb2wpCit7
CisgICAgQVNTRVJUKDApOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgQ29udGV4
dE1lbnVJdGVtOjpzZXRFbmFibGVkKGJvb2wpCit7CisgICAgQVNTRVJUKDApOworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgdXNlcklkbGVU
aW1lKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCisvLyBz
eXN0ZW1CZWVwKCkgaXMgY2FsbGVkIGJ5IHRoZSBFZGl0b3IgdG8gaW5kaWNhdGUgdGhhdCB0aGVy
ZSB3YXMgbm90aGluZyB0byBjb3B5LCBhbmQgbWF5IGJlIGNhbGxlZCBmcm9tCisvLyBvdGhlciBw
bGFjZXMgdG9vLgordm9pZCBzeXN0ZW1CZWVwKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit9CisKKy8vIGZ1bmN0aW9ucyBuZXcgdG8gSnVuLTA3IHRpcCBvZiB0cmVlIG1lcmdlOgor
CisvLyB2b2lkIFdlYkNvcmU6OkNhY2hlZFBhZ2U6OmNsb3NlKCkge30KKworLy92b2lkIFdlYkNv
cmU6OkZyYW1lOjpwcmludCgpIHt9CisvLyB2b2lkIFdlYkNvcmU6OkZyYW1lOjppc3N1ZVRyYW5z
cG9zZUNvbW1hbmQoKSB7fQorLy92b2lkIFdlYkNvcmU6OkZyYW1lOjpjbGVhbnVwUGxhdGZvcm1T
Y3JpcHRPYmplY3RzKCkge30KKy8vIHZvaWQgV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJlZ2lv
bnNDaGFuZ2VkKCkge30KKy8vYm9vbCBXZWJDb3JlOjpGcmFtZTo6aXNDaGFyYWN0ZXJTbWFydFJl
cGxhY2VFeGVtcHQodW5zaWduZWQgc2hvcnQsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3Zv
aWQqIFdlYkNvcmU6OkZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKQoreworICAgIHJldHVy
biAwOworfQorCisKK1dlYkNvcmU6OlN0cmluZyBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojpn
ZXRNSU1FVHlwZUZvckV4dGVuc2lvbihXZWJDb3JlOjpTdHJpbmcgY29uc3QmKQoreworICAgIHJl
dHVybiBXZWJDb3JlOjpTdHJpbmcoKTsKK30KKwordm9pZCBXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3
cml0ZUltYWdlKFdlYkNvcmU6Ok5vZGUqLCBXZWJDb3JlOjpLVVJMIGNvbnN0JiwgV2ViQ29yZTo6
U3RyaW5nIGNvbnN0Jikge30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplIGRyYWdJ
bWFnZVNpemUodm9pZCopCit7CisgICAgcmV0dXJuIEludFNpemUoMCwgMCk7Cit9CisKK3ZvaWQg
ZGVsZXRlRHJhZ0ltYWdlKHZvaWQqKSB7fQordm9pZCogY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdl
KEltYWdlKikKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogZGlzc29sdmVEcmFnSW1hZ2VU
b0ZyYWN0aW9uKHZvaWQqLCBmbG9hdCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogY3Jl
YXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKK3sKKyAgICByZXR1
cm4gMDsKK30KKworQ3Vyc29yIGR1bW15Q3Vyc29yOworY29uc3QgQ3Vyc29yJiB6b29tSW5DdXJz
b3IoKQoreworICAgIHJldHVybiBkdW1teUN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB6b29t
T3V0Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gZHVtbXlDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNv
ciYgbm90QWxsb3dlZEN1cnNvcigpCit7CisgICAgcmV0dXJuIGR1bW15Q3Vyc29yOworfQorCit2
b2lkKiBzY2FsZURyYWdJbWFnZSh2b2lkKiwgRmxvYXRTaXplKQoreworICAgIHJldHVybiAwOwor
fQorCitTdHJpbmcgc2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpCit7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCitTdHJpbmcgc2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Q2xlYXJSZWNl
bnRTZWFyY2hlc1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworVmVjdG9yPFN0
cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9CisKK1N0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2VTdHJpbmcodW5zaWduZWQgaW50LCBTdHJpbmcgY29uc3QmLCBXZWJDb3JlOjpLVVJM
IGNvbnN0JikKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworLy8gYWRkZWQgZm9yIE5vdi0xNi0wNyBUb1QgaW50ZWdyYXRpb24KKy8vbmFtZXNw
YWNlIFdlYkNvcmUgeworLy92b2lkIEZyYW1lOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCisvL30KKworLy8gZnVuY3Rpb25zIG5ldyB0byBGZWIt
MTkgdGlwIG9mIHRyZWUgbWVyZ2U6CituYW1lc3BhY2UgV2ViQ29yZSB7CisvLyBpc0NoYXJhY3Rl
clNtYXJ0UmVwbGFjZUV4ZW1wdCBpcyBkZWZpbmVkIGluIFNtYXJ0UmVwbGFjZUlDVS5jcHA7IGlu
IHRoZW9yeSwgd2UgY291bGQgdXNlIHRoYXQgb25lCisvLyAgICAgIGJ1dCB3ZSBkb24ndCBzdXBw
b3J0IGFsbCBvZiB0aGUgcmVxdWlyZWQgaWN1IGZ1bmN0aW9ucworYm9vbCBpc0NoYXJhY3RlclNt
YXJ0UmVwbGFjZUV4ZW1wdChVQ2hhcjMyLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBXZWJDb3JlCisKK2ludCBNYWtlRGF0YUV4
ZWN1dGFibGU7CisKKy8vIGZ1bmN0aW9ucyBuZXcgdG8gTWFyLTIgdGlwIG9mIHRyZWUgbWVyZ2U6
CitTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCisKKy8vIGZ1bmN0aW9ucyBuZXcgdG8g
SnVuLTEgdGlwIG9mIHRyZWUgbWVyZ2U6CitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVk
QnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQmluZGluZ3MgeworYm9vbCBkaXNwYXRjaEpOSUNhbGwoRXhlY1N0YXRlKiwgdm9p
ZCBjb25zdCosIF9qb2JqZWN0KiwgYm9vbCwgSk5JVHlwZSwKKyAgICBfam1ldGhvZElEKiwganZh
bHVlKiwganZhbHVlJiwgY2hhciBjb25zdCosIEpTVmFsdWUqJikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSB9ICAvLyBuYW1lc3BhY2UgSlNDOjpC
aW5kaW5ncworCitjaGFyKiBkaXJuYW1lKGNvbnN0IGNoYXIqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKyAgICAvLyBuZXcgYXMgb2YgU1ZOIGNoYW5nZSAz
NjI2OSwgU2VwdCA4LCAyMDA4Citjb25zdCBTdHJpbmcmIERhdGFiYXNlOjpkYXRhYmFzZUluZm9U
YWJsZU5hbWUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc3RhdGljIGNvbnN0IFN0
cmluZyBkdW1teTsKKyAgICByZXR1cm4gZHVtbXk7Cit9CisKKyAgICAvLyBuZXcgYXMgb2YgU1ZO
IGNoYW5nZSAzODA2OCwgTm92IDUsIDIwMDgKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3ZvaWQgcHJl
ZmV0Y2hETlMoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIGdldFN1cHBvcnRlZEtleVNpemVzKFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxl
KGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKKy8vIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpIGlzIGNhbGxlZCBieSBSZW5kZXJU
ZXh0Q29udHJvbDo6Y2FsY1ByZWZXaWR0aHMoKQorLy8gbGlrZSB0aGlzOiBzY3JvbGxiYXJTaXpl
ID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwor
Ly8gd2l0aCB0aGlzIGNvbW1lbnQ6CisvLyAvLyBGSVhNRTogV2Ugc2hvdWxkIGdldCB0aGUgc2l6
ZSBvZiB0aGUgc2Nyb2xsYmFyIGZyb20gdGhlIFJlbmRlclRoZW1lIGluc3RlYWQuCisvLyBzaW5j
ZSBvdXIgdGV4dCBjb250cm9sIGRvZXNuJ3QgaGF2ZSBzY3JvbGxiYXJzLCB0aGUgZGVmYXVsdCBz
aXplIG9mIDAgd2lkdGggc2hvdWxkIGJlCisvLyBvay4gbm90SW1wbGVtZW50ZWQoKSBpcyBjb21t
ZW50ZWQgb3V0IGJlbG93IHNvIHRoYXQgd2UgY2FuIGZpbmQgb3RoZXIgdW5yZXNvbHZlZAorLy8g
dW5pbXBsZW1lbnRlZCBmdW5jdGlvbnMuCitTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6
Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICAvKiBub3RJbXBsZW1lbnRlZCgpOyAqLworICAgIHN0YXRp
YyBTY3JvbGxiYXJUaGVtZSB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCitKU0M6OkpT
VmFsdWUqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb2ZpbGUqKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKK0ZpbGVMaXN0OjpGaWxlTGlzdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
RmlsZSogRmlsZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0
Q2FjaGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKy8vIFRoaXMgdmFsdWUgdHVy
bnMgb24gb3Igb2ZmIHRoZSBNYWMgc3BlY2lmaWMgQWNjZXNzaWJpbGl0eSBzdXBwb3J0LgorYm9v
bCBBWE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0eUVuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgQVhP
YmplY3RDYWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0g
ZmFsc2U7CisKK3ZvaWQgQVhPYmplY3RDYWNoZTo6Y2hpbGRyZW5DaGFuZ2VkKFJlbmRlck9iamVj
dCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBBWE9iamVjdENhY2hlOjpy
ZW1vdmUoUmVuZGVyT2JqZWN0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOworCisKK09wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitPcGFxdWVKU0NsYXNzQ29udGV4dERhdGE6On5P
cGFxdWVKU0NsYXNzQ29udGV4dERhdGEoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNDOjpKU1ZhbHVlKiBKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpldmFsdWF0ZShKU0M6OlVTdHJpbmcgY29uc3QmLCBKU0M6OkpTVmFsdWUqJikgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitjb25zdCBKU0M6OlNj
b3BlQ2hhaW5Ob2RlKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKCkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitKU0M6OkpTT2JqZWN0
KiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjp0aGlzT2JqZWN0KCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpU
eXBlIEphdmFTY3JpcHRDYWxsRnJhbWU6OnR5cGUoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlKSAwOworfQor
CitKYXZhU2NyaXB0Q2FsbEZyYW1lKiBKYXZhU2NyaXB0Q2FsbEZyYW1lOjpjYWxsZXIoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorfQorCitKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6
OkphdmFTY3JpcHREZWJ1Z1NlcnZlcigpIDoKKyAgICBtX3JlY29tcGlsZVRpbWVyKHRoaXMsIDAp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSmF2YVNjcmlwdERlYnVnU2VydmVyOjp+
SmF2YVNjcmlwdERlYnVnU2VydmVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitK
YXZhU2NyaXB0RGVidWdTZXJ2ZXImIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkKK3sK
KyAgICBzdGF0aWMgSmF2YVNjcmlwdERlYnVnU2VydmVyIHNlcnZlcjsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBzZXJ2ZXI7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2Vy
dmVyOjphdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludCwgaW50KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpj
YWxsRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnQsIGludCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkRXhlY3V0
ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnQsIGludCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkUmVhY2hC
cmVha3BvaW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50LCBpbnQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OmV4Y2VwdGlv
bihjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpzb3VyY2VQYXJzZWQoRXhl
Y1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGludCwgY29uc3QgVVN0cmluZyYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnBhZ2VD
cmVhdGVkKFBhZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNj
cmlwdERlYnVnU2VydmVyOjpyZXR1cm5FdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGlu
dCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdERl
YnVnU2VydmVyOjp3aWxsRXhlY3V0ZVByb2dyYW0oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBp
bnQsIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQo=
</data>
<flag name="review"
          id="15050"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31059</attachid>
            <date>2009-06-08 13:44:22 -0700</date>
            <delta_ts>2009-06-08 16:42:18 -0700</delta_ts>
            <desc>new patch part 3 with ChangeLog</desc>
            <filename>bug23296-part-3.txt</filename>
            <type>text/plain</type>
            <size>7873</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDUwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKworMjAwOS0wNi0wOCAgRmVuZyBRaWFuICA8ZmVuZ0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IEFuZHJvaWQgcG9ydCBmaWxlcyB0byBXZWJDb3JlL3BsYXRmb3JtIChwYXJ0IDMpLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTYKKworICAgICAg
ICAqIHBsYXRmb3JtL2FuZHJvaWQvRmlsZUNob29zZXJBbmRyb2lkLmNwcDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVtQW5kcm9pZC5jcHA6IEFkZGVkLgorCiAy
MDA5LTA2LTA4ICBBZGFtIExhbmdsZXkgIDxhZ2xAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNpZWRlbC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9GaWxl
Q2hvb3NlckFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9p
ZC9GaWxlQ2hvb3NlckFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL0ZpbGVDaG9vc2VyQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv
amVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZUNob29zZXIu
aCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcg
RmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRo
KSBjb25zdCAKK3sKKyAgICBpZiAobV9maWxlbmFtZXMuc2l6ZSgpID09IDApIHsKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIH0KKyAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBhIGxv
dCBmYXN0ZXIsIGJ1dCBhc3N1bWluZyB0aGUgZGF0YSB3aWxsIG5vdAorICAgIC8vIG9mdGVuIGJl
IG11Y2ggbG9uZ2VyIHRoYW4gdGhlIHByb3ZpZGVkIHdpZHRoLCB0aGlzIG1heSBiZSBmYXN0IGVu
b3VnaC4KKyAgICBTdHJpbmcgb3V0cHV0ID0gbV9maWxlbmFtZXNbMF0uY29weSgpOworICAgIHdo
aWxlIChmb250LndpZHRoKFRleHRSdW4ob3V0cHV0LmltcGwoKSkpID4gd2lkdGggJiYgb3V0cHV0
Lmxlbmd0aCgpID4gNCkgeworICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZShvdXRwdXQu
bGVuZ3RoKCkgLSA0LCA0LCBTdHJpbmcoIi4uLiIpKTsKKyAgICB9CisgICAgcmV0dXJuIG91dHB1
dDsKK30KKworLy8gVGhlIGZvbGxvd2luZyB0d28gc3RyaW5ncyBhcmUgdXNlZCBmb3IgRmlsZSBV
cGxvYWQgZm9ybSBjb250cm9sLCBpZQorLy8gPGlucHV0IHR5cGU9ImZpbGUiPi4gVGhlIGZpcnN0
IGlzIHRoZSB0ZXh0IHRoYXQgYXBwZWFycyBvbiB0aGUgYnV0dG9uCisvLyB0aGF0IHdoZW4gcHJl
c3NlZCwgdGhlIHVzZXIgY2FuIGJyb3dzZSBmb3IgYW5kIHNlbGVjdCBhIGZpbGUuIFRoZQorLy8g
c2Vjb25kIHN0cmluZyBpcyByZW5kZXJlZCBvbiB0aGUgc2NyZWVuIHdoZW4gbm8gZmlsZSBoYXMg
YmVlbiBzZWxlY3RlZC4KK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nKCJVcGxvYWRzIERpc2FibGVkIik7Cit9CisKK1N0cmluZyBmaWxlQnV0
dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZygiTm8gZmlsZSBz
ZWxlY3RlZCIpOworfQorCit9IC8vIG5hbWVzYXBjZSBXZWJDb3JlCisKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVtQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL0ZpbGVTeXN0ZW1BbmRyb2lkLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVtQW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlIDxmbm1hdGNoLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRl
IDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cisj
aW5jbHVkZSAiY3V0aWxzL2xvZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEdsb2Jh
bCBzdGF0aWMgdXNlZCB0byBzdG9yZSB0aGUgYmFzZSB0byB0aGUgcGx1Z2luIHBhdGguCisvLyBU
aGlzIGlzIHNldCBpbiBXZWJTZXR0aW5ncy5jcHAKK1N0cmluZyBzUGx1Z2luUGF0aDsKKworQ1N0
cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKSB7CisgICAg
cmV0dXJuIHBhdGgudXRmOCgpOworfQorCitDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0
IGNoYXIqIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaW50IG51
bWJlciA9IHJhbmQoKSAlIDEwMDAwICsgMTsKKyAgICBDU3RyaW5nIGZpbGVuYW1lOworICAgIGRv
IHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSBzUGx1Z2luUGF0aDsKKyAgICAgICAgcGF0aC5hcHBl
bmQoIi8iKTsKKyAgICAgICAgcGF0aC5hcHBlbmQocHJlZml4KTsKKyAgICAgICAgcGF0aC5hcHBl
bmQoU3RyaW5nOjpudW1iZXIobnVtYmVyKSk7CisgICAgICAgIGZpbGVuYW1lID0gcGF0aC51dGY4
KCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmZzdHIgPSBmaWxlbmFtZS5kYXRhKCk7CisgICAgICAg
IGhhbmRsZSA9IG9wZW4oZmlsZW5hbWUuZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VY
Q0wsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKyAgICAgICAgbnVtYmVyKys7CisgICAgICAgIAorICAg
ICAgICBpZiAoaGFuZGxlICE9IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWU7Cisg
ICAgICAgIH0KKyAgICB9IHdoaWxlIChlcnJubyA9PSBFRVhJU1QpOworICAgIAorICAgIHJldHVy
biBDU3RyaW5nKCk7Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVs
ZSkKK3sKKyAgICByZXR1cm4gZGxjbG9zZShtb2R1bGUpID09IDA7Cit9CisKK3ZvaWQgY2xvc2VG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIGlmIChpc0hhbmRsZVZhbGlk
KGhhbmRsZSkpIHsKKyAgICAgICAgY2xvc2UoaGFuZGxlKTsKKyAgICAgICAgaGFuZGxlID0gaW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICB9Cit9CisKK2ludCB3cml0ZVRvRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQorewor
ICAgIGludCB0b3RhbEJ5dGVzV3JpdHRlbiA9IDA7CisgICAgd2hpbGUgKHRvdGFsQnl0ZXNXcml0
dGVuIDwgbGVuZ3RoKSB7CisgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZShoYW5kbGUs
IGRhdGEsIChzaXplX3QpKGxlbmd0aCAtIHRvdGFsQnl0ZXNXcml0dGVuKSk7CisgICAgICAgIGlm
IChieXRlc1dyaXR0ZW4gPCAwICYmIGVycm5vICE9IEVJTlRSKQorICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICBlbHNlIGlmIChieXRlc1dyaXR0ZW4gPiAwKQorICAgICAgICAgICAgdG90
YWxCeXRlc1dyaXR0ZW4gKz0gYnl0ZXNXcml0dGVuOworICAgIH0KKworICAgIHJldHVybiB0b3Rh
bEJ5dGVzV3JpdHRlbjsKK30KKworLy8gbmV3IGFzIG9mIFNWTiBjaGFuZ2UgMzYyNjksIFNlcHQg
OCwgMjAwOAorU3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkgCit7CisgICAgcmV0dXJuIHNQbHVn
aW5QYXRoOworfQorCisvLyBuZXcgYXMgb2Ygd2Via2l0NCwgRmViIDI4LCAyMDA5CitWZWN0b3I8
U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBm
aWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50cmllczsKKyAgICBDU3RyaW5nIGNwYXRo
ID0gcGF0aC51dGY4KCk7CisgICAgQ1N0cmluZyBjZmlsdGVyID0gZmlsdGVyLnV0ZjgoKTsKKyAg
ICBESVIqIGRpciA9IG9wZW5kaXIoY3BhdGguZGF0YSgpKTsKKyAgICBpZiAoZGlyKSB7CisgICAg
ICAgIHN0cnVjdCBkaXJlbnQgKiBkcDsKKyAgICAgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZGly
KSkgIT0gTlVMTCkgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7
CisgICAgICAgICAgICBpZiAoc3RyY21wKG5hbWUsICIuIikgPT0gMCB8fCBzdHJjbXAobmFtZSwg
Ii4uIikgPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGZubWF0Y2goY2ZpbHRlci5kYXRhKCksIG5hbWUsIDApICE9IDApIHsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNo
YXIgZmlsZVBhdGhbMTAyNF07CisgICAgICAgICAgICBpZiAoKGludCkgKHNpemVvZihmaWxlUGF0
aCkgLSAxKSA8IHNucHJpbnRmKGZpbGVQYXRoLAorICAgICAgICAgICAgICAgICAgICBzaXplb2Yo
ZmlsZVBhdGgpLCAiJXMvJXMiLCBjcGF0aC5kYXRhKCksIG5hbWUpKSB7CisgICAgICAgICAgICAg
ICAgY29udGludWU7IC8vIGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZW50cmllcy5hcHBlbmQoZmlsZVBhdGgpOworICAgICAgICB9CisgICAgICAgIGNsb3NlZGly
KGRpcik7CisgICAgfQorICAgIHJldHVybiBlbnRyaWVzOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>
<flag name="review"
          id="15818"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31060</attachid>
            <date>2009-06-08 13:55:47 -0700</date>
            <delta_ts>2009-06-08 14:34:07 -0700</delta_ts>
            <desc>new patch part 5 with ChangeLog</desc>
            <filename>bug23296-part-5.txt</filename>
            <type>text/plain</type>
            <size>4683</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDUwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKworMjAwOS0wNi0wOCAgRmVuZyBRaWFuICA8ZmVuZ0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IEFuZHJvaWQgcG9ydCBmaWxlcyB0byBXZWJDb3JlL3BsYXRmb3JtIChwYXJ0IDUpLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTYKKworICAgICAg
ICAqIHBsYXRmb3JtL2FuZHJvaWQvTG9jYWxpemVkU3RyaW5nc0FuZHJvaWQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwOiBBZGRlZC4K
KwogMjAwOS0wNi0wOCAgQWRhbSBMYW5nbGV5ICA8YWdsQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTaWVkZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
TG9jYWxpemVkU3RyaW5nc0FuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9Mb2NhbGl6ZWRTdHJpbmdzQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvTG9jYWxpemVkU3RyaW5nc0FuZHJvaWQuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RF
bGVtZW50KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCJJbnNwZWN0IEVsZW1lbnQiKTsKK30KKwor
U3RyaW5nIHVua25vd25GaWxlU2l6ZVRleHQoKQoreworICAgIHJldHVybiBTdHJpbmcoIlVua25v
d24iKTsKK30KKworU3RyaW5nIGltYWdlVGl0bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9hbmRyb2lkL1BvcHVwTWVudUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9Qb3B1cE1lbnVBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9Qb3B1cE1lbnVBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBt
ZW51IGltcGxlbWVudGF0aW9uIGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgorICoK
KyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUG9wdXBNZW51LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
Tm93IHdlIGhhbmRsZSBhbGwgb2YgdGhpcyBpbiBXZWJWaWV3Q29yZS5jcHAuCitQb3B1cE1lbnU6
OlBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIG1lbnVMaXN0KQorICAgIDogbV9wb3B1cENsaWVu
dChtZW51TGlzdCkKK3sKK30KKworUG9wdXBNZW51Ojp+UG9wdXBNZW51KCkKK3sKK30KKwordm9p
ZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyosIGludCkKK3sKK30K
Kwordm9pZCBQb3B1cE1lbnU6OmhpZGUoKQoreworfQorCit2b2lkIFBvcHVwTWVudTo6dXBkYXRl
RnJvbUVsZW1lbnQoKSAKK3sKK30KKworYm9vbCBQb3B1cE1lbnU6Oml0ZW1Xcml0aW5nRGlyZWN0
aW9uSXNOYXR1cmFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUK
</data>
<flag name="review"
          id="15819"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31061</attachid>
            <date>2009-06-08 14:11:25 -0700</date>
            <delta_ts>2009-06-08 17:20:59 -0700</delta_ts>
            <desc>new patch part 4 with ChangeLog</desc>
            <filename>bug23296-part-4.txt</filename>
            <type>text/plain</type>
            <size>23012</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDUwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKworMjAwOS0wNi0wOCAgRmVuZyBRaWFuICA8ZmVuZ0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IEFuZHJvaWQgcG9ydCBmaWxlcyB0byBXZWJDb3JlL3BsYXRmb3JtIChwYXJ0IDQpLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTYKKworICAgICAg
ICAqIHBsYXRmb3JtL2FuZHJvaWQvS2V5RXZlbnRBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vYW5kcm9pZC9LZXlib2FyZENvZGVzLmg6IEFkZGVkLgorCiAyMDA5LTA2LTA4
ICBBZGFtIExhbmdsZXkgIDxhZ2xAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNpZWRlbC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlFdmVudEFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlFdmVudEFu
ZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleUV2
ZW50QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29w
eXJpZ2h0IDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKworI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHVpL0tleWNvZGVMYWJlbHMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBjb21wYXJlIHRvIHNhbWUgZnVuY3Rpb24gaW4g
Z2RrL0tleUV2ZW50R2RrLmNwcAorc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50
KHVuc2lnbmVkIGludCBrZXlDb2RlKQoreworICAgIC8vIERvZXMgbm90IHByb3ZpZGUgYWxsIGtl
eSBjb2RlcywgYW5kIGRvZXMgbm90IGhhbmRsZSBhbGwga2V5cy4KKyAgICBzd2l0Y2goa2V5Q29k
ZSkgeworICAgICAgICBjYXNlIGtLZXlDb2RlRGVsOgorICAgICAgICAgICAgcmV0dXJuIFZLX0JB
Q0s7CisgICAgICAgIGNhc2Uga0tleUNvZGVUYWI6CisgICAgICAgICAgICByZXR1cm4gVktfVEFC
OworICAgICAgICBjYXNlIGtLZXlDb2RlQ2xlYXI6CisgICAgICAgICAgICByZXR1cm4gVktfQ0xF
QVI7CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFkQ2VudGVyOgorICAgICAgICBjYXNlIGtLZXlD
b2RlTmV3bGluZToKKyAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47CisgICAgICAgIGNhc2Ug
a0tleUNvZGVTaGlmdExlZnQ6CisgICAgICAgIGNhc2Uga0tleUNvZGVTaGlmdFJpZ2h0OgorICAg
ICAgICAgICAgcmV0dXJuIFZLX1NISUZUOworICAgICAgICAvLyBiYWNrIHdpbGwgc2VydmUgYXMg
ZXNjYXBlLCBhbHRob3VnaCB3ZSBwcm9iYWJseSBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gaXQKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZUJhY2s6CisgICAgICAgICAgICByZXR1cm4gVktfRVNDQVBFOwor
ICAgICAgICBjYXNlIGtLZXlDb2RlU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7
CisgICAgICAgIGNhc2Uga0tleUNvZGVIb21lOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7
CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFkTGVmdDoKKyAgICAgICAgICAgIHJldHVybiBWS19M
RUZUOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZFVwOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1VQOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZFJpZ2h0OgorICAgICAgICAgICAgcmV0dXJu
IFZLX1JJR0hUOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZERvd246CisgICAgICAgICAgICBy
ZXR1cm4gVktfRE9XTjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTA6CisgICAgICAgICAgICByZXR1
cm4gVktfMDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTE6CisgICAgICAgICAgICByZXR1cm4gVktf
MTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTI6CisgICAgICAgICAgICByZXR1cm4gVktfMjsKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZTM6CisgICAgICAgICAgICByZXR1cm4gVktfMzsKKyAgICAgICAg
Y2FzZSBrS2V5Q29kZTQ6CisgICAgICAgICAgICByZXR1cm4gVktfNDsKKyAgICAgICAgY2FzZSBr
S2V5Q29kZTU6CisgICAgICAgICAgICByZXR1cm4gVktfNTsKKyAgICAgICAgY2FzZSBrS2V5Q29k
ZTY6CisgICAgICAgICAgICByZXR1cm4gVktfNjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTc6Cisg
ICAgICAgICAgICByZXR1cm4gVktfNzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTg6CisgICAgICAg
ICAgICByZXR1cm4gVktfODsKKyAgICAgICAgY2FzZSBrS2V5Q29kZTk6CisgICAgICAgICAgICBy
ZXR1cm4gVktfOTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUE6CisgICAgICAgICAgICByZXR1cm4g
VktfQTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUI6CisgICAgICAgICAgICByZXR1cm4gVktfQjsK
KyAgICAgICAgY2FzZSBrS2V5Q29kZUM6CisgICAgICAgICAgICByZXR1cm4gVktfQzsKKyAgICAg
ICAgY2FzZSBrS2V5Q29kZUQ6CisgICAgICAgICAgICByZXR1cm4gVktfRDsKKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZUU6CisgICAgICAgICAgICByZXR1cm4gVktfRTsKKyAgICAgICAgY2FzZSBrS2V5
Q29kZUY6CisgICAgICAgICAgICByZXR1cm4gVktfRjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUc6
CisgICAgICAgICAgICByZXR1cm4gVktfRzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUg6CisgICAg
ICAgICAgICByZXR1cm4gVktfSDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUk6CisgICAgICAgICAg
ICByZXR1cm4gVktfSTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUo6CisgICAgICAgICAgICByZXR1
cm4gVktfSjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUs6CisgICAgICAgICAgICByZXR1cm4gVktf
SzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUw6CisgICAgICAgICAgICByZXR1cm4gVktfTDsKKyAg
ICAgICAgY2FzZSBrS2V5Q29kZU06CisgICAgICAgICAgICByZXR1cm4gVktfTTsKKyAgICAgICAg
Y2FzZSBrS2V5Q29kZU46CisgICAgICAgICAgICByZXR1cm4gVktfTjsKKyAgICAgICAgY2FzZSBr
S2V5Q29kZU86CisgICAgICAgICAgICByZXR1cm4gVktfTzsKKyAgICAgICAgY2FzZSBrS2V5Q29k
ZVA6CisgICAgICAgICAgICByZXR1cm4gVktfUDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVE6Cisg
ICAgICAgICAgICByZXR1cm4gVktfUTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVI6CisgICAgICAg
ICAgICByZXR1cm4gVktfUjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVM6CisgICAgICAgICAgICBy
ZXR1cm4gVktfUzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVQ6CisgICAgICAgICAgICByZXR1cm4g
VktfVDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVU6CisgICAgICAgICAgICByZXR1cm4gVktfVTsK
KyAgICAgICAgY2FzZSBrS2V5Q29kZVY6CisgICAgICAgICAgICByZXR1cm4gVktfVjsKKyAgICAg
ICAgY2FzZSBrS2V5Q29kZVc6CisgICAgICAgICAgICByZXR1cm4gVktfVzsKKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZVg6CisgICAgICAgICAgICByZXR1cm4gVktfWDsKKyAgICAgICAgY2FzZSBrS2V5
Q29kZVk6CisgICAgICAgICAgICByZXR1cm4gVktfWTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVo6
CisgICAgICAgICAgICByZXR1cm4gVktfWjsKKyAgICAgICAgLy8gY29sb24KKyAgICAgICAgY2Fz
ZSBrS2V5Q29kZVNlbWljb2xvbjoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fMTsKKyAgICAg
ICAgY2FzZSBrS2V5Q29kZUNvbW1hOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9DT01NQTsK
KyAgICAgICAgY2FzZSBrS2V5Q29kZU1pbnVzOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9N
SU5VUzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUVxdWFsczoKKyAgICAgICAgICAgIHJldHVybiBW
S19PRU1fUExVUzsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVBlcmlvZDoKKyAgICAgICAgICAgIHJl
dHVybiBWS19PRU1fUEVSSU9EOworICAgICAgICBjYXNlIGtLZXlDb2RlU2xhc2g6CisgICAgICAg
ICAgICByZXR1cm4gVktfT0VNXzI7CisgICAgICAgIC8vIG1heWJlIG5vdCB0aGUgcmlnaHQgY2hv
aWNlCisgICAgICAgIGNhc2Uga0tleUNvZGVMZWZ0QnJhY2tldDoKKyAgICAgICAgICAgIHJldHVy
biBWS19PRU1fNDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUJhY2tzbGFzaDoKKyAgICAgICAgICAg
IHJldHVybiBWS19PRU1fNTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVJpZ2h0QnJhY2tldDoKKyAg
ICAgICAgICAgIHJldHVybiBWS19PRU1fNjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgIH0KK30KKworc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yQW5k
cm9pZEtleUNvZGUoaW50IGtleUNvZGUpCit7CisgICAgLy8gRG9lcyBub3QgcmV0dXJuIGFsbCBv
ZiB0aGUgc2FtZSBrZXkgaWRlbnRpZmllcnMsIGFuZAorICAgIC8vIGRvZXMgbm90IGhhbmRsZSBh
bGwgdGhlIGtleXMuCisgICAgc3dpdGNoIChrZXlDb2RlKSB7CisgICAgICAgIGNhc2Uga0tleUNv
ZGVDbGVhcjoKKyAgICAgICAgICAgIHJldHVybiAiQ2xlYXIiOworICAgICAgICBjYXNlIGtLZXlD
b2RlTmV3bGluZToKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRDZW50ZXI6CisgICAgICAgICAg
ICByZXR1cm4gIkVudGVyIjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUhvbWU6CisgICAgICAgICAg
ICByZXR1cm4gIkhvbWUiOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZERvd246CisgICAgICAg
ICAgICByZXR1cm4gIkRvd24iOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZExlZnQ6CisgICAg
ICAgICAgICByZXR1cm4gIkxlZnQiOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZFJpZ2h0Ogor
ICAgICAgICAgICAgcmV0dXJuICJSaWdodCI7CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFkVXA6
CisgICAgICAgICAgICByZXR1cm4gIlVwIjsKKyAgICAgICAgLy8gU3RhbmRhcmQgc2F5cyB0aGF0
IERFTCBiZWNvbWVzIFUrMDAwMDdGLgorICAgICAgICBjYXNlIGtLZXlDb2RlRGVsOgorICAgICAg
ICAgICAgcmV0dXJuICJVKzAwMDA3RiI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBj
aGFyIHVwcGVyWzE2XTsKKyAgICAgICAgICAgIHNwcmludGYodXBwZXIsICJVKyUwNlgiLCB3aW5k
b3dzS2V5Q29kZUZvcktleUV2ZW50KGtleUNvZGUpKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodXBwZXIpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKGludCBjKSAKK3sKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICBpZiAoYyA+IDB4ZmZmZikgeworICAgICAgICBVQ2hhciBsZWFkID0gVTE2X0xFQUQo
Yyk7CisgICAgICAgIFVDaGFyIHRyYWlsID0gVTE2X1RSQUlMKGMpOworICAgICAgICBVQ2hhciB1
dGYxNlsyXSA9IHtsZWFkLCB0cmFpbH07CisgICAgICAgIHJldHVybiBTdHJpbmcodXRmMTYsIDIp
OworICAgIH0KKyAgICBVQ2hhciBuID0gKFVDaGFyKWM7CisgICAgcmV0dXJuIFN0cmluZygmbiwg
MSk7Cit9CisKK1BsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KGlu
dCBrZXlDb2RlLCBVQ2hhcjMyIHVuaWNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUeXBlIHR5cGUsIGludCByZXBlYXRDb3VudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVyS2V5IG1vZHMpCisgICAg
OiBtX3R5cGUodHlwZSkKKyAgICAsIG1fdGV4dChzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5pY2hh
cikpCisgICAgLCBtX3VubW9kaWZpZWRUZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyh1bmljaGFy
KSkKKyAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyRm9yQW5kcm9pZEtleUNvZGUo
a2V5Q29kZSkpCisgICAgLCBtX2F1dG9SZXBlYXQocmVwZWF0Q291bnQgPiAwKQorICAgICwgbV93
aW5kb3dzVmlydHVhbEtleUNvZGUod2luZG93c0tleUNvZGVGb3JLZXlFdmVudChrZXlDb2RlKSkK
KyAgICAsIG1fbmF0aXZlVmlydHVhbEtleUNvZGUoa2V5Q29kZSkKKyAgICAsIG1faXNLZXlwYWQo
ZmFsc2UpCisgICAgLCBtX3NoaWZ0S2V5KChtb2RzICYgU2hpZnRLZXkpKQorICAgICwgbV9jdHJs
S2V5KChtb2RzICYgQ3RybEtleSkpCisgICAgLCBtX2FsdEtleSgobW9kcyAmIEFsdEtleSkpCisg
ICAgLCBtX21ldGFLZXkoKG1vZHMgJiBNZXRhS2V5KSkKKyAgICAvLyBhZGRlZCBmb3IgYW5kcm9p
ZAorICAgICwgbV9yZXBlYXRDb3VudChyZXBlYXRDb3VudCkKKyAgICAsIG1fdW5pY2hhcih1bmlj
aGFyKQoreworICAgIC8vIENvcGllZCBmcm9tIHRoZSBtYWMgcG9ydAorICAgIGlmIChtX3dpbmRv
d3NWaXJ0dWFsS2V5Q29kZSA9PSAnXHInKSB7CisgICAgICAgIG1fdGV4dCA9ICJcciI7CisgICAg
ICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHIiOworICAgIH0KKworICAgIGlmIChtX3RleHQgPT0g
Ilx4N0YiKQorICAgICAgICBtX3RleHQgPSAiXHg4IjsKKyAgICBpZiAobV91bm1vZGlmaWVkVGV4
dCA9PSAiXHg3RiIpCisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg4IjsKKworICAgIGlm
IChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSA5KSB7CisgICAgICAgIG1fdGV4dCA9ICJceDki
OworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gIlx4OSI7CisgICAgfQorfQorCitib29sIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5cGUgdHlwZSwgYm9vbCBiYWNrd2Fy
ZENvbXBhdGliaWxpdHlNb2RlKQoreworICAgIC8vIENvcGllZCB3aXRoIG1vZGlmaWNhdGlvbiBm
cm9tIHRoZSBtYWMgcG9ydC4KKyAgICBBU1NFUlQobV90eXBlID09IEtleURvd24pOworICAgIEFT
U0VSVCh0eXBlID09IFJhd0tleURvd24gfHwgdHlwZSA9PSBDaGFyKTsKKyAgICBtX3R5cGUgPSB0
eXBlOworICAgIGlmIChiYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAodHlwZSA9PSBSYXdLZXlEb3duKSB7CisgICAgICAgIG1fdGV4dCA9IFN0cmlu
ZygpOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9rZXlJZGVudGlmaWVyID0gU3RyaW5nKCk7CisgICAgICAgIG1fd2luZG93c1Zp
cnR1YWxLZXlDb2RlID0gMDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlib2FyZENvZGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleWJvYXJkQ29kZXMuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9LZXlib2FyZENvZGVzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTQ1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9w
ZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgS2V5Ym9hcmRDb2Rlc19ICisjZGVmaW5lIEtleWJvYXJkQ29kZXNfSAorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIFZLX0xCVVRUT04gKDAxKSBMZWZ0IG1vdXNlIGJ1dHRvbgor
Ly8gVktfUkJVVFRPTiAoMDIpIFJpZ2h0IG1vdXNlIGJ1dHRvbgorLy8gVktfQ0FOQ0VMICgwMykg
Q29udHJvbC1icmVhayBwcm9jZXNzaW5nCisvLyBWS19NQlVUVE9OICgwNCkgTWlkZGxlIG1vdXNl
IGJ1dHRvbiAodGhyZWUtYnV0dG9uIG1vdXNlKQorLy8gVktfWEJVVFRPTjEgKDA1KQorLy8gVktf
WEJVVFRPTjIgKDA2KQorCisvLyBWS19CQUNLICgwOCkgQkFDS1NQQUNFIGtleQorY29uc3QgaW50
IFZLX0JBQ0sgPSAweDA4OworCisvLyBWS19UQUIgKDA5KSBUQUIga2V5Citjb25zdCBpbnQgVktf
VEFCID0gMHgwOTsKKworLy8gVktfQ0xFQVIgKDBDKSBDTEVBUiBrZXkKK2NvbnN0IGludCBWS19D
TEVBUiA9IDB4MEM7CisKKy8vIFZLX1JFVFVSTiAoMEQpCitjb25zdCBpbnQgVktfUkVUVVJOID0g
MHgwRDsKKworLy8gVktfU0hJRlQgKDEwKSBTSElGVCBrZXkKK2NvbnN0IGludCBWS19TSElGVCA9
IDB4MTA7CisKKy8vIFZLX0NPTlRST0wgKDExKSBDVFJMIGtleQorY29uc3QgaW50IFZLX0NPTlRS
T0wgPSAweDExOworCisvLyBWS19NRU5VICgxMikgQUxUIGtleQorY29uc3QgaW50IFZLX01FTlUg
PSAweDEyOworCisvLyBWS19QQVVTRSAoMTMpIFBBVVNFIGtleQorY29uc3QgaW50IFZLX1BBVVNF
ID0gMHgxMzsKKworLy8gVktfQ0FQSVRBTCAoMTQpIENBUFMgTE9DSyBrZXkKK2NvbnN0IGludCBW
S19DQVBJVEFMID0gMHgxNDsKKworLy8gVktfS0FOQSAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3Ig
KElNRSkgS2FuYSBtb2RlCitjb25zdCBpbnQgVktfS0FOQSA9IDB4MTU7CisKKy8vIFZLX0hBTkdV
RUwgKDE1KSBJTUUgSGFuZ3VlbCBtb2RlIChtYWludGFpbmVkIGZvciBjb21wYXRpYmlsaXR5OyB1
c2UgVktfSEFOR1VMKQorLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCitjb25zdCBp
bnQgVktfSEFOR1VMID0gMHgxNTsKKworLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVuamEgbW9kZQor
Y29uc3QgaW50IFZLX0pVTkpBID0gMHgxNzsKKworLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwg
bW9kZQorY29uc3QgaW50IFZLX0ZJTkFMID0gMHgxODsKKworLy8gVktfSEFOSkEgKDE5KSBJTUUg
SGFuamEgbW9kZQorY29uc3QgaW50IFZLX0hBTkpBID0gMHgxOTsKKworLy8gVktfS0FOSkkgKDE5
KSBJTUUgS2FuamkgbW9kZQorY29uc3QgaW50IFZLX0tBTkpJID0gMHgxOTsKKworLy8gVktfRVND
QVBFICgxQikgRVNDIGtleQorY29uc3QgaW50IFZLX0VTQ0FQRSA9IDB4MUI7CisKKy8vIFZLX0NP
TlZFUlQgKDFDKSBJTUUgY29udmVydAorY29uc3QgaW50IFZLX0NPTlZFUlQgPSAweDFDOworCisv
LyBWS19OT05DT05WRVJUICgxRCkgSU1FIG5vbmNvbnZlcnQKK2NvbnN0IGludCBWS19OT05DT05W
RVJUID0gMHgxRDsKKworLy8gVktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAorY29uc3QgaW50IFZL
X0FDQ0VQVCA9IDB4MUU7CisKKy8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2Ug
cmVxdWVzdAorY29uc3QgaW50IFZLX01PREVDSEFOR0UgPSAweDFGOworCisvLyBWS19TUEFDRSAo
MjApIFNQQUNFQkFSCitjb25zdCBpbnQgVktfU1BBQ0UgPSAweDIwOworCisvLyBWS19QUklPUiAo
MjEpIFBBR0UgVVAga2V5Citjb25zdCBpbnQgVktfUFJJT1IgPSAweDIxOworCisvLyBWS19ORVhU
ICgyMikgUEFHRSBET1dOIGtleQorY29uc3QgaW50IFZLX05FWFQgPSAweDIyOworCisvLyBWS19F
TkQgKDIzKSBFTkQga2V5Citjb25zdCBpbnQgVktfRU5EID0gMHgyMzsKKworLy8gVktfSE9NRSAo
MjQpIEhPTUUga2V5Citjb25zdCBpbnQgVktfSE9NRSA9IDB4MjQ7CisKKy8vIFZLX0xFRlQgKDI1
KSBMRUZUIEFSUk9XIGtleQorY29uc3QgaW50IFZLX0xFRlQgPSAweDI1OworCisvLyBWS19VUCAo
MjYpIFVQIEFSUk9XIGtleQorY29uc3QgaW50IFZLX1VQID0gMHgyNjsKKworLy8gVktfUklHSFQg
KDI3KSBSSUdIVCBBUlJPVyBrZXkKK2NvbnN0IGludCBWS19SSUdIVCA9IDB4Mjc7CisKKy8vIFZL
X0RPV04gKDI4KSBET1dOIEFSUk9XIGtleQorY29uc3QgaW50IFZLX0RPV04gPSAweDI4OworCisv
LyBWS19TRUxFQ1QgKDI5KSBTRUxFQ1Qga2V5Citjb25zdCBpbnQgVktfU0VMRUNUID0gMHgyOTsK
KworLy8gVktfUFJJTlQgKDJBKSBQUklOVCBrZXkKK2NvbnN0IGludCBWS19QUklOVCA9IDB4MkE7
CisKKy8vIFZLX0VYRUNVVEUgKDJCKSBFWEVDVVRFIGtleQorY29uc3QgaW50IFZLX0VYRUNVVEUg
PSAweDJCOworCisvLyBWS19TTkFQU0hPVCAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKK2NvbnN0IGlu
dCBWS19TTkFQU0hPVCA9IDB4MkM7CisKKy8vIFZLX0lOU0VSVCAoMkQpIElOUyBrZXkKK2NvbnN0
IGludCBWS19JTlNFUlQgPSAweDJEOworCisvLyBWS19ERUxFVEUgKDJFKSBERUwga2V5Citjb25z
dCBpbnQgVktfREVMRVRFID0gMHgyRTsKKworLy8gVktfSEVMUCAoMkYpIEhFTFAga2V5Citjb25z
dCBpbnQgVktfSEVMUCA9IDB4MkY7CisKKy8vICgzMCkgMCBrZXkKK2NvbnN0IGludCBWS18wID0g
MHgzMDsKKworLy8gKDMxKSAxIGtleQorY29uc3QgaW50IFZLXzEgPSAweDMxOworCisvLyAoMzIp
IDIga2V5Citjb25zdCBpbnQgVktfMiA9IDB4MzI7CisKKy8vICgzMykgMyBrZXkKK2NvbnN0IGlu
dCBWS18zID0gMHgzMzsKKworLy8gKDM0KSA0IGtleQorY29uc3QgaW50IFZLXzQgPSAweDM0Owor
CisvLyAoMzUpIDUga2V5OworCitjb25zdCBpbnQgVktfNSA9IDB4MzU7CisKKy8vICgzNikgNiBr
ZXkKK2NvbnN0IGludCBWS182ID0gMHgzNjsKKworLy8gKDM3KSA3IGtleQorY29uc3QgaW50IFZL
XzcgPSAweDM3OworCisvLyAoMzgpIDgga2V5Citjb25zdCBpbnQgVktfOCA9IDB4Mzg7CisKKy8v
ICgzOSkgOSBrZXkKK2NvbnN0IGludCBWS185ID0gMHgzOTsKKworLy8gKDQxKSBBIGtleQorY29u
c3QgaW50IFZLX0EgPSAweDQxOworCisvLyAoNDIpIEIga2V5Citjb25zdCBpbnQgVktfQiA9IDB4
NDI7CisKKy8vICg0MykgQyBrZXkKK2NvbnN0IGludCBWS19DID0gMHg0MzsKKworLy8gKDQ0KSBE
IGtleQorY29uc3QgaW50IFZLX0QgPSAweDQ0OworCisvLyAoNDUpIEUga2V5Citjb25zdCBpbnQg
VktfRSA9IDB4NDU7CisKKy8vICg0NikgRiBrZXkKK2NvbnN0IGludCBWS19GID0gMHg0NjsKKwor
Ly8gKDQ3KSBHIGtleQorY29uc3QgaW50IFZLX0cgPSAweDQ3OworCisvLyAoNDgpIEgga2V5Citj
b25zdCBpbnQgVktfSCA9IDB4NDg7CisKKy8vICg0OSkgSSBrZXkKK2NvbnN0IGludCBWS19JID0g
MHg0OTsKKworLy8gKDRBKSBKIGtleQorY29uc3QgaW50IFZLX0ogPSAweDRBOworCisvLyAoNEIp
IEsga2V5Citjb25zdCBpbnQgVktfSyA9IDB4NEI7CisKKy8vICg0QykgTCBrZXkKK2NvbnN0IGlu
dCBWS19MID0gMHg0QzsKKworLy8gKDREKSBNIGtleQorY29uc3QgaW50IFZLX00gPSAweDREOwor
CisvLyAoNEUpIE4ga2V5Citjb25zdCBpbnQgVktfTiA9IDB4NEU7CisKKy8vICg0RikgTyBrZXkK
K2NvbnN0IGludCBWS19PID0gMHg0RjsKKworLy8gKDUwKSBQIGtleQorY29uc3QgaW50IFZLX1Ag
PSAweDUwOworCisvLyAoNTEpIFEga2V5Citjb25zdCBpbnQgVktfUSA9IDB4NTE7CisKKy8vICg1
MikgUiBrZXkKK2NvbnN0IGludCBWS19SID0gMHg1MjsKKworLy8gKDUzKSBTIGtleQorY29uc3Qg
aW50IFZLX1MgPSAweDUzOworCisvLyAoNTQpIFQga2V5Citjb25zdCBpbnQgVktfVCA9IDB4NTQ7
CisKKy8vICg1NSkgVSBrZXkKK2NvbnN0IGludCBWS19VID0gMHg1NTsKKworLy8gKDU2KSBWIGtl
eQorY29uc3QgaW50IFZLX1YgPSAweDU2OworCisvLyAoNTcpIFcga2V5Citjb25zdCBpbnQgVktf
VyA9IDB4NTc7CisKKy8vICg1OCkgWCBrZXkKK2NvbnN0IGludCBWS19YID0gMHg1ODsKKworLy8g
KDU5KSBZIGtleQorY29uc3QgaW50IFZLX1kgPSAweDU5OworCisvLyAoNUEpIFoga2V5Citjb25z
dCBpbnQgVktfWiA9IDB4NUE7CisKKy8vIFZLX0xXSU4gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChN
aWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKK2NvbnN0IGludCBWS19MV0lOID0gMHg1QjsKKwor
Ly8gVktfUldJTiAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQorY29u
c3QgaW50IFZLX1JXSU4gPSAweDVDOworCisvLyBWS19BUFBTICg1RCkgQXBwbGljYXRpb25zIGtl
eSAoTmF0dXJhbCBrZXlib2FyZCkKK2NvbnN0IGludCBWS19BUFBTID0gMHg1RDsKKworLy8gVktf
U0xFRVAgKDVGKSBDb21wdXRlciBTbGVlcCBrZXkKK2NvbnN0IGludCBWS19TTEVFUCA9IDB4NUY7
CisKKy8vIFZLX05VTVBBRDAgKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorY29uc3QgaW50IFZL
X05VTVBBRDAgPSAweDYwOworCisvLyBWS19OVU1QQUQxICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBr
ZXkKK2NvbnN0IGludCBWS19OVU1QQUQxID0gMHg2MTsKKworLy8gVktfTlVNUEFEMiAoNjIpIE51
bWVyaWMga2V5cGFkIDIga2V5Citjb25zdCBpbnQgVktfTlVNUEFEMiA9IDB4NjI7CisKKy8vIFZL
X05VTVBBRDMgKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorY29uc3QgaW50IFZLX05VTVBBRDMg
PSAweDYzOworCisvLyBWS19OVU1QQUQ0ICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKK2NvbnN0
IGludCBWS19OVU1QQUQ0ID0gMHg2NDsKKworLy8gVktfTlVNUEFENSAoNjUpIE51bWVyaWMga2V5
cGFkIDUga2V5Citjb25zdCBpbnQgVktfTlVNUEFENSA9IDB4NjU7CisKKy8vIFZLX05VTVBBRDYg
KDY2KSBOdW1lcmljIGtleXBhZCA2IGtleQorY29uc3QgaW50IFZLX05VTVBBRDYgPSAweDY2Owor
CisvLyBWS19OVU1QQUQ3ICg2NykgTnVtZXJpYyBrZXlwYWQgNyBrZXkKK2NvbnN0IGludCBWS19O
VU1QQUQ3ID0gMHg2NzsKKworLy8gVktfTlVNUEFEOCAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5
Citjb25zdCBpbnQgVktfTlVNUEFEOCA9IDB4Njg7CisKKy8vIFZLX05VTVBBRDkgKDY5KSBOdW1l
cmljIGtleXBhZCA5IGtleQorY29uc3QgaW50IFZLX05VTVBBRDkgPSAweDY5OworCisvLyBWS19N
VUxUSVBMWSAoNkEpIE11bHRpcGx5IGtleQorY29uc3QgaW50IFZLX01VTFRJUExZID0gMHg2QTsK
KworLy8gVktfQUREICg2QikgQWRkIGtleQorY29uc3QgaW50IFZLX0FERCA9IDB4NkI7CisKKy8v
IFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkKK2NvbnN0IGludCBWS19TRVBBUkFUT1Ig
PSAweDZDOworCisvLyBWS19TVUJUUkFDVCAoNkQpIFN1YnRyYWN0IGtleQorY29uc3QgaW50IFZL
X1NVQlRSQUNUID0gMHg2RDsKKworLy8gVktfREVDSU1BTCAoNkUpIERlY2ltYWwga2V5Citjb25z
dCBpbnQgVktfREVDSU1BTCA9IDB4NkU7CisKKy8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkK
K2NvbnN0IGludCBWS19ESVZJREUgPSAweDZGOworCisvLyBWS19GMSAoNzApIEYxIGtleQorY29u
c3QgaW50IFZLX0YxID0gMHg3MDsKKworLy8gVktfRjIgKDcxKSBGMiBrZXkKK2NvbnN0IGludCBW
S19GMiA9IDB4NzE7CisKKy8vIFZLX0YzICg3MikgRjMga2V5Citjb25zdCBpbnQgVktfRjMgPSAw
eDcyOworCisvLyBWS19GNCAoNzMpIEY0IGtleQorY29uc3QgaW50IFZLX0Y0ID0gMHg3MzsKKwor
Ly8gVktfRjUgKDc0KSBGNSBrZXkKK2NvbnN0IGludCBWS19GNSA9IDB4NzQ7CisKKy8vIFZLX0Y2
ICg3NSkgRjYga2V5Citjb25zdCBpbnQgVktfRjYgPSAweDc1OworCisvLyBWS19GNyAoNzYpIEY3
IGtleQorY29uc3QgaW50IFZLX0Y3ID0gMHg3NjsKKworLy8gVktfRjggKDc3KSBGOCBrZXkKK2Nv
bnN0IGludCBWS19GOCA9IDB4Nzc7CisKKy8vIFZLX0Y5ICg3OCkgRjkga2V5Citjb25zdCBpbnQg
VktfRjkgPSAweDc4OworCisvLyBWS19GMTAgKDc5KSBGMTAga2V5Citjb25zdCBpbnQgVktfRjEw
ID0gMHg3OTsKKworLy8gVktfRjExICg3QSkgRjExIGtleQorY29uc3QgaW50IFZLX0YxMSA9IDB4
N0E7CisKKy8vIFZLX0YxMiAoN0IpIEYxMiBrZXkKK2NvbnN0IGludCBWS19GMTIgPSAweDdCOwor
CisvLyBWS19GMTMgKDdDKSBGMTMga2V5Citjb25zdCBpbnQgVktfRjEzID0gMHg3QzsKKworLy8g
VktfRjE0ICg3RCkgRjE0IGtleQorY29uc3QgaW50IFZLX0YxNCA9IDB4N0Q7CisKKy8vIFZLX0Yx
NSAoN0UpIEYxNSBrZXkKK2NvbnN0IGludCBWS19GMTUgPSAweDdFOworCisvLyBWS19GMTYgKDdG
KSBGMTYga2V5Citjb25zdCBpbnQgVktfRjE2ID0gMHg3RjsKKworLy8gVktfRjE3ICg4MEgpIEYx
NyBrZXkKK2NvbnN0IGludCBWS19GMTcgPSAweDgwOworCisvLyBWS19GMTggKDgxSCkgRjE4IGtl
eQorY29uc3QgaW50IFZLX0YxOCA9IDB4ODE7CisKKy8vIFZLX0YxOSAoODJIKSBGMTkga2V5Citj
b25zdCBpbnQgVktfRjE5ID0gMHg4MjsKKworLy8gVktfRjIwICg4M0gpIEYyMCBrZXkKK2NvbnN0
IGludCBWS19GMjAgPSAweDgzOworCisvLyBWS19GMjEgKDg0SCkgRjIxIGtleQorY29uc3QgaW50
IFZLX0YyMSA9IDB4ODQ7CisKKy8vIFZLX0YyMiAoODVIKSBGMjIga2V5Citjb25zdCBpbnQgVktf
RjIyID0gMHg4NTsKKworLy8gVktfRjIzICg4NkgpIEYyMyBrZXkKK2NvbnN0IGludCBWS19GMjMg
PSAweDg2OworCisvLyBWS19GMjQgKDg3SCkgRjI0IGtleQorY29uc3QgaW50IFZLX0YyNCA9IDB4
ODc7CisKKy8vIFZLX05VTUxPQ0sgKDkwKSBOVU0gTE9DSyBrZXkKK2NvbnN0IGludCBWS19OVU1M
T0NLID0gMHg5MDsKKworLy8gVktfU0NST0xMICg5MSkgU0NST0xMIExPQ0sga2V5Citjb25zdCBp
bnQgVktfU0NST0xMID0gMHg5MTsKKworLy8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkK
K2NvbnN0IGludCBWS19MU0hJRlQgPSAweEEwOworCisvLyBWS19SU0hJRlQgKEExKSBSaWdodCBT
SElGVCBrZXkKK2NvbnN0IGludCBWS19SU0hJRlQgPSAweEExOworCisvLyBWS19MQ09OVFJPTCAo
QTIpIExlZnQgQ09OVFJPTCBrZXkKK2NvbnN0IGludCBWS19MQ09OVFJPTCA9IDB4QTI7CisKKy8v
IFZLX1JDT05UUk9MIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKK2NvbnN0IGludCBWS19SQ09OVFJP
TCA9IDB4QTM7CisKKy8vIFZLX0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQorY29uc3QgaW50IFZL
X0xNRU5VID0gMHhBNDsKKworLy8gVktfUk1FTlUgKEE1KSBSaWdodCBNRU5VIGtleQorY29uc3Qg
aW50IFZLX1JNRU5VID0gMHhBNTsKKworLy8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAy
MDAwL1hQOiBCcm93c2VyIEJhY2sga2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9CQUNLID0gMHhB
NjsKKworLy8gVktfQlJPV1NFUl9GT1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2Vy
IEZvcndhcmQga2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9GT1JXQVJEID0gMHhBNzsKKworLy8g
VktfQlJPV1NFUl9SRUZSRVNIIChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gg
a2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9SRUZSRVNIID0gMHhBODsKKworLy8gVktfQlJPV1NF
Ul9TVE9QIChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5Citjb25zdCBpbnQg
VktfQlJPV1NFUl9TVE9QID0gMHhBOTsKKworLy8gVktfQlJPV1NFUl9TRUFSQ0ggKEFBKSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfU0VB
UkNIID0gMHhBQTsKKworLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAv
WFA6IEJyb3dzZXIgRmF2b3JpdGVzIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfRkFWT1JJVEVT
ID0gMHhBQjsKKworLy8gVktfQlJPV1NFUl9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93
c2VyIFN0YXJ0IGFuZCBIb21lIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfSE9NRSA9IDB4QUM7
CisKKy8vIFZLX1ZPTFVNRV9NVVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBr
ZXkKK2NvbnN0IGludCBWS19WT0xVTUVfTVVURSA9IDB4QUQ7CisKKy8vIFZLX1ZPTFVNRV9ET1dO
IChBRSkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgRG93biBrZXkKK2NvbnN0IGludCBWS19WT0xV
TUVfRE9XTiA9IDB4QUU7CisKKy8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDog
Vm9sdW1lIFVwIGtleQorY29uc3QgaW50IFZLX1ZPTFVNRV9VUCA9IDB4QUY7CisKKy8vIFZLX01F
RElBX05FWFRfVFJBQ0sgKEIwKSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5Citjb25z
dCBpbnQgVktfTUVESUFfTkVYVF9UUkFDSyA9IDB4QjA7CisKKy8vIFZLX01FRElBX1BSRVZfVFJB
Q0sgKEIxKSBXaW5kb3dzIDIwMDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQorY29uc3QgaW50IFZL
X01FRElBX1BSRVZfVFJBQ0sgPSAweEIxOworCisvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93
cyAyMDAwL1hQOiBTdG9wIE1lZGlhIGtleQorY29uc3QgaW50IFZLX01FRElBX1NUT1AgPSAweEIy
OworCisvLyBWS19NRURJQV9QTEFZX1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQbGF5L1Bh
dXNlIE1lZGlhIGtleQorY29uc3QgaW50IFZLX01FRElBX1BMQVlfUEFVU0UgPSAweEIzOworCisv
LyBWS19MQVVOQ0hfTUFJTCAoQjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKK2Nv
bnN0IGludCBWS19NRURJQV9MQVVOQ0hfTUFJTCA9IDB4QjQ7CisKKy8vIFZLX0xBVU5DSF9NRURJ
QV9TRUxFQ1QgKEI1KSBXaW5kb3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKK2NvbnN0IGlu
dCBWS19NRURJQV9MQVVOQ0hfTUVESUFfU0VMRUNUID0gMHhCNTsKKworLy8gVktfTEFVTkNIX0FQ
UDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDEga2V5Citjb25zdCBp
bnQgVktfTUVESUFfTEFVTkNIX0FQUDEgPSAweEI2OworCisvLyBWS19MQVVOQ0hfQVBQMiAoQjcp
IFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkKK2NvbnN0IGludCBWS19N
RURJQV9MQVVOQ0hfQVBQMiA9IDB4Qjc7CisKKy8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlz
Y2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAy
MDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKK2NvbnN0
IGludCBWS19PRU1fMSA9IDB4QkE7CisKKy8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAyMDAw
L1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJysnIGtleQorY29uc3QgaW50IFZLX09F
TV9QTFVTID0gMHhCQjsKKworLy8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBG
b3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQorY29uc3QgaW50IFZLX09FTV9DT01N
QSA9IDB4QkM7CisKKy8vIFZLX09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFu
eSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKK2NvbnN0IGludCBWS19PRU1fTUlOVVMgPSAw
eEJEOworCisvLyBWS19PRU1fUEVSSU9EIChCRSkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNv
dW50cnkvcmVnaW9uLCB0aGUgJy4nIGtleQorY29uc3QgaW50IFZLX09FTV9QRVJJT0QgPSAweEJF
OworCisvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsg
aXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFu
ZGFyZCBrZXlib2FyZCwgdGhlICcvPycga2V5Citjb25zdCBpbnQgVktfT0VNXzIgPSAweEJGOwor
CisvLyBWS19PRU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICdgficga2V5Citjb25zdCBpbnQgVktfT0VNXzMgPSAweEMwOworCisv
LyBWS19PRU1fNCAoREIpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICdbeycga2V5Citjb25zdCBpbnQgVktfT0VNXzQgPSAweERCOworCisvLyBW
S19PRU1fNSAoREMpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZh
cnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXli
b2FyZCwgdGhlICdcfCcga2V5Citjb25zdCBpbnQgVktfT0VNXzUgPSAweERDOworCisvLyBWS19P
RU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkg
Ynkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2Fy
ZCwgdGhlICddfScga2V5Citjb25zdCBpbnQgVktfT0VNXzYgPSAweEREOworCisvLyBWS19PRU1f
NyAoREUpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkg
a2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwg
dGhlICdzaW5nbGUtcXVvdGUvZG91YmxlLXF1b3RlJyBrZXkKK2NvbnN0IGludCBWS19PRU1fNyA9
IDB4REU7CisKKy8vIFZLX09FTV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0
ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4KK2NvbnN0IGludCBWS19PRU1fOCA9IDB4REY7
CisKKy8vIFZLX09FTV8xMDIgKEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUg
YnJhY2tldCBrZXkgb3IgdGhlIGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9h
cmQKK2NvbnN0IGludCBWS19PRU1fMTAyID0gMHhFMjsKKworLy8gVktfUFJPQ0VTU0tFWSAoRTUp
IFdpbmRvd3MgOTUvOTgvTWUsIFdpbmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQ
Uk9DRVNTIGtleQorY29uc3QgaW50IFZLX1BST0NFU1NLRVkgPSAweEU1OworCisvLyBWS19QQUNL
RVQgKEU3KSBXaW5kb3dzIDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMg
YXMgaWYgdGhleSB3ZXJlIGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cg
d29yZCBvZiBhIDMyLWJpdCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQg
aW5wdXQgbWV0aG9kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJ
TlBVVCxTZW5kSW5wdXQsIFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAorY29uc3QgaW50IFZLX1BB
Q0tFVCA9IDB4RTc7CisKKy8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQorY29uc3QgaW50IFZLX0FU
VE4gPSAweEY2OworCisvLyBWS19DUlNFTCAoRjcpIENyU2VsIGtleQorY29uc3QgaW50IFZLX0NS
U0VMID0gMHhGNzsKKworLy8gVktfRVhTRUwgKEY4KSBFeFNlbCBrZXkKK2NvbnN0IGludCBWS19F
WFNFTCA9IDB4Rjg7CisKKy8vIFZLX0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQorY29uc3QgaW50
IFZLX0VSRU9GID0gMHhGOTsKKworLy8gVktfUExBWSAoRkEpIFBsYXkga2V5Citjb25zdCBpbnQg
VktfUExBWSA9IDB4RkE7CisKKy8vIFZLX1pPT00gKEZCKSBab29tIGtleQorY29uc3QgaW50IFZL
X1pPT00gPSAweEZCOworCisvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVz
ZQorY29uc3QgaW50IFZLX05PTkFNRSA9IDB4RkM7CisKKy8vIFZLX1BBMSAoRkQpIFBBMSBrZXkK
K2NvbnN0IGludCBWS19QQTEgPSAweEZEOworCisvLyBWS19PRU1fQ0xFQVIgKEZFKSBDbGVhciBr
ZXkKK2NvbnN0IGludCBWS19PRU1fQ0xFQVIgPSAweEZFOworCitjb25zdCBpbnQgVktfVU5LTk9X
TiA9IDA7CisKK30KKworI2VuZGlmIC8vIEtleWJvYXJkQ29kZXNfaAo=
</data>
<flag name="review"
          id="15820"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31070</attachid>
            <date>2009-06-08 16:42:18 -0700</date>
            <delta_ts>2009-06-08 18:14:47 -0700</delta_ts>
            <desc>new patch part 3 with ChangeLog</desc>
            <filename>bug23296-part-3.txt</filename>
            <type>text/plain</type>
            <size>7802</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDUxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDktMDYtMDggIEZlbmcgUWlhbiAgPGZlbmdAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
bmRyb2lkIHBvcnQgZmlsZXMgdG8gV2ViQ29yZS9wbGF0Zm9ybSAocGFydCAzKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjk2CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hbmRyb2lkL0ZpbGVDaG9vc2VyQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwOiBBZGRlZC4KKwogMjAw
OS0wNi0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL0ZpbGVDaG9vc2VyQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL0ZpbGVDaG9vc2VyQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2FuZHJvaWQvRmlsZUNob29zZXJBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNv
dXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWxl
Q2hvb3Nlci5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1N0cmluZyBGaWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JXaWR0aChjb25zdCBGb250JiBmb250LCBp
bnQgd2lkdGgpIGNvbnN0IAoreworICAgIGlmICghbV9maWxlbmFtZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgYSBsb3QgZmFz
dGVyLCBidXQgYXNzdW1pbmcgdGhlIGRhdGEgd2lsbCBub3QKKyAgICAvLyBvZnRlbiBiZSBtdWNo
IGxvbmdlciB0aGFuIHRoZSBwcm92aWRlZCB3aWR0aCwgdGhpcyBtYXkgYmUgZmFzdCBlbm91Z2gu
CisgICAgU3RyaW5nIG91dHB1dCA9IG1fZmlsZW5hbWVzWzBdLmNvcHkoKTsKKyAgICB3aGlsZSAo
Zm9udC53aWR0aChUZXh0UnVuKG91dHB1dC5pbXBsKCkpKSA+IHdpZHRoICYmIG91dHB1dC5sZW5n
dGgoKSA+IDQpIHsKKyAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2Uob3V0cHV0Lmxlbmd0
aCgpIC0gNCwgNCwgU3RyaW5nKCIuLi4iKSk7CisgICAgfQorICAgIHJldHVybiBvdXRwdXQ7Cit9
CisKKy8vIFRoZSBmb2xsb3dpbmcgdHdvIHN0cmluZ3MgYXJlIHVzZWQgZm9yIEZpbGUgVXBsb2Fk
IGZvcm0gY29udHJvbCwgaWUKKy8vIDxpbnB1dCB0eXBlPSJmaWxlIj4uIFRoZSBmaXJzdCBpcyB0
aGUgdGV4dCB0aGF0IGFwcGVhcnMgb24gdGhlIGJ1dHRvbgorLy8gdGhhdCB3aGVuIHByZXNzZWQs
IHRoZSB1c2VyIGNhbiBicm93c2UgZm9yIGFuZCBzZWxlY3QgYSBmaWxlLiBUaGUKKy8vIHNlY29u
ZCBzdHJpbmcgaXMgcmVuZGVyZWQgb24gdGhlIHNjcmVlbiB3aGVuIG5vIGZpbGUgaGFzIGJlZW4g
c2VsZWN0ZWQuCitTdHJpbmcgZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpCit7CisgICAgcmV0
dXJuIFN0cmluZygiVXBsb2FkcyBEaXNhYmxlZCIpOworfQorCitTdHJpbmcgZmlsZUJ1dHRvbk5v
RmlsZVNlbGVjdGVkTGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmcoIk5vIGZpbGUgc2VsZWN0
ZWQiKTsKK30KKworfSAvLyBuYW1lc2FwY2UgV2ViQ29yZQorCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9GaWxlU3lzdGVtQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvRmlsZVN5c3RlbUFuZHJvaWQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBP
cGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgPGZubWF0Y2guaD4KKyNpbmNs
dWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cisj
aW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlICJjdXRpbHMvbG9nLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gR2xvYmFsIHN0YXRpYyB1c2VkIHRvIHN0b3JlIHRoZSBiYXNlIHRv
IHRoZSBwbHVnaW4gcGF0aC4KKy8vIFRoaXMgaXMgc2V0IGluIFdlYlNldHRpbmdzLmNwcAorU3Ry
aW5nIHNQbHVnaW5QYXRoOworCitDU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIHBhdGgudXRmOCgpOworfQorCitDU3RyaW5n
IG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxl
JiBoYW5kbGUpCit7CisgICAgaW50IG51bWJlciA9IHJhbmQoKSAlIDEwMDAwICsgMTsKKyAgICBD
U3RyaW5nIGZpbGVuYW1lOworICAgIGRvIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OworICAgICAgICBidWlsZGVyLmFwcGVuZChzUGx1Z2luUGF0aCk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcvJyk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHByZWZpeCk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG51bWJlcikpOworICAgICAgICBmaWxlbmFtZSA9
IGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGZzdHIgPSBm
aWxlbmFtZS5kYXRhKCk7CisgICAgICAgIGhhbmRsZSA9IG9wZW4oZmlsZW5hbWUuZGF0YSgpLCBP
X1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKyAgICAgICAg
bnVtYmVyKys7CisgICAgICAgIAorICAgICAgICBpZiAoaGFuZGxlICE9IC0xKQorICAgICAgICAg
ICAgcmV0dXJuIGZpbGVuYW1lOworICAgIH0gd2hpbGUgKGVycm5vID09IEVFWElTVCk7CisgICAg
CisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1N
b2R1bGUgbW9kdWxlKQoreworICAgIHJldHVybiBkbGNsb3NlKG1vZHVsZSkgPT0gMDsKK30KKwor
dm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKGlz
SGFuZGxlVmFsaWQoaGFuZGxlKSkgeworICAgICAgICBjbG9zZShoYW5kbGUpOworICAgICAgICBo
YW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIH0KK30KKworaW50IHdyaXRl
VG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCit7CisgICAgaW50IHRvdGFsQnl0ZXNXcml0dGVuID0gMDsKKyAgICB3aGlsZSAodG90
YWxCeXRlc1dyaXR0ZW4gPCBsZW5ndGgpIHsKKyAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHdy
aXRlKGhhbmRsZSwgZGF0YSwgKHNpemVfdCkobGVuZ3RoIC0gdG90YWxCeXRlc1dyaXR0ZW4pKTsK
KyAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA8IDAgJiYgZXJybm8gIT0gRUlOVFIpCisgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgIGVsc2UgaWYgKGJ5dGVzV3JpdHRlbiA+IDApCisgICAg
ICAgICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBieXRlc1dyaXR0ZW47CisgICAgfQorCisgICAg
cmV0dXJuIHRvdGFsQnl0ZXNXcml0dGVuOworfQorCitTdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgo
KSAKK3sKKyAgICByZXR1cm4gc1BsdWdpblBhdGg7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGxpc3RE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcikKK3sKKyAg
ICBWZWN0b3I8U3RyaW5nPiBlbnRyaWVzOworICAgIENTdHJpbmcgY3BhdGggPSBwYXRoLnV0Zjgo
KTsKKyAgICBDU3RyaW5nIGNmaWx0ZXIgPSBmaWx0ZXIudXRmOCgpOworICAgIERJUiogZGlyID0g
b3BlbmRpcihjcGF0aC5kYXRhKCkpOworICAgIGlmIChkaXIpIHsKKyAgICAgICAgc3RydWN0IGRp
cmVudCogZHA7CisgICAgICAgIHdoaWxlIChkcCA9IHJlYWRkaXIoZGlyKSkgeworICAgICAgICAg
ICAgY29uc3QgY2hhciogbmFtZSA9IGRwLT5kX25hbWU7CisgICAgICAgICAgICBpZiAoIXN0cmNt
cChuYW1lLCAiLiIpIHx8ICFzdHJjbXAobmFtZSwgIi4uIikpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBpZiAoZm5tYXRjaChjZmlsdGVyLmRhdGEoKSwgbmFtZSwgMCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjaGFyIGZpbGVQYXRoWzEw
MjRdOworICAgICAgICAgICAgaWYgKChpbnQpIChzaXplb2YoZmlsZVBhdGgpIC0gMSkgPCBzbnBy
aW50ZihmaWxlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGZpbGVQYXRoKSwgIiVz
LyVzIiwgY3BhdGguZGF0YSgpLCBuYW1lKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAv
LyBidWZmZXIgb3ZlcmZsb3cKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVudHJpZXMuYXBw
ZW5kKGZpbGVQYXRoKTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZWRpcihkaXIpOworICAgIH0K
KyAgICByZXR1cm4gZW50cmllczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="15826"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31074</attachid>
            <date>2009-06-08 17:20:59 -0700</date>
            <delta_ts>2009-06-08 18:15:14 -0700</delta_ts>
            <desc>new patch part 4 with ChangeLog</desc>
            <filename>bug23296-part-4.txt</filename>
            <type>text/plain</type>
            <size>23026</size>
            <attacher name="Feng Qian">feng</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDUxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKworMjAwOS0wNi0wOCAgRmVuZyBRaWFuICA8ZmVuZ0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IEFuZHJvaWQgcG9ydCBmaWxlcyB0byBXZWJDb3JlL3BsYXRmb3JtIChwYXJ0IDQpLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyOTYKKworICAgICAg
ICAqIHBsYXRmb3JtL2FuZHJvaWQvS2V5RXZlbnRBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vYW5kcm9pZC9LZXlib2FyZENvZGVzLmg6IEFkZGVkLgorCiAyMDA5LTA2LTA4
ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvS2V5
RXZlbnRBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQv
S2V5RXZlbnRBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5k
cm9pZC9LZXlFdmVudEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisKKyNpbmNsdWRlICJLZXlib2FyZENv
ZGVzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx1aS9LZXljb2Rl
TGFiZWxzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gY29tcGFyZSB0byBzYW1lIGZ1
bmN0aW9uIGluIGdkay9LZXlFdmVudEdkay5jcHAKK3N0YXRpYyBpbnQgd2luZG93c0tleUNvZGVG
b3JLZXlFdmVudCh1bnNpZ25lZCBpbnQga2V5Q29kZSkKK3sKKyAgICAvLyBEb2VzIG5vdCBwcm92
aWRlIGFsbCBrZXkgY29kZXMsIGFuZCBkb2VzIG5vdCBoYW5kbGUgYWxsIGtleXMuCisgICAgc3dp
dGNoKGtleUNvZGUpIHsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURlbDoKKyAgICAgICAgICAgIHJl
dHVybiBWS19CQUNLOworICAgICAgICBjYXNlIGtLZXlDb2RlVGFiOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1RBQjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZUNsZWFyOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0NMRUFSOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZENlbnRlcjoKKyAgICAgICAg
Y2FzZSBrS2V5Q29kZU5ld2xpbmU6CisgICAgICAgICAgICByZXR1cm4gVktfUkVUVVJOOworICAg
ICAgICBjYXNlIGtLZXlDb2RlU2hpZnRMZWZ0OgorICAgICAgICBjYXNlIGtLZXlDb2RlU2hpZnRS
aWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19TSElGVDsKKyAgICAgICAgLy8gYmFjayB3aWxs
IHNlcnZlIGFzIGVzY2FwZSwgYWx0aG91Z2ggd2UgcHJvYmFibHkgZG8gbm90IGhhdmUgYWNjZXNz
IHRvIGl0CisgICAgICAgIGNhc2Uga0tleUNvZGVCYWNrOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0VTQ0FQRTsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVNwYWNlOgorICAgICAgICAgICAgcmV0dXJu
IFZLX1NQQUNFOworICAgICAgICBjYXNlIGtLZXlDb2RlSG9tZToKKyAgICAgICAgICAgIHJldHVy
biBWS19IT01FOworICAgICAgICBjYXNlIGtLZXlDb2RlRHBhZExlZnQ6CisgICAgICAgICAgICBy
ZXR1cm4gVktfTEVGVDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRVcDoKKyAgICAgICAgICAg
IHJldHVybiBWS19VUDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRSaWdodDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19SSUdIVDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWREb3duOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0RPV047CisgICAgICAgIGNhc2Uga0tleUNvZGUwOgorICAgICAg
ICAgICAgcmV0dXJuIFZLXzA7CisgICAgICAgIGNhc2Uga0tleUNvZGUxOgorICAgICAgICAgICAg
cmV0dXJuIFZLXzE7CisgICAgICAgIGNhc2Uga0tleUNvZGUyOgorICAgICAgICAgICAgcmV0dXJu
IFZLXzI7CisgICAgICAgIGNhc2Uga0tleUNvZGUzOgorICAgICAgICAgICAgcmV0dXJuIFZLXzM7
CisgICAgICAgIGNhc2Uga0tleUNvZGU0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAg
ICAgIGNhc2Uga0tleUNvZGU1OgorICAgICAgICAgICAgcmV0dXJuIFZLXzU7CisgICAgICAgIGNh
c2Uga0tleUNvZGU2OgorICAgICAgICAgICAgcmV0dXJuIFZLXzY7CisgICAgICAgIGNhc2Uga0tl
eUNvZGU3OgorICAgICAgICAgICAgcmV0dXJuIFZLXzc7CisgICAgICAgIGNhc2Uga0tleUNvZGU4
OgorICAgICAgICAgICAgcmV0dXJuIFZLXzg7CisgICAgICAgIGNhc2Uga0tleUNvZGU5OgorICAg
ICAgICAgICAgcmV0dXJuIFZLXzk7CisgICAgICAgIGNhc2Uga0tleUNvZGVBOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0E7CisgICAgICAgIGNhc2Uga0tleUNvZGVCOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0I7CisgICAgICAgIGNhc2Uga0tleUNvZGVDOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0M7CisgICAgICAgIGNhc2Uga0tleUNvZGVEOgorICAgICAgICAgICAgcmV0dXJuIFZLX0Q7Cisg
ICAgICAgIGNhc2Uga0tleUNvZGVFOgorICAgICAgICAgICAgcmV0dXJuIFZLX0U7CisgICAgICAg
IGNhc2Uga0tleUNvZGVGOgorICAgICAgICAgICAgcmV0dXJuIFZLX0Y7CisgICAgICAgIGNhc2Ug
a0tleUNvZGVHOgorICAgICAgICAgICAgcmV0dXJuIFZLX0c7CisgICAgICAgIGNhc2Uga0tleUNv
ZGVIOgorICAgICAgICAgICAgcmV0dXJuIFZLX0g7CisgICAgICAgIGNhc2Uga0tleUNvZGVJOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0k7CisgICAgICAgIGNhc2Uga0tleUNvZGVKOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0o7CisgICAgICAgIGNhc2Uga0tleUNvZGVLOgorICAgICAgICAgICAg
cmV0dXJuIFZLX0s7CisgICAgICAgIGNhc2Uga0tleUNvZGVMOgorICAgICAgICAgICAgcmV0dXJu
IFZLX0w7CisgICAgICAgIGNhc2Uga0tleUNvZGVNOgorICAgICAgICAgICAgcmV0dXJuIFZLX007
CisgICAgICAgIGNhc2Uga0tleUNvZGVOOgorICAgICAgICAgICAgcmV0dXJuIFZLX047CisgICAg
ICAgIGNhc2Uga0tleUNvZGVPOgorICAgICAgICAgICAgcmV0dXJuIFZLX087CisgICAgICAgIGNh
c2Uga0tleUNvZGVQOgorICAgICAgICAgICAgcmV0dXJuIFZLX1A7CisgICAgICAgIGNhc2Uga0tl
eUNvZGVROgorICAgICAgICAgICAgcmV0dXJuIFZLX1E7CisgICAgICAgIGNhc2Uga0tleUNvZGVS
OgorICAgICAgICAgICAgcmV0dXJuIFZLX1I7CisgICAgICAgIGNhc2Uga0tleUNvZGVTOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX1M7CisgICAgICAgIGNhc2Uga0tleUNvZGVUOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX1Q7CisgICAgICAgIGNhc2Uga0tleUNvZGVVOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1U7CisgICAgICAgIGNhc2Uga0tleUNvZGVWOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1Y7CisgICAgICAgIGNhc2Uga0tleUNvZGVXOgorICAgICAgICAgICAgcmV0dXJuIFZLX1c7Cisg
ICAgICAgIGNhc2Uga0tleUNvZGVYOgorICAgICAgICAgICAgcmV0dXJuIFZLX1g7CisgICAgICAg
IGNhc2Uga0tleUNvZGVZOgorICAgICAgICAgICAgcmV0dXJuIFZLX1k7CisgICAgICAgIGNhc2Ug
a0tleUNvZGVaOgorICAgICAgICAgICAgcmV0dXJuIFZLX1o7CisgICAgICAgIC8vIGNvbG9uCisg
ICAgICAgIGNhc2Uga0tleUNvZGVTZW1pY29sb246CisgICAgICAgICAgICByZXR1cm4gVktfT0VN
XzE7CisgICAgICAgIGNhc2Uga0tleUNvZGVDb21tYToKKyAgICAgICAgICAgIHJldHVybiBWS19P
RU1fQ09NTUE7CisgICAgICAgIGNhc2Uga0tleUNvZGVNaW51czoKKyAgICAgICAgICAgIHJldHVy
biBWS19PRU1fTUlOVVM7CisgICAgICAgIGNhc2Uga0tleUNvZGVFcXVhbHM6CisgICAgICAgICAg
ICByZXR1cm4gVktfT0VNX1BMVVM7CisgICAgICAgIGNhc2Uga0tleUNvZGVQZXJpb2Q6CisgICAg
ICAgICAgICByZXR1cm4gVktfT0VNX1BFUklPRDsKKyAgICAgICAgY2FzZSBrS2V5Q29kZVNsYXNo
OgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8yOworICAgICAgICAvLyBtYXliZSBub3QgdGhl
IHJpZ2h0IGNob2ljZQorICAgICAgICBjYXNlIGtLZXlDb2RlTGVmdEJyYWNrZXQ6CisgICAgICAg
ICAgICByZXR1cm4gVktfT0VNXzQ7CisgICAgICAgIGNhc2Uga0tleUNvZGVCYWNrc2xhc2g6Cisg
ICAgICAgICAgICByZXR1cm4gVktfT0VNXzU7CisgICAgICAgIGNhc2Uga0tleUNvZGVSaWdodEJy
YWNrZXQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzY7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBTdHJpbmcga2V5SWRlbnRp
ZmllckZvckFuZHJvaWRLZXlDb2RlKGludCBrZXlDb2RlKQoreworICAgIC8vIERvZXMgbm90IHJl
dHVybiBhbGwgb2YgdGhlIHNhbWUga2V5IGlkZW50aWZpZXJzLCBhbmQKKyAgICAvLyBkb2VzIG5v
dCBoYW5kbGUgYWxsIHRoZSBrZXlzLgorICAgIHN3aXRjaCAoa2V5Q29kZSkgeworICAgICAgICBj
YXNlIGtLZXlDb2RlQ2xlYXI6CisgICAgICAgICAgICByZXR1cm4gIkNsZWFyIjsKKyAgICAgICAg
Y2FzZSBrS2V5Q29kZU5ld2xpbmU6CisgICAgICAgIGNhc2Uga0tleUNvZGVEcGFkQ2VudGVyOgor
ICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7CisgICAgICAgIGNhc2Uga0tleUNvZGVIb21lOgor
ICAgICAgICAgICAgcmV0dXJuICJIb21lIjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWREb3du
OgorICAgICAgICAgICAgcmV0dXJuICJEb3duIjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURwYWRM
ZWZ0OgorICAgICAgICAgICAgcmV0dXJuICJMZWZ0IjsKKyAgICAgICAgY2FzZSBrS2V5Q29kZURw
YWRSaWdodDoKKyAgICAgICAgICAgIHJldHVybiAiUmlnaHQiOworICAgICAgICBjYXNlIGtLZXlD
b2RlRHBhZFVwOgorICAgICAgICAgICAgcmV0dXJuICJVcCI7CisgICAgICAgIC8vIFN0YW5kYXJk
IHNheXMgdGhhdCBERUwgYmVjb21lcyBVKzAwMDA3Ri4KKyAgICAgICAgY2FzZSBrS2V5Q29kZURl
bDoKKyAgICAgICAgICAgIHJldHVybiAiVSswMDAwN0YiOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgY2hhciB1cHBlclsxNl07CisgICAgICAgICAgICBzcHJpbnRmKHVwcGVyLCAiVSsl
MDZYIiwgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChrZXlDb2RlKSk7CisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHVwcGVyKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHNp
bmdsZUNoYXJhY3RlclN0cmluZyhVQ2hhcjMyIGMpIAoreworICAgIGlmICghYykKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIGlmIChjID4gMHhmZmZmKSB7CisgICAgICAgIFVDaGFyIGxl
YWQgPSBVMTZfTEVBRChjKTsKKyAgICAgICAgVUNoYXIgdHJhaWwgPSBVMTZfVFJBSUwoYyk7Cisg
ICAgICAgIFVDaGFyIHV0ZjE2WzJdID0ge2xlYWQsIHRyYWlsfTsKKyAgICAgICAgcmV0dXJuIFN0
cmluZyh1dGYxNiwgMik7CisgICAgfQorICAgIFVDaGFyIG4gPSAoVUNoYXIpYzsKKyAgICByZXR1
cm4gU3RyaW5nKCZuLCAxKTsKK30KKworUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQoaW50IGtleUNvZGUsIFVDaGFyMzIgdW5pY2hhciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgdHlwZSwgaW50IHJlcGVhdENvdW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZXJL
ZXkgbW9kcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV90ZXh0KHNpbmdsZUNoYXJhY3Rl
clN0cmluZyh1bmljaGFyKSkKKyAgICAsIG1fdW5tb2RpZmllZFRleHQoc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKHVuaWNoYXIpKQorICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50aWZpZXJGb3JB
bmRyb2lkS2V5Q29kZShrZXlDb2RlKSkKKyAgICAsIG1fYXV0b1JlcGVhdChyZXBlYXRDb3VudCA+
IDApCisgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzS2V5Q29kZUZvcktleUV2
ZW50KGtleUNvZGUpKQorICAgICwgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZShrZXlDb2RlKQorICAg
ICwgbV9pc0tleXBhZChmYWxzZSkKKyAgICAsIG1fc2hpZnRLZXkoKG1vZHMgJiBTaGlmdEtleSkp
CisgICAgLCBtX2N0cmxLZXkoKG1vZHMgJiBDdHJsS2V5KSkKKyAgICAsIG1fYWx0S2V5KChtb2Rz
ICYgQWx0S2V5KSkKKyAgICAsIG1fbWV0YUtleSgobW9kcyAmIE1ldGFLZXkpKQorICAgIC8vIGFk
ZGVkIGZvciBhbmRyb2lkCisgICAgLCBtX3JlcGVhdENvdW50KHJlcGVhdENvdW50KQorICAgICwg
bV91bmljaGFyKHVuaWNoYXIpCit7CisgICAgLy8gQ29waWVkIGZyb20gdGhlIG1hYyBwb3J0Cisg
ICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09ICdccicpIHsKKyAgICAgICAgbV90ZXh0
ID0gIlxyIjsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJcciI7CisgICAgfQorCisgICAg
aWYgKG1fdGV4dCA9PSAiXHg3RiIpCisgICAgICAgIG1fdGV4dCA9ICJceDgiOworICAgIGlmICht
X3VubW9kaWZpZWRUZXh0ID09ICJceDdGIikKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9ICJc
eDgiOworCisgICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09IDkpIHsKKyAgICAgICAg
bV90ZXh0ID0gIlx4OSI7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSAiXHg5IjsKKyAgICB9
Cit9CisKK2Jvb2wgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBl
LCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCit7CisgICAgLy8gQ29waWVkIHdpdGgg
bW9kaWZpY2F0aW9uIGZyb20gdGhlIG1hYyBwb3J0LgorICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
RG93bik7CisgICAgQVNTRVJUKHR5cGUgPT0gUmF3S2V5RG93biB8fCB0eXBlID09IENoYXIpOwor
ICAgIG1fdHlwZSA9IHR5cGU7CisgICAgaWYgKGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICh0eXBlID09IFJhd0tleURvd24pIHsKKyAgICAgICAg
bV90ZXh0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKKyAgICAg
ICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSAwOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleWJvYXJkQ29kZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvS2V5Ym9hcmRDb2Rlcy5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0tleWJvYXJkQ29kZXMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSwg
VGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBLZXlib2FyZENvZGVzX0gKKyNkZWZpbmUgS2V5Ym9hcmRD
b2Rlc19ICisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVktfTEJVVFRPTiAoMDEpIExlZnQg
bW91c2UgYnV0dG9uCisvLyBWS19SQlVUVE9OICgwMikgUmlnaHQgbW91c2UgYnV0dG9uCisvLyBW
S19DQU5DRUwgKDAzKSBDb250cm9sLWJyZWFrIHByb2Nlc3NpbmcKKy8vIFZLX01CVVRUT04gKDA0
KSBNaWRkbGUgbW91c2UgYnV0dG9uICh0aHJlZS1idXR0b24gbW91c2UpCisvLyBWS19YQlVUVE9O
MSAoMDUpCisvLyBWS19YQlVUVE9OMiAoMDYpCisKKy8vIFZLX0JBQ0sgKDA4KSBCQUNLU1BBQ0Ug
a2V5Citjb25zdCBpbnQgVktfQkFDSyA9IDB4MDg7CisKKy8vIFZLX1RBQiAoMDkpIFRBQiBrZXkK
K2NvbnN0IGludCBWS19UQUIgPSAweDA5OworCisvLyBWS19DTEVBUiAoMEMpIENMRUFSIGtleQor
Y29uc3QgaW50IFZLX0NMRUFSID0gMHgwQzsKKworLy8gVktfUkVUVVJOICgwRCkKK2NvbnN0IGlu
dCBWS19SRVRVUk4gPSAweDBEOworCisvLyBWS19TSElGVCAoMTApIFNISUZUIGtleQorY29uc3Qg
aW50IFZLX1NISUZUID0gMHgxMDsKKworLy8gVktfQ09OVFJPTCAoMTEpIENUUkwga2V5Citjb25z
dCBpbnQgVktfQ09OVFJPTCA9IDB4MTE7CisKKy8vIFZLX01FTlUgKDEyKSBBTFQga2V5Citjb25z
dCBpbnQgVktfTUVOVSA9IDB4MTI7CisKKy8vIFZLX1BBVVNFICgxMykgUEFVU0Uga2V5Citjb25z
dCBpbnQgVktfUEFVU0UgPSAweDEzOworCisvLyBWS19DQVBJVEFMICgxNCkgQ0FQUyBMT0NLIGtl
eQorY29uc3QgaW50IFZLX0NBUElUQUwgPSAweDE0OworCisvLyBWS19LQU5BICgxNSkgSW5wdXQg
TWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKK2NvbnN0IGludCBWS19LQU5BID0gMHgxNTsK
KworLy8gVktfSEFOR1VFTCAoMTUpIElNRSBIYW5ndWVsIG1vZGUgKG1haW50YWluZWQgZm9yIGNv
bXBhdGliaWxpdHk7IHVzZSBWS19IQU5HVUwpCisvLyBWS19IQU5HVUwgKDE1KSBJTUUgSGFuZ3Vs
IG1vZGUKK2NvbnN0IGludCBWS19IQU5HVUwgPSAweDE1OworCisvLyBWS19KVU5KQSAoMTcpIElN
RSBKdW5qYSBtb2RlCitjb25zdCBpbnQgVktfSlVOSkEgPSAweDE3OworCisvLyBWS19GSU5BTCAo
MTgpIElNRSBmaW5hbCBtb2RlCitjb25zdCBpbnQgVktfRklOQUwgPSAweDE4OworCisvLyBWS19I
QU5KQSAoMTkpIElNRSBIYW5qYSBtb2RlCitjb25zdCBpbnQgVktfSEFOSkEgPSAweDE5OworCisv
LyBWS19LQU5KSSAoMTkpIElNRSBLYW5qaSBtb2RlCitjb25zdCBpbnQgVktfS0FOSkkgPSAweDE5
OworCisvLyBWS19FU0NBUEUgKDFCKSBFU0Mga2V5Citjb25zdCBpbnQgVktfRVNDQVBFID0gMHgx
QjsKKworLy8gVktfQ09OVkVSVCAoMUMpIElNRSBjb252ZXJ0Citjb25zdCBpbnQgVktfQ09OVkVS
VCA9IDB4MUM7CisKKy8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29udmVydAorY29uc3Qg
aW50IFZLX05PTkNPTlZFUlQgPSAweDFEOworCisvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0
Citjb25zdCBpbnQgVktfQUNDRVBUID0gMHgxRTsKKworLy8gVktfTU9ERUNIQU5HRSAoMUYpIElN
RSBtb2RlIGNoYW5nZSByZXF1ZXN0Citjb25zdCBpbnQgVktfTU9ERUNIQU5HRSA9IDB4MUY7CisK
Ky8vIFZLX1NQQUNFICgyMCkgU1BBQ0VCQVIKK2NvbnN0IGludCBWS19TUEFDRSA9IDB4MjA7CisK
Ky8vIFZLX1BSSU9SICgyMSkgUEFHRSBVUCBrZXkKK2NvbnN0IGludCBWS19QUklPUiA9IDB4MjE7
CisKKy8vIFZLX05FWFQgKDIyKSBQQUdFIERPV04ga2V5Citjb25zdCBpbnQgVktfTkVYVCA9IDB4
MjI7CisKKy8vIFZLX0VORCAoMjMpIEVORCBrZXkKK2NvbnN0IGludCBWS19FTkQgPSAweDIzOwor
CisvLyBWS19IT01FICgyNCkgSE9NRSBrZXkKK2NvbnN0IGludCBWS19IT01FID0gMHgyNDsKKwor
Ly8gVktfTEVGVCAoMjUpIExFRlQgQVJST1cga2V5Citjb25zdCBpbnQgVktfTEVGVCA9IDB4MjU7
CisKKy8vIFZLX1VQICgyNikgVVAgQVJST1cga2V5Citjb25zdCBpbnQgVktfVVAgPSAweDI2Owor
CisvLyBWS19SSUdIVCAoMjcpIFJJR0hUIEFSUk9XIGtleQorY29uc3QgaW50IFZLX1JJR0hUID0g
MHgyNzsKKworLy8gVktfRE9XTiAoMjgpIERPV04gQVJST1cga2V5Citjb25zdCBpbnQgVktfRE9X
TiA9IDB4Mjg7CisKKy8vIFZLX1NFTEVDVCAoMjkpIFNFTEVDVCBrZXkKK2NvbnN0IGludCBWS19T
RUxFQ1QgPSAweDI5OworCisvLyBWS19QUklOVCAoMkEpIFBSSU5UIGtleQorY29uc3QgaW50IFZL
X1BSSU5UID0gMHgyQTsKKworLy8gVktfRVhFQ1VURSAoMkIpIEVYRUNVVEUga2V5Citjb25zdCBp
bnQgVktfRVhFQ1VURSA9IDB4MkI7CisKKy8vIFZLX1NOQVBTSE9UICgyQykgUFJJTlQgU0NSRUVO
IGtleQorY29uc3QgaW50IFZLX1NOQVBTSE9UID0gMHgyQzsKKworLy8gVktfSU5TRVJUICgyRCkg
SU5TIGtleQorY29uc3QgaW50IFZLX0lOU0VSVCA9IDB4MkQ7CisKKy8vIFZLX0RFTEVURSAoMkUp
IERFTCBrZXkKK2NvbnN0IGludCBWS19ERUxFVEUgPSAweDJFOworCisvLyBWS19IRUxQICgyRikg
SEVMUCBrZXkKK2NvbnN0IGludCBWS19IRUxQID0gMHgyRjsKKworLy8gKDMwKSAwIGtleQorY29u
c3QgaW50IFZLXzAgPSAweDMwOworCisvLyAoMzEpIDEga2V5Citjb25zdCBpbnQgVktfMSA9IDB4
MzE7CisKKy8vICgzMikgMiBrZXkKK2NvbnN0IGludCBWS18yID0gMHgzMjsKKworLy8gKDMzKSAz
IGtleQorY29uc3QgaW50IFZLXzMgPSAweDMzOworCisvLyAoMzQpIDQga2V5Citjb25zdCBpbnQg
VktfNCA9IDB4MzQ7CisKKy8vICgzNSkgNSBrZXk7CisKK2NvbnN0IGludCBWS181ID0gMHgzNTsK
KworLy8gKDM2KSA2IGtleQorY29uc3QgaW50IFZLXzYgPSAweDM2OworCisvLyAoMzcpIDcga2V5
Citjb25zdCBpbnQgVktfNyA9IDB4Mzc7CisKKy8vICgzOCkgOCBrZXkKK2NvbnN0IGludCBWS184
ID0gMHgzODsKKworLy8gKDM5KSA5IGtleQorY29uc3QgaW50IFZLXzkgPSAweDM5OworCisvLyAo
NDEpIEEga2V5Citjb25zdCBpbnQgVktfQSA9IDB4NDE7CisKKy8vICg0MikgQiBrZXkKK2NvbnN0
IGludCBWS19CID0gMHg0MjsKKworLy8gKDQzKSBDIGtleQorY29uc3QgaW50IFZLX0MgPSAweDQz
OworCisvLyAoNDQpIEQga2V5Citjb25zdCBpbnQgVktfRCA9IDB4NDQ7CisKKy8vICg0NSkgRSBr
ZXkKK2NvbnN0IGludCBWS19FID0gMHg0NTsKKworLy8gKDQ2KSBGIGtleQorY29uc3QgaW50IFZL
X0YgPSAweDQ2OworCisvLyAoNDcpIEcga2V5Citjb25zdCBpbnQgVktfRyA9IDB4NDc7CisKKy8v
ICg0OCkgSCBrZXkKK2NvbnN0IGludCBWS19IID0gMHg0ODsKKworLy8gKDQ5KSBJIGtleQorY29u
c3QgaW50IFZLX0kgPSAweDQ5OworCisvLyAoNEEpIEoga2V5Citjb25zdCBpbnQgVktfSiA9IDB4
NEE7CisKKy8vICg0QikgSyBrZXkKK2NvbnN0IGludCBWS19LID0gMHg0QjsKKworLy8gKDRDKSBM
IGtleQorY29uc3QgaW50IFZLX0wgPSAweDRDOworCisvLyAoNEQpIE0ga2V5Citjb25zdCBpbnQg
VktfTSA9IDB4NEQ7CisKKy8vICg0RSkgTiBrZXkKK2NvbnN0IGludCBWS19OID0gMHg0RTsKKwor
Ly8gKDRGKSBPIGtleQorY29uc3QgaW50IFZLX08gPSAweDRGOworCisvLyAoNTApIFAga2V5Citj
b25zdCBpbnQgVktfUCA9IDB4NTA7CisKKy8vICg1MSkgUSBrZXkKK2NvbnN0IGludCBWS19RID0g
MHg1MTsKKworLy8gKDUyKSBSIGtleQorY29uc3QgaW50IFZLX1IgPSAweDUyOworCisvLyAoNTMp
IFMga2V5Citjb25zdCBpbnQgVktfUyA9IDB4NTM7CisKKy8vICg1NCkgVCBrZXkKK2NvbnN0IGlu
dCBWS19UID0gMHg1NDsKKworLy8gKDU1KSBVIGtleQorY29uc3QgaW50IFZLX1UgPSAweDU1Owor
CisvLyAoNTYpIFYga2V5Citjb25zdCBpbnQgVktfViA9IDB4NTY7CisKKy8vICg1NykgVyBrZXkK
K2NvbnN0IGludCBWS19XID0gMHg1NzsKKworLy8gKDU4KSBYIGtleQorY29uc3QgaW50IFZLX1gg
PSAweDU4OworCisvLyAoNTkpIFkga2V5Citjb25zdCBpbnQgVktfWSA9IDB4NTk7CisKKy8vICg1
QSkgWiBrZXkKK2NvbnN0IGludCBWS19aID0gMHg1QTsKKworLy8gVktfTFdJTiAoNUIpIExlZnQg
V2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtleWJvYXJkKQorY29uc3QgaW50IFZLX0xX
SU4gPSAweDVCOworCisvLyBWS19SV0lOICg1QykgUmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwg
a2V5Ym9hcmQpCitjb25zdCBpbnQgVktfUldJTiA9IDB4NUM7CisKKy8vIFZLX0FQUFMgKDVEKSBB
cHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQorY29uc3QgaW50IFZLX0FQUFMgPSAw
eDVEOworCisvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorY29uc3QgaW50IFZL
X1NMRUVQID0gMHg1RjsKKworLy8gVktfTlVNUEFEMCAoNjApIE51bWVyaWMga2V5cGFkIDAga2V5
Citjb25zdCBpbnQgVktfTlVNUEFEMCA9IDB4NjA7CisKKy8vIFZLX05VTVBBRDEgKDYxKSBOdW1l
cmljIGtleXBhZCAxIGtleQorY29uc3QgaW50IFZLX05VTVBBRDEgPSAweDYxOworCisvLyBWS19O
VU1QQUQyICg2MikgTnVtZXJpYyBrZXlwYWQgMiBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQyID0g
MHg2MjsKKworLy8gVktfTlVNUEFEMyAoNjMpIE51bWVyaWMga2V5cGFkIDMga2V5Citjb25zdCBp
bnQgVktfTlVNUEFEMyA9IDB4NjM7CisKKy8vIFZLX05VTVBBRDQgKDY0KSBOdW1lcmljIGtleXBh
ZCA0IGtleQorY29uc3QgaW50IFZLX05VTVBBRDQgPSAweDY0OworCisvLyBWS19OVU1QQUQ1ICg2
NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ1ID0gMHg2NTsKKwor
Ly8gVktfTlVNUEFENiAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Citjb25zdCBpbnQgVktfTlVN
UEFENiA9IDB4NjY7CisKKy8vIFZLX05VTVBBRDcgKDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQor
Y29uc3QgaW50IFZLX05VTVBBRDcgPSAweDY3OworCisvLyBWS19OVU1QQUQ4ICg2OCkgTnVtZXJp
YyBrZXlwYWQgOCBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ4ID0gMHg2ODsKKworLy8gVktfTlVN
UEFEOSAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5Citjb25zdCBpbnQgVktfTlVNUEFEOSA9IDB4
Njk7CisKKy8vIFZLX01VTFRJUExZICg2QSkgTXVsdGlwbHkga2V5Citjb25zdCBpbnQgVktfTVVM
VElQTFkgPSAweDZBOworCisvLyBWS19BREQgKDZCKSBBZGQga2V5Citjb25zdCBpbnQgVktfQURE
ID0gMHg2QjsKKworLy8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQorY29uc3QgaW50
IFZLX1NFUEFSQVRPUiA9IDB4NkM7CisKKy8vIFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qga2V5
Citjb25zdCBpbnQgVktfU1VCVFJBQ1QgPSAweDZEOworCisvLyBWS19ERUNJTUFMICg2RSkgRGVj
aW1hbCBrZXkKK2NvbnN0IGludCBWS19ERUNJTUFMID0gMHg2RTsKKworLy8gVktfRElWSURFICg2
RikgRGl2aWRlIGtleQorY29uc3QgaW50IFZLX0RJVklERSA9IDB4NkY7CisKKy8vIFZLX0YxICg3
MCkgRjEga2V5Citjb25zdCBpbnQgVktfRjEgPSAweDcwOworCisvLyBWS19GMiAoNzEpIEYyIGtl
eQorY29uc3QgaW50IFZLX0YyID0gMHg3MTsKKworLy8gVktfRjMgKDcyKSBGMyBrZXkKK2NvbnN0
IGludCBWS19GMyA9IDB4NzI7CisKKy8vIFZLX0Y0ICg3MykgRjQga2V5Citjb25zdCBpbnQgVktf
RjQgPSAweDczOworCisvLyBWS19GNSAoNzQpIEY1IGtleQorY29uc3QgaW50IFZLX0Y1ID0gMHg3
NDsKKworLy8gVktfRjYgKDc1KSBGNiBrZXkKK2NvbnN0IGludCBWS19GNiA9IDB4NzU7CisKKy8v
IFZLX0Y3ICg3NikgRjcga2V5Citjb25zdCBpbnQgVktfRjcgPSAweDc2OworCisvLyBWS19GOCAo
NzcpIEY4IGtleQorY29uc3QgaW50IFZLX0Y4ID0gMHg3NzsKKworLy8gVktfRjkgKDc4KSBGOSBr
ZXkKK2NvbnN0IGludCBWS19GOSA9IDB4Nzg7CisKKy8vIFZLX0YxMCAoNzkpIEYxMCBrZXkKK2Nv
bnN0IGludCBWS19GMTAgPSAweDc5OworCisvLyBWS19GMTEgKDdBKSBGMTEga2V5Citjb25zdCBp
bnQgVktfRjExID0gMHg3QTsKKworLy8gVktfRjEyICg3QikgRjEyIGtleQorY29uc3QgaW50IFZL
X0YxMiA9IDB4N0I7CisKKy8vIFZLX0YxMyAoN0MpIEYxMyBrZXkKK2NvbnN0IGludCBWS19GMTMg
PSAweDdDOworCisvLyBWS19GMTQgKDdEKSBGMTQga2V5Citjb25zdCBpbnQgVktfRjE0ID0gMHg3
RDsKKworLy8gVktfRjE1ICg3RSkgRjE1IGtleQorY29uc3QgaW50IFZLX0YxNSA9IDB4N0U7CisK
Ky8vIFZLX0YxNiAoN0YpIEYxNiBrZXkKK2NvbnN0IGludCBWS19GMTYgPSAweDdGOworCisvLyBW
S19GMTcgKDgwSCkgRjE3IGtleQorY29uc3QgaW50IFZLX0YxNyA9IDB4ODA7CisKKy8vIFZLX0Yx
OCAoODFIKSBGMTgga2V5Citjb25zdCBpbnQgVktfRjE4ID0gMHg4MTsKKworLy8gVktfRjE5ICg4
MkgpIEYxOSBrZXkKK2NvbnN0IGludCBWS19GMTkgPSAweDgyOworCisvLyBWS19GMjAgKDgzSCkg
RjIwIGtleQorY29uc3QgaW50IFZLX0YyMCA9IDB4ODM7CisKKy8vIFZLX0YyMSAoODRIKSBGMjEg
a2V5Citjb25zdCBpbnQgVktfRjIxID0gMHg4NDsKKworLy8gVktfRjIyICg4NUgpIEYyMiBrZXkK
K2NvbnN0IGludCBWS19GMjIgPSAweDg1OworCisvLyBWS19GMjMgKDg2SCkgRjIzIGtleQorY29u
c3QgaW50IFZLX0YyMyA9IDB4ODY7CisKKy8vIFZLX0YyNCAoODdIKSBGMjQga2V5Citjb25zdCBp
bnQgVktfRjI0ID0gMHg4NzsKKworLy8gVktfTlVNTE9DSyAoOTApIE5VTSBMT0NLIGtleQorY29u
c3QgaW50IFZLX05VTUxPQ0sgPSAweDkwOworCisvLyBWS19TQ1JPTEwgKDkxKSBTQ1JPTEwgTE9D
SyBrZXkKK2NvbnN0IGludCBWS19TQ1JPTEwgPSAweDkxOworCisvLyBWS19MU0hJRlQgKEEwKSBM
ZWZ0IFNISUZUIGtleQorY29uc3QgaW50IFZLX0xTSElGVCA9IDB4QTA7CisKKy8vIFZLX1JTSElG
VCAoQTEpIFJpZ2h0IFNISUZUIGtleQorY29uc3QgaW50IFZLX1JTSElGVCA9IDB4QTE7CisKKy8v
IFZLX0xDT05UUk9MIChBMikgTGVmdCBDT05UUk9MIGtleQorY29uc3QgaW50IFZLX0xDT05UUk9M
ID0gMHhBMjsKKworLy8gVktfUkNPTlRST0wgKEEzKSBSaWdodCBDT05UUk9MIGtleQorY29uc3Qg
aW50IFZLX1JDT05UUk9MID0gMHhBMzsKKworLy8gVktfTE1FTlUgKEE0KSBMZWZ0IE1FTlUga2V5
Citjb25zdCBpbnQgVktfTE1FTlUgPSAweEE0OworCisvLyBWS19STUVOVSAoQTUpIFJpZ2h0IE1F
TlUga2V5Citjb25zdCBpbnQgVktfUk1FTlUgPSAweEE1OworCisvLyBWS19CUk9XU0VSX0JBQ0sg
KEE2KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgQmFjayBrZXkKK2NvbnN0IGludCBWS19CUk9X
U0VSX0JBQ0sgPSAweEE2OworCisvLyBWS19CUk9XU0VSX0ZPUldBUkQgKEE3KSBXaW5kb3dzIDIw
MDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX0ZPUldBUkQg
PSAweEE3OworCisvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4KSBXaW5kb3dzIDIwMDAvWFA6IEJy
b3dzZXIgUmVmcmVzaCBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX1JFRlJFU0ggPSAweEE4Owor
CisvLyBWS19CUk9XU0VSX1NUT1AgKEE5KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RvcCBr
ZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX1NUT1AgPSAweEE5OworCisvLyBWS19CUk9XU0VSX1NF
QVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5Citjb25zdCBpbnQg
VktfQlJPV1NFUl9TRUFSQ0ggPSAweEFBOworCisvLyBWS19CUk9XU0VSX0ZBVk9SSVRFUyAoQUIp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMga2V5Citjb25zdCBpbnQgVktfQlJP
V1NFUl9GQVZPUklURVMgPSAweEFCOworCisvLyBWS19CUk9XU0VSX0hPTUUgKEFDKSBXaW5kb3dz
IDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhvbWUga2V5Citjb25zdCBpbnQgVktfQlJPV1NF
Ul9IT01FID0gMHhBQzsKKworLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dzIDIwMDAvWFA6
IFZvbHVtZSBNdXRlIGtleQorY29uc3QgaW50IFZLX1ZPTFVNRV9NVVRFID0gMHhBRDsKKworLy8g
VktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBEb3duIGtleQorY29u
c3QgaW50IFZLX1ZPTFVNRV9ET1dOID0gMHhBRTsKKworLy8gVktfVk9MVU1FX1VQIChBRikgV2lu
ZG93cyAyMDAwL1hQOiBWb2x1bWUgVXAga2V5Citjb25zdCBpbnQgVktfVk9MVU1FX1VQID0gMHhB
RjsKKworLy8gVktfTUVESUFfTkVYVF9UUkFDSyAoQjApIFdpbmRvd3MgMjAwMC9YUDogTmV4dCBU
cmFjayBrZXkKK2NvbnN0IGludCBWS19NRURJQV9ORVhUX1RSQUNLID0gMHhCMDsKKworLy8gVktf
TUVESUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMgVHJhY2sga2V5
Citjb25zdCBpbnQgVktfTUVESUFfUFJFVl9UUkFDSyA9IDB4QjE7CisKKy8vIFZLX01FRElBX1NU
T1AgKEIyKSBXaW5kb3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5Citjb25zdCBpbnQgVktfTUVE
SUFfU1RPUCA9IDB4QjI7CisKKy8vIFZLX01FRElBX1BMQVlfUEFVU0UgKEIzKSBXaW5kb3dzIDIw
MDAvWFA6IFBsYXkvUGF1c2UgTWVkaWEga2V5Citjb25zdCBpbnQgVktfTUVESUFfUExBWV9QQVVT
RSA9IDB4QjM7CisKKy8vIFZLX0xBVU5DSF9NQUlMIChCNCkgV2luZG93cyAyMDAwL1hQOiBTdGFy
dCBNYWlsIGtleQorY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9NQUlMID0gMHhCNDsKKworLy8g
VktfTEFVTkNIX01FRElBX1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlh
IGtleQorY29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QgPSAweEI1OworCisv
LyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24g
MSBrZXkKK2NvbnN0IGludCBWS19NRURJQV9MQVVOQ0hfQVBQMSA9IDB4QjY7CisKKy8vIFZLX0xB
VU5DSF9BUFAyIChCNykgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAyIGtleQor
Y29uc3QgaW50IFZLX01FRElBX0xBVU5DSF9BUFAyID0gMHhCNzsKKworLy8gVktfT0VNXzEgKEJB
KSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJv
YXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAn
OzonIGtleQorY29uc3QgaW50IFZLX09FTV8xID0gMHhCQTsKKworLy8gVktfT0VNX1BMVVMgKEJC
KSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5Citj
b25zdCBpbnQgVktfT0VNX1BMVVMgPSAweEJCOworCisvLyBWS19PRU1fQ09NTUEgKEJDKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLCcga2V5Citjb25zdCBp
bnQgVktfT0VNX0NPTU1BID0gMHhCQzsKKworLy8gVktfT0VNX01JTlVTIChCRCkgV2luZG93cyAy
MDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy0nIGtleQorY29uc3QgaW50IFZL
X09FTV9NSU5VUyA9IDB4QkQ7CisKKy8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5kb3dzIDIwMDAv
WFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5Citjb25zdCBpbnQgVktfT0VN
X1BFUklPRCA9IDB4QkU7CisKKy8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2VsbGFuZW91
cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBG
b3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKK2NvbnN0IGludCBWS19P
RU1fMiA9IDB4QkY7CisKKy8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBj
aGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3Ig
dGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKK2NvbnN0IGludCBWS19PRU1f
MyA9IDB4QzA7CisKKy8vIFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFy
YWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhl
IFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKK2NvbnN0IGludCBWS19PRU1fNCA9
IDB4REI7CisKKy8vIFZLX09FTV81IChEQykgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0
ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVT
IHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKK2NvbnN0IGludCBWS19PRU1fNSA9IDB4
REM7CisKKy8vIFZLX09FTV82IChERCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0
YW5kYXJkIGtleWJvYXJkLCB0aGUgJ119JyBrZXkKK2NvbnN0IGludCBWS19PRU1fNiA9IDB4REQ7
CisKKy8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBp
dCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5k
YXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtleQorY29uc3Qg
aW50IFZLX09FTV83ID0gMHhERTsKKworLy8gVktfT0VNXzggKERGKSBVc2VkIGZvciBtaXNjZWxs
YW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgorY29uc3QgaW50IFZL
X09FTV84ID0gMHhERjsKKworLy8gVktfT0VNXzEwMiAoRTIpIFdpbmRvd3MgMjAwMC9YUDogRWl0
aGVyIHRoZSBhbmdsZSBicmFja2V0IGtleSBvciB0aGUgYmFja3NsYXNoIGtleSBvbiB0aGUgUlQg
MTAyLWtleSBrZXlib2FyZAorY29uc3QgaW50IFZLX09FTV8xMDIgPSAweEUyOworCisvLyBWS19Q
Uk9DRVNTS0VZIChFNSkgV2luZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3Mg
MjAwMC9YUDogSU1FIFBST0NFU1Mga2V5Citjb25zdCBpbnQgVktfUFJPQ0VTU0tFWSA9IDB4RTU7
CisKKy8vIFZLX1BBQ0tFVCAoRTcpIFdpbmRvd3MgMjAwMC9YUDogVXNlZCB0byBwYXNzIFVuaWNv
ZGUgY2hhcmFjdGVycyBhcyBpZiB0aGV5IHdlcmUga2V5c3Ryb2tlcy4gVGhlIFZLX1BBQ0tFVCBr
ZXkgaXMgdGhlIGxvdyB3b3JkIG9mIGEgMzItYml0IFZpcnR1YWwgS2V5IHZhbHVlIHVzZWQgZm9y
IG5vbi1rZXlib2FyZCBpbnB1dCBtZXRob2RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJl
bWFyayBpbiBLRVlCRElOUFVULFNlbmRJbnB1dCwgV01fS0VZRE9XTiwgYW5kIFdNX0tFWVVQCitj
b25zdCBpbnQgVktfUEFDS0VUID0gMHhFNzsKKworLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5Citj
b25zdCBpbnQgVktfQVRUTiA9IDB4RjY7CisKKy8vIFZLX0NSU0VMIChGNykgQ3JTZWwga2V5Citj
b25zdCBpbnQgVktfQ1JTRUwgPSAweEY3OworCisvLyBWS19FWFNFTCAoRjgpIEV4U2VsIGtleQor
Y29uc3QgaW50IFZLX0VYU0VMID0gMHhGODsKKworLy8gVktfRVJFT0YgKEY5KSBFcmFzZSBFT0Yg
a2V5Citjb25zdCBpbnQgVktfRVJFT0YgPSAweEY5OworCisvLyBWS19QTEFZIChGQSkgUGxheSBr
ZXkKK2NvbnN0IGludCBWS19QTEFZID0gMHhGQTsKKworLy8gVktfWk9PTSAoRkIpIFpvb20ga2V5
Citjb25zdCBpbnQgVktfWk9PTSA9IDB4RkI7CisKKy8vIFZLX05PTkFNRSAoRkMpIFJlc2VydmVk
IGZvciBmdXR1cmUgdXNlCitjb25zdCBpbnQgVktfTk9OQU1FID0gMHhGQzsKKworLy8gVktfUEEx
IChGRCkgUEExIGtleQorY29uc3QgaW50IFZLX1BBMSA9IDB4RkQ7CisKKy8vIFZLX09FTV9DTEVB
UiAoRkUpIENsZWFyIGtleQorY29uc3QgaW50IFZLX09FTV9DTEVBUiA9IDB4RkU7CisKK2NvbnN0
IGludCBWS19VTktOT1dOID0gMDsKKworfQorCisjZW5kaWYgLy8gS2V5Ym9hcmRDb2Rlc19oCg==
</data>
<flag name="review"
          id="15828"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>