<?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>12250</bug_id>
          
          <creation_ts>2007-01-13 03:35:06 -0800</creation_ts>
          <short_desc>No support for &quot;control selections&quot; to select or drag images in editable content (affects TinyMCE, FCKEditor and Vox)</short_desc>
          <delta_ts>2019-05-02 16:25:27 -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>HTML Editing</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>79380</dependson>
    
    <dependson>94077</dependson>
          <blocked>6627</blocked>
    
    <blocked>7154</blocked>
    
    <blocked>15322</blocked>
    
    <blocked>9915</blocked>
    
    <blocked>10165</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>webkit</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>alexander</cc>
    
    <cc>alexander.steitz</cc>
    
    <cc>alexbk66</cc>
    
    <cc>ap</cc>
    
    <cc>ayg</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eltapiumaza</cc>
    
    <cc>eoconnor</cc>
    
    <cc>flokli</cc>
    
    <cc>healthyelijah</cc>
    
    <cc>hemaravind1</cc>
    
    <cc>jubal-webkit-20111123</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>kaoskaoskaoskaos</cc>
    
    <cc>kcviqmwfnowfnl</cc>
    
    <cc>kojii</cc>
    
    <cc>leviw</cc>
    
    <cc>michael.vm</cc>
    
    <cc>mifenton</cc>
    
    <cc>mihai.sucan</cc>
    
    <cc>morrita</cc>
    
    <cc>nate</cc>
    
    <cc>philip</cc>
    
    <cc>qazaq</cc>
    
    <cc>rniwa</cc>
    
    <cc>shinyak</cc>
    
    <cc>shixish</cc>
    
    <cc>sigurd</cc>
    
    <cc>spam</cc>
    
    <cc>styu007</cc>
    
    <cc>typo3</cc>
    
    <cc>vidar</cc>
    
    <cc>vihiwemel</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>wildcard_swe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>35237</commentid>
    <comment_count>0</comment_count>
    <who name="">webkit</who>
    <bug_when>2007-01-13 03:35:06 -0800</bug_when>
    <thetext>In an editable document, there are no ways to select objects, like images, form fields and tables. Also, not being able to select them, it is not possible to drag them inside the editor contents and no context menu is also available for the specific objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22328</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2007-02-21 19:07:18 -0800</bug_when>
    <thetext>Retitling.  It is possible to drag and drop any element in an editable region afaik, but doing so is tricky for some elements, like form fields and tables.  The issue here is really that you can&apos;t create control selections around single elements.  Control selections appear in FF and IE when the user clicks on certain elements, like tables, form fields, and images.  The control selection allows the user to easily resize and drag these elements.  We don&apos;t yet support this type of selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22301</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2007-02-21 19:09:59 -0800</bug_when>
    <thetext>*** Bug 7154 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21014</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2007-02-27 18:26:17 -0800</bug_when>
    <thetext>Re-titling as this effects all the editors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19667</commentid>
    <comment_count>4</comment_count>
    <who name="">webkit</who>
    <bug_when>2007-03-10 05:40:48 -0800</bug_when>
    <thetext>I would say that for now it is not important to resize objects, showing the resize handlers. The most important and basic feature is the simple possibility of selecting them. So, a user clicks on it and it gets the selection.

This is what Opera proposes today. They only show a simple border in objects when clicking them. No resize, but it is ok for now.

By not being able to select an image, there is no way to change its properties, which is a very basic feature of a text editor like FCKeditor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67601</commentid>
    <comment_count>5</comment_count>
    <who name="Galen Rhodes">grhodes</who>
    <bug_when>2008-01-18 11:21:23 -0800</bug_when>
    <thetext>This is a problem for our project since the users want to be able to resize images using TinyMCE and for now we&apos;re telling them to use Firefox or Camino and they&apos;re not happy about that.  They want to use Safari and they&apos;re blaming us for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67726</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-01-19 12:01:47 -0800</bug_when>
    <thetext>&lt;rdar://problem/5696409&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75198</commentid>
    <comment_count>7</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2008-03-25 16:08:05 -0700</bug_when>
    <thetext>I&apos;m working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75273</commentid>
    <comment_count>8</comment_count>
      <attachid>20078</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2008-03-26 01:06:11 -0700</bug_when>
    <thetext>Created attachment 20078
first cut</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75366</commentid>
    <comment_count>9</comment_count>
    <who name="Moxiecode Systems">spam</who>
    <bug_when>2008-03-26 15:43:57 -0700</bug_when>
    <thetext>This is really good news. I hope that you guys implement the ability to do the image selection from JS as well. This is currently only possible in IE with their control range type. But it should be possible to check when the focusNode and anchorNode of the Selection object is set to an image element it selects it with some dotted border basically the same thing as selecting it with the mouse. This is not very important but more of a nice to have since it will then be better than most other browsers out there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75429</commentid>
    <comment_count>10</comment_count>
      <attachid>20119</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2008-03-27 00:59:23 -0700</bug_when>
    <thetext>Created attachment 20119
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75430</commentid>
    <comment_count>11</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2008-03-27 01:00:54 -0700</bug_when>
    <thetext>&gt; I hope that you guys implement the ability to do the image selection from JS as 
&gt; well. This is currently only possible in IE with their control range type.

Probably not in the first pass, but I definitely want to do this eventually.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97635</commentid>
    <comment_count>12</comment_count>
    <who name="Sigurd Magnusson">sigurd</who>
    <bug_when>2008-11-04 16:20:50 -0800</bug_when>
    <thetext>Justin - love to see this patch progressed and shipped with Safari 3 or 4 as it is one of the few things that causes major usability reduction in Safari with the SilverStripe open source CMS (http://www.silverstripe.com)

It affects us in this way: http://open.silverstripe.com/ticket/1687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97803</commentid>
    <comment_count>13</comment_count>
    <who name="philip magnusson">philip</who>
    <bug_when>2008-11-06 05:53:16 -0800</bug_when>
    <thetext>This seems to still be an issue for safari as far as I can see - at least with PC-safari combination.  </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113819</commentid>
    <comment_count>14</comment_count>
    <who name="Jubal Kessler">jubal-webkit-20111123</who>
    <bug_when>2009-03-15 06:57:24 -0700</bug_when>
    <thetext>Using Webkit nightly (&quot;41443&quot;) version &quot;530.1+&quot;, OS X 10.5.6.

When using FCKEditor version 2.6.4 (21629), and inserting an image in the textarea, I am unable to afterward select the image object and change its properties.

I have not tried with Safari 4 beta, but given I&apos;m running a recent nightly, I doubt anything has changed.

I notice that this bug was opened 26 months ago, and a patch has been attached, yet the bug still has a status of &quot;NEW&quot;. This is discouraging.

I look forward to a resolution, either with WebKit or with FCKEditor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121224</commentid>
    <comment_count>15</comment_count>
    <who name="Michael B">wildcard_swe</who>
    <bug_when>2009-05-14 00:10:06 -0700</bug_when>
    <thetext>Looking forward to updates on this case. I had to write special code for Safari to be able to select an image and to display handles around it&apos;s edges, enabling users to resize the image.
It solves the problem for now, but is it the right way to go?
Using Safari 4 beta 528.16 on windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146633</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-09-11 10:41:18 -0700</bug_when>
    <thetext>This bug seems to have an unfortunate mismatch between title and content. Is it about control selections, or just about being able to single-click to select an image? The latter has been also reported as bug 29125, and I&apos;m not sure if it should be marked as a duplicate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160254</commentid>
    <comment_count>17</comment_count>
    <who name="Qazaq">qazaq</who>
    <bug_when>2009-11-03 15:58:23 -0800</bug_when>
    <thetext>This &apos;bug&apos; (missing feature) is the main reason why all my clients are advised to use Firefox instead of Safari / Chrome.
Any updates on this subject would be very welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168252</commentid>
    <comment_count>18</comment_count>
    <who name="">kcviqmwfnowfnl</who>
    <bug_when>2009-12-02 20:56:26 -0800</bug_when>
    <thetext>Is anyone still working on this? Is there any plan to fix it?

I am in the same position as many others. I would love to recommend Chrome to people (heck I would like to use it myself), but this one lacking feature stops me from doing so.

This even breaks google docs when you use chrome.

Looking forward to an update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221607</commentid>
    <comment_count>19</comment_count>
    <who name="Qazaq">qazaq</who>
    <bug_when>2010-05-06 04:15:47 -0700</bug_when>
    <thetext>Chrome 5 and still no way of resizing objects. I would be really interested in having this feature added.
Any update on this would be very very welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338132</commentid>
    <comment_count>20</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2011-01-21 10:13:21 -0800</bug_when>
    <thetext>I&apos;m not currently working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358348</commentid>
    <comment_count>21</comment_count>
    <who name="Andrew">shixish</who>
    <bug_when>2011-02-25 19:01:37 -0800</bug_when>
    <thetext>Bump!
This feature would be very nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365908</commentid>
    <comment_count>22</comment_count>
    <who name="alexbk66">alexbk66</who>
    <bug_when>2011-03-11 03:09:09 -0800</bug_when>
    <thetext>I like that it&apos;s assigned to nobody! So there&apos;s no intention to fix the bug?
All my customers are switching to Firefox or IE (even if everybody hate MS) :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378681</commentid>
    <comment_count>23</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-04-04 00:24:47 -0700</bug_when>
    <thetext>There&apos;s a lot of comments on this bug. Just to be clear, the core request here is that WebKit select the element when you click on an image or form control. Stated more generally, clicking on an element with unselectable children should select the element?

For example, the following cases?
&lt;img&gt;
&lt;input&gt;
&lt;textarea&gt;
&lt;div style=&quot;-webkit-user-select:none&quot;&gt;foo&lt;/div&gt;

I&apos;m not sure what the ask is for tables. If you click on a table, presumably we should be putting a text cursor inside the table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378794</commentid>
    <comment_count>24</comment_count>
    <who name="">webkit</who>
    <bug_when>2011-04-04 08:23:10 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Stated more generally, clicking on an element with unselectable children should select the element?

This sounds correct and it&apos;s a good way to define it.

&gt; For example, the following cases?
&gt; &lt;img&gt;
&gt; &lt;input&gt;
&gt; &lt;textarea&gt;
&gt; &lt;div style=&quot;-webkit-user-select:none&quot;&gt;foo&lt;/div&gt;

Correct. I would also add &lt;span contenteditable=false&gt; and the such. Basically, anything that can&apos;t be edited inside.

&gt; I&apos;m not sure what the ask is for tables. If you click on a table, presumably we should be putting a text cursor inside the table.

IE makes it possible to select the table only, by clicking on it&apos;s border. It&apos;s a nice feature. Firefox instead has another nice one, where you can click and drag through table cells to select them. So even cell selection is possible. Those features, while not totally required, are definitely wanted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421913</commentid>
    <comment_count>25</comment_count>
    <who name="Kalle">kaoskaoskaoskaos</who>
    <bug_when>2011-06-16 05:12:15 -0700</bug_when>
    <thetext>Please fix this problem as soon as possible!!!

More and more people are using Chrome/Safari and a lot of our support issues are currently about this single issue.

The only recommendation we can give our customers today is to use Internet Explorer or Firefox instead of Chrome/Safari and that is not a good recommendation, but it is the only one we can give since this issue has not been fixed :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467771</commentid>
    <comment_count>26</comment_count>
    <who name="Vidar Langberget">vidar</who>
    <bug_when>2011-09-15 06:51:42 -0700</bug_when>
    <thetext>Like a lot of the other comments are saying, we are forced to recommend users of our CMS to use non-webkit browsers due to this issue. 

When are you going to fix this critical issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473216</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-09-26 11:10:51 -0700</bug_when>
    <thetext>It seems that bug 29125 tracks selecting images in editable content, and bug 68801 tracks adding resize handles.

I&apos;m not sure if there is anything actionable left in this bug. It appears to only confuse everyone, as people add &quot;met too&quot; comments without clarifying what exactly they need. Should we close this one, and track specific parts separately?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473225</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-26 11:21:12 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; It seems that bug 29125 tracks selecting images in editable content, and bug 68801 tracks adding resize handles.

I don&apos;t think this bug blocks the bug 68801 since control selection doesn&apos;t necessarily provide resizing UI (e.g. Opera). Rather, this bug blocks the bug 68801.

&gt; I&apos;m not sure if there is anything actionable left in this bug. It appears to only confuse everyone, as people add &quot;met too&quot; comments without clarifying what exactly they need. Should we close this one, and track specific parts separately?

I think it&apos;s worth keeping this bug so that people can find it by the keyword &quot;control selection(s)&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473244</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-26 11:39:28 -0700</bug_when>
    <thetext>*** Bug 29125 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497430</commentid>
    <comment_count>30</comment_count>
    <who name="Pablo Mazaeda">eltapiumaza</who>
    <bug_when>2011-11-07 13:36:00 -0800</bug_when>
    <thetext>Please, fix this bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563896</commentid>
    <comment_count>31</comment_count>
    <who name="alexbk66">alexbk66</who>
    <bug_when>2012-02-23 21:13:00 -0800</bug_when>
    <thetext>The problem exists for 5 years now, shocking!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620578</commentid>
    <comment_count>32</comment_count>
    <who name="Elijah Lynn">healthyelijah</who>
    <bug_when>2012-05-10 07:48:16 -0700</bug_when>
    <thetext>Here are three issues that I know of that are waiting for this bug fix/feature request.

http://drupal.org/node/746490 (2010.03.18)
http://drupal.org/node/367655 (2009.02.01)
http://www.tinymce.com/forum/viewtopic.php?pid=71770 (2008.10.29)

Now, there does seem to be a Javascript hack which I will try shortly but I would rather not add bloat to a page if I don&apos;t have to. http://www.editorboost.net/webkitresize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694289</commentid>
    <comment_count>33</comment_count>
      <attachid>158167</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 17:44:17 -0700</bug_when>
    <thetext>Created attachment 158167
Shadow DOM-based approach - WIP prototype 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694296</commentid>
    <comment_count>34</comment_count>
      <attachid>158169</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 17:48:46 -0700</bug_when>
    <thetext>Created attachment 158169
Screenshot

Oops, sorry, you need to modify the patch to use ShadowRoot::AuthorShadowRoot instead of UserAgentShadowRoot because it relies on HTMLImageElement&apos;s native shadow being alive.
The image appears properly when I click for the first time, but it disappears as soon as I move the selection away. It appears that the shadow element doesn&apos;t have the right intrinsic width and height :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694300</commentid>
    <comment_count>35</comment_count>
      <attachid>158170</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 17:53:01 -0700</bug_when>
    <thetext>Created attachment 158170
Screenshot 2 - the image has disappered

This second screenshot shows what happens when I click outside of the image. The image simply disappears :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694361</commentid>
    <comment_count>36</comment_count>
      <attachid>158178</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 18:29:13 -0700</bug_when>
    <thetext>Created attachment 158178
Shadow DOM-based approach - Delete old shadow roots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694431</commentid>
    <comment_count>37</comment_count>
      <attachid>158194</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-13 19:51:23 -0700</bug_when>
    <thetext>Created attachment 158194
Shadow DOM-based approach - prototype 2; just adds resizing corners</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695817</commentid>
    <comment_count>38</comment_count>
      <attachid>158522</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-15 01:17:10 -0700</bug_when>
    <thetext>Created attachment 158522
Shadow DOM based approach - prototype 3 (kinda works)

The image in the shadow DOM doesn&apos;t resize properly due to the bug 94077 but everything else works more or less.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695822</commentid>
    <comment_count>39</comment_count>
      <attachid>158169</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-15 01:22:23 -0700</bug_when>
    <thetext>Comment on attachment 158169
Screenshot

This screenshot is still a good representative of the prototype.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697822</commentid>
    <comment_count>40</comment_count>
      <attachid>158980</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-16 19:26:19 -0700</bug_when>
    <thetext>Created attachment 158980
work in progress 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698031</commentid>
    <comment_count>41</comment_count>
      <attachid>159042</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-17 01:21:47 -0700</bug_when>
    <thetext>Created attachment 159042
work in progress 6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710386</commentid>
    <comment_count>42</comment_count>
    <who name="Nate Haug">nate</who>
    <bug_when>2012-09-02 20:13:56 -0700</bug_when>
    <thetext>@Ryosuke Niwa, really excited to see this being taken on! With Chrome being the new dominant browser this sort of problem with WYSIWYG editors isn&apos;t something I can rationalize away with my clients.

p.s. Looks like we&apos;re almost neighbors! I live nearby in Berkeley. Free beers on me when we meet. :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730038</commentid>
    <comment_count>43</comment_count>
    <who name="Elijah Lynn">healthyelijah</who>
    <bug_when>2012-09-27 17:19:11 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; @Ryosuke Niwa, really excited to see this being taken on! With Chrome being the new dominant browser this sort of problem with WYSIWYG editors isn&apos;t something I can rationalize away with my clients.
&gt; 
&gt; p.s. Looks like we&apos;re almost neighbors! I live nearby in Berkeley. Free beers on me when we meet. :D

For everyone who is finding this via Google and also uses TinyMCE, v3.5.5 has issued a fix for this bug. 

http://www.tinymce.com/forum/viewtopic.php?id=29222</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741878</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-15 02:33:55 -0700</bug_when>
    <thetext>Attachment 159042 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/editing/FrameSelection.cpp:51:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/editing/FrameSelection.cpp:76:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/editing/FrameSelection.cpp:2114:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743113</commentid>
    <comment_count>45</comment_count>
      <attachid>159042</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 06:41:38 -0700</bug_when>
    <thetext>Comment on attachment 159042
work in progress 6

Attachment 159042 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14391155

New failing tests:
editing/pasteboard/drag-selected-image-to-contenteditable.html
fast/forms/range/slider-delete-while-dragging-thumb.html
editing/undo/orphaned-selection-crash-bug32823-2.html
editing/pasteboard/styled-element-markup.html
editing/selection/drag-to-contenteditable-iframe.html
editing/inserting/replace-at-visible-boundary.html
fast/replaced/selection-rect-in-table-cell.html
editing/pasteboard/drag-image-to-contenteditable-in-iframe.html
fast/loader/text-document-wrapping.html
editing/deleting/delete-image-003.html
http/tests/security/drag-drop-same-unique-origin.html
editing/selection/select-missing-image.html
fast/forms/range/slider-mouse-events.html
fast/replaced/selection-rect-transform.html
editing/pasteboard/drag-and-drop-image-contenteditable.html
editing/pasteboard/drag-drop-iframe-refresh-crash.html
editing/pasteboard/drag-image-in-about-blank-frame.html
editing/pasteboard/4989774.html
http/tests/xmlhttprequest/xmlhttprequest-unsafe-redirect.html
editing/deleting/delete-image-004.html
editing/pasteboard/4947130.html
fast/events/drag-selects-image.html
fast/loader/javascript-url-in-object.html
editing/execCommand/remove-format-image.html
editing/execCommand/5080333-2.html
fast/events/standalone-image-drag-to-editable.html
fast/forms/range/slider-onchange-event.html
editing/selection/doubleclick-whitespace-img-crash.html
editing/selection/legal-positions.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1499511</commentid>
    <comment_count>46</comment_count>
    <who name="Alex">alexander</who>
    <bug_when>2019-01-29 06:21:58 -0800</bug_when>
    <thetext>Any news about this? It&apos;s a rather basic feature for any contenteditable editor.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20078</attachid>
            <date>2008-03-26 01:06:11 -0700</date>
            <delta_ts>2008-03-27 00:59:23 -0700</delta_ts>
            <desc>first cut</desc>
            <filename>5696409.txt</filename>
            <type>text/plain</type>
            <size>27116</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMxMzA5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAKKzIwMDgtMDMt
MjYgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5
NjQwOT4gSW1wbGVtZW50IGNvbnRyb2wgc2VsZWN0aW9ucyBmb3IgZWRpdGFibGUgZWxlbWVudHMg
KDEyMjUwKQorICAgICAgICAKKyAgICAgICAgRmlyc3QgY3V0LiAgU3RpbGwgdG8gZG86CisgICAg
ICAgIC0gRW5hYmxlIGZvciBtb3JlIGVsZW1lbnRzLgorICAgICAgICAtIERvbid0IHVzZSB0aGUg
b3V0bGluZSBwcm9wZXJ0eSwgaXQgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW4gZWZmZWN0IGZvciBj
ZXJ0YWluIGVsZW1lbnRzCisgICAgICAgIHRoYXQgd2Ugd291bGQgbGlrZSB0byBlbmFibGUgY29u
dHJvbCBzZWxlY3Rpb25zIGZvciwgbGlrZSB0YWJsZXMuCisgICAgICAgIC0gQWRkIGNvZGUgdG8g
cGx1bmdlIGludG8gY29udHJvbGxlZCBlbGVtZW50cyB0aGF0IGhhdmUgZWRpdGFibGUgY29udGVu
dCBpbnNpZGUgdGhlbSwgbGlrZSBhbiBpZnJhbWUgdGhhdCBpcyBpbiBhbiBlZGl0YWJsZSByZWdp
b24gdGhhdCBpdHNlbGYgY29udGFpbnMgZWRpdGFibGUgY29udGVudCAob25seSBJRSBzdXBwb3J0
cyB0aGlzKS4KKyAgICAgICAgLSBWZXJpZnkgdGhhdCB0aGUgcmVzaXplIGxheWVyIGlzIGRlc3Ry
b3llZCB3aGVuIGFuIGVsZW1lbnQgbm8gbG9uZ2VyIGhhcyBhIGNvbnRyb2wKKyAgICAgICAgc2Vs
ZWN0aW9uIGFyb3VuZCBpdC4KKyAgICAgICAgLSBXZSBwYWludCB0aGUgcmVzaXplIGhhbmRsZSB0
d2ljZSBpZiB0aGUgb2JqZWN0IGhhcyBvdmVyZmxvdyBjb250cm9scyBhcyB3ZWxsLiAKKworICAg
ICAgICBCdWdzIHRvIGZpbGU6CisgICAgICAgIC0gQ2hhbmdlIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vZGlmeSguLi4pIHRvIGdvIHRocm91Z2ggc2V0U2VsZWN0aW9uIGZvciBzZWxlY3Rpb24gY2hh
bmdlcywgaW5zdGVhZCBvZiBtb2RpZnlpbmcgbV9zZWwgZGlyZWN0bHkuCisgICAgICAgIC0gTWFr
ZSBjaGFuZ2luZyB0aGUgcmVzaXplIHByb3BlcnR5IHJlLXJlc29sdmUgdGhlIHN0eWxlIChzZWUg
RklYTUUgYXQgTm9kZS5jcHA6NzY4KS4KKyAgICAgICAgLSBHaXZlIGVhY2ggdHlwZSBvZiBzZWxl
Y3Rpb24gaXRzIG93biBjbGFzcy4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFw
cGx5UGFyYWdyYXBoU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbjo6c2V0QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnNldEV4
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnRvUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbjo6dmFsaWRhdGUpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246Oik6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb246OmlzQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OmVsZW1l
bnQpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVy
OjpwYWludENhcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmNv
bnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVXaXRoVGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhblN0YXJ0VGV4dFNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydENvbnRyb2xT
ZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6aXNDb250cm9sKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmVsZW1lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9I
VE1MQnV0dG9uRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEltYWdlRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1M
SW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2spOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpjYW5Nb3VzZURvd25TdGFydFNlbGVjdCk6CisgICAgICAgICogcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTZWxlY3Rpb25JZk5lZWRlZCk6
CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmV2
ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpwYWludExheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVxdWlyZXNMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRyYWdnYWJsZU5vZGUpOgorCiAyMDA4
LTAzLTI1ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBPbGl2ZXIuCkluZGV4OiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDMxMTY4KQorKysgaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDEzICs0NTYsNiBAQAog
ICAgIH0KIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpjYW5TdGFydFNlbGVjdGlvbigpIGNv
bnN0Ci17Ci0gICAgaWYgKCFpc1RleHRGaWVsZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmNhblN0YXJ0U2VsZWN0
aW9uKCk7Ci19Ci0KIGJvb2wgSFRNTElucHV0RWxlbWVudDo6Y2FuSGF2ZVNlbGVjdGlvbigpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGlzVGV4dEZpZWxkKCk7CkluZGV4OiBodG1sL0hUTUxTZWxlY3RF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lv
biAzMTE2OCkKKysrIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsOCArNTQsNiBAQAogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOwotICAgIAotICAgIHZpcnR1YWwg
Ym9vbCBjYW5TdGFydFNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBp
bnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQg
aW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsK
SW5kZXg6IGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTE2OCkKKysrIGh0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsMTQgKzI5Myw2IEBACiAgICAgcmV0dXJu
IGF0dHItPm5hbWUoKSA9PSBocmVmQXR0cjsKIH0KIAotYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6
Y2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSB3
YW50IHRoaXMgc2FtZSBiZWhhdmlvciBpbiBTVkdBRWxlbWVudCB0b28KLSAgICBpZiAoIWlzTGlu
aygpKQotICAgICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OmNhblN0YXJ0U2VsZWN0aW9uKCk7Ci0g
ICAgcmV0dXJuIGlzQ29udGVudEVkaXRhYmxlKCk7Ci19Ci0KIFN0cmluZyBIVE1MQW5jaG9yRWxl
bWVudDo6YWNjZXNzS2V5KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFjY2Vz
c2tleUF0dHIpOwpJbmRleDogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDMxMTY4KQorKysgaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDYgQEAKICAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZy
b21Eb2N1bWVudCgpOwogCi0gICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLQogICAgIGludCB3aWR0aChib29sIGlnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cyA9IGZhbHNlKSBjb25zdDsKICAgICBpbnQgaGVpZ2h0KGJvb2wgaWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzID0gZmFsc2UpIGNvbnN0OwogCkluZGV4OiBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lv
biAzMTE2OCkKKysrIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsOCArNDcsNiBAQAogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBmdWxs
QWN0aW9uKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdDsKLQogICAg
IFN0cmluZyBhY2Nlc3NLZXkoKSBjb25zdDsKICAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBT
dHJpbmcmKTsKIApJbmRleDogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDMxMTY4KQorKysgaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsNiBAQAogCiAgICAgdmly
dHVhbCBib29sIHNhdmVTdGF0ZShTdHJpbmcmIHZhbHVlKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcmVzdG9yZVN0YXRlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdmlydHVhbCBib29sIGNhblN0
YXJ0U2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBjYW5IYXZlU2VsZWN0aW9uKCkg
Y29uc3Q7CiAgICAgaW50IHNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7CkluZGV4OiBodG1sL0hUTUxC
dXR0b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5oCShy
ZXZpc2lvbiAzMTE2OCkKKysrIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksOCArNDksNiBAQAogCiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihi
b29sIHNlbmRUb0FueUVsZW1lbnQpOwogCi0gICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQogICAgIFN0cmluZyBhY2Nlc3NLZXkoKSBj
b25zdDsKICAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmKTsKIApJbmRleDogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHJldmlzaW9uIDMxMTY4KQorKysgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQAogCiBib29sIFJlbmRlck9iamVjdDo6
cmVxdWlyZXNMYXllcigpCiB7Ci0gICAgcmV0dXJuIGlzUm9vdCgpIHx8IGlzUG9zaXRpb25lZCgp
IHx8IGlzUmVsUG9zaXRpb25lZCgpIHx8IGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0Ns
aXAoKSB8fCBoYXNUcmFuc2Zvcm0oKTsKKyAgICByZXR1cm4gaXNSb290KCkgfHwgaXNQb3NpdGlv
bmVkKCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJm
bG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IHN0eWxlKCktPnJlc2l6ZSgpICE9IFJFU0la
RV9OT05FOwogfQogCiBSZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9jaygp
IGNvbnN0CkBAIC0yMDA3LDcgKzIwMDcsNyBAQAogICAgICAgICAgICAgICAgIGRodG1sV2lsbERy
YWcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyci0+bm9kZSgpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGVsdC0+Y2FuU3RhcnRTZWxlY3Rpb24oKSkKKyAgICAg
ICAgICAgIGlmIChTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydFRleHRTZWxlY3Rpb24oZWx0
KSkKICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSBhIGNsaWNrIGluIHRo
ZSB1bnNlbGVjdGVkIHBvcnRpb24gb2YgdGV4dC4gIElmIHRoaXMgdGV4dCBpcwogICAgICAgICAg
ICAgICAgIC8vIHNlbGVjdGFibGUsIHdlIHdhbnQgdG8gc3RhcnQgdGhlIHNlbGVjdGlvbiBwcm9j
ZXNzIGluc3RlYWQgb2YgbG9va2luZyBmb3IgYSBwYXJlbnQKICAgICAgICAgICAgICAgICAvLyB0
byB0cnkgdG8gZHJhZy4KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMzExNjgpCisrKyByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTAsMTggKzkxMCwxNiBA
QAogCiB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBl
dnQsIGNvbnN0IEludFNpemUmIG9sZE9mZnNldCkKIHsKLSAgICBpZiAoIWluUmVzaXplTW9kZSgp
IHx8ICFtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFpblJlc2l6ZU1vZGUo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9m
IHRoZSBzaGFkb3cgYW5jZXN0b3Igbm9kZSBpZiB0aGVyZSBpcyBvbmUuCiAgICAgLy8gVGhpcyBp
cyBuZWNlc3NhcnkgZm9yIHRleHRhcmVhIGVsZW1lbnRzIHNpbmNlIHRoZSByZXNpemFibGUgbGF5
ZXIgaXMgaW4gdGhlIHNoYWRvdyBjb250ZW50LgogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obV9vYmplY3QtPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkp
OwotICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihlbGVt
ZW50LT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+
cmVuZGVyZXIoKTsKKyAgICAKKyAgICBBU1NFUlQocmVuZGVyZXItPnN0eWxlKCktPnJlc2l6ZSgp
ICE9IFJFU0laRV9OT05FKTsKIAotICAgIEVSZXNpemUgcmVzaXplID0gcmVuZGVyZXItPnN0eWxl
KCktPnJlc2l6ZSgpOwotICAgIGlmIChyZXNpemUgPT0gUkVTSVpFX05PTkUpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CiAg
ICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlUHJlc3NlZCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xMTA5LDcgKzExMDcsNyBAQAogCiB2b2lkIFJlbmRlckxh
eWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoKQogewotICAgIGlmICghbV9oQmFyICYmICFt
X3ZCYXIgJiYgKCFtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgbV9vYmplY3QtPnN0eWxl
KCktPnJlc2l6ZSgpID09IFJFU0laRV9OT05FKSkKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFy
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaW50IHggPSAwOwpAQCAtMTM2OSw3ICsxMzY3
LDcgQEAKIAogYm9vbCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29udHJvbChjb25zdCBJ
bnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkg
fHwgbV9vYmplY3QtPnN0eWxlKCktPnJlc2l6ZSgpID09IFJFU0laRV9OT05FKQorICAgIGlmICht
X29iamVjdC0+c3R5bGUoKS0+cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBpbnQgeCA9IDA7CkBAIC0xNjAwLDYgKzE1OTgsMTggQEAKICAg
ICAgICAgcmVzdG9yZUNsaXAocCwgcGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7CiAg
ICAgfQogICAgIAorICAgIGlmIChtX29iamVjdC0+c3R5bGUoKS0+cmVzaXplKCkgIT0gUkVTSVpF
X05PTkUpIHsKKyAgICAgICAgSW50UmVjdCBhYnNCb3VuZHMobV9vYmplY3QtPnhQb3MoKSArIHR4
LCBtX29iamVjdC0+eVBvcygpICsgdHksIG1fb2JqZWN0LT53aWR0aCgpLCBtX29iamVjdC0+aGVp
Z2h0KCkpOworCisgICAgICAgIC8vIFBhaW50IHRoZSByZXNpemVyIGNvbnRyb2wuCisgICAgICAg
IHN0YXRpYyBJbWFnZSogcmVzaXplQ29ybmVySW1hZ2U7CisgICAgICAgIGlmICghcmVzaXplQ29y
bmVySW1hZ2UpCisgICAgICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBJbnRQb2ludCByZXNpemVDb3JuZXIoYWJzQm91bmRzLnJpZ2h0KCkgLSByZXNpemVDb3Ju
ZXJJbWFnZS0+d2lkdGgoKSwgYWJzQm91bmRzLmJvdHRvbSgpIC0gcmVzaXplQ29ybmVySW1hZ2Ut
PmhlaWdodCgpKTsKKyAgICAgICAgcC0+ZHJhd0ltYWdlKHJlc2l6ZUNvcm5lckltYWdlLCByZXNp
emVDb3JuZXIpOworICAgIH0KKyAgICAKICAgICBpZiAoIW91dGxpbmVSZWN0LmlzRW1wdHkoKSkg
ewogICAgICAgICAvLyBQYWludCBvdXIgb3duIG91dGxpbmUKICAgICAgICAgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8gcGFpbnRJbmZvKHAsIG91dGxpbmVSZWN0LCBQYWludFBoYXNlU2VsZk91dGxp
bmUsIGZhbHNlLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgMCk7CkluZGV4OiBkb20vTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZG9tL05vZGUuY3BwCShyZXZpc2lvbiAzMTE2OCkKKysrIGRvbS9O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2OCwxNSArMTA2OCw2IEBACiAgICAgcmV0dXJu
IDA7CiB9CiAKLS8vIEZJWE1FOiBTaG91bGRuJ3QgdGhlc2UgZnVuY3Rpb25zIGJlIGluIHRoZSBl
ZGl0aW5nIGNvZGU/ICBDb2RlIHRoYXQgYXNrcyBxdWVzdGlvbnMgYWJvdXQgSFRNTCBpbiB0aGUg
Y29yZSBET00gY2xhc3MKLS8vIGlzIG9idmlvdXNseSBtaXNwbGFjZWQuCi1ib29sIE5vZGU6OmNh
blN0YXJ0U2VsZWN0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHBhcmVudCgpID8gcGFyZW50KCktPmNh
blN0YXJ0U2VsZWN0aW9uKCkgOiB0cnVlOwotfQotCiBOb2RlKiBOb2RlOjpzaGFkb3dBbmNlc3Rv
ck5vZGUoKQogewogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBkb20vTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRvbS9Ob2RlLmgJKHJldmlzaW9uIDMxMTY4KQorKysgZG9tL05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzY4LDkgKzM2OCw2IEBACiAgICAgdmlydHVhbCBib29sIGNhblNlbGVjdEFsbCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdEFsbCgpIHsg
fQogCi0gICAgLy8gV2hldGhlciBvciBub3QgYSBzZWxlY3Rpb24gY2FuIGJlIHN0YXJ0ZWQgaW4g
dGhpcyBvYmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdDsK
LQogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gSW50ZWdyYXRpb24gd2l0aCBy
ZW5kZXJpbmcgdHJlZQogCkluZGV4OiBlZGl0aW5nL1NlbGVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGVkaXRpbmcvU2VsZWN0aW9uLmgJKHJldmlzaW9uIDMxMTY4KQorKysgZWRpdGluZy9TZWxlY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFBvc2l0aW9uOworY2xhc3MgSFRNTEVsZW1lbnQ7CiAKIGNvbnN0IEVBZmZp
bml0eSBTRUxfREVGQVVMVF9BRkZJTklUWSA9IERPV05TVFJFQU07CiAKIGNsYXNzIFNlbGVjdGlv
biB7CiBwdWJsaWM6Ci0gICAgZW51bSBFU3RhdGUgeyBOT05FLCBDQVJFVCwgUkFOR0UgfTsKKyAg
ICBlbnVtIEVTdGF0ZSB7IE5PTkUsIENBUkVULCBSQU5HRSwgQ09OVFJPTCB9OwogICAgIGVudW0g
RURpcmVjdGlvbiB7IEZPUldBUkQsIEJBQ0tXQVJELCBSSUdIVCwgTEVGVCB9OwogCiAgICAgU2Vs
ZWN0aW9uKCk7CkBAIC00OSw2ICs1MCwxMCBAQAogICAgIAogICAgIFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mKTsKICAgICBTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJs
eSBnaXZlIGVhY2ggdHlwZSBvZiBTZWxlY3Rpb24gaXRzIG93biBjbGFzcywgc2luY2UKKyAgICAv
LyBlbGVtZW50KCkgaXMgbWVhbmluZ2xlc3MgZm9yIGNhcmV0IGFuZCByYW5nZSBTZWxlY3Rpb25z
LCBhbmQgYWZmaW5pdHkoKSBpcyBtZWFuaW5nbGVzcworICAgIC8vIGZvciByYW5nZSBhbmQgY29u
dHJvbCBzZWxlY3Rpb25zLgorICAgIFNlbGVjdGlvbihIVE1MRWxlbWVudCopOwogCiAgICAgc3Rh
dGljIFNlbGVjdGlvbiBzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoTm9kZSopOwogCkBAIC03
NCw2ICs3OSw3IEBACiAgICAgYm9vbCBpc0NhcmV0KCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9
PSBDQVJFVDsgfQogICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0g
UkFOR0U7IH0KICAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUo
KSAhPSBOT05FOyB9CisgICAgYm9vbCBpc0NvbnRyb2woKSBjb25zdCB7IHJldHVybiBzdGF0ZSgp
ID09IENPTlRST0w7IH0KIAogICAgIGJvb2wgaXNCYXNlRmlyc3QoKSBjb25zdCB7IHJldHVybiBt
X2Jhc2VJc0ZpcnN0OyB9CiAKQEAgLTk0LDYgKzEwMCw4IEBACiAjZW5kaWYKIAogICAgIHZvaWQg
c2V0V2l0aG91dFZhbGlkYXRpb24oY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOwor
ICAgIAorICAgIEhUTUxFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
OyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCB2YWxpZGF0ZSgpOwpAQCAtMTEwLDYgKzExOCw4IEBA
CiAgICAgLy8gdGhlc2UgYXJlIGNhY2hlZCwgY2FuIGJlIHJlY2FsY3VsYXRlZCBieSB2YWxpZGF0
ZSgpCiAgICAgRVN0YXRlIG1fc3RhdGU7ICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdGF0ZSBv
ZiB0aGUgc2VsZWN0aW9uCiAgICAgYm9vbCBtX2Jhc2VJc0ZpcnN0OyAgICAgICAgICAgICAgIC8v
IHRydWUgaWYgYmFzZSBpcyBiZWZvcmUgdGhlIGV4dGVudAorICAgIAorICAgIEhUTUxFbGVtZW50
KiBtX2VsZW1lbnQ7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNlbGVjdGlv
biYgYSwgY29uc3QgU2VsZWN0aW9uJiBiKQpJbmRleDogZWRpdGluZy9TZWxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGVkaXRpbmcvU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gMzExNjgpCisrKyBl
ZGl0aW5nL1NlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICAg
ICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCiAgICAgLCBtX3N0YXRlKE5P
TkUpCiAgICAgLCBtX2Jhc2VJc0ZpcnN0KHRydWUpCisgICAgLCBtX2VsZW1lbnQoMCkKIHsKIH0K
IApAQCAtNTEsNiArNTIsNyBAQAogICAgICwgbV9leHRlbnQocG9zKQogICAgICwgbV9hZmZpbml0
eShhZmZpbml0eSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCisg
ICAgLCBtX2VsZW1lbnQoMCkKIHsKICAgICB2YWxpZGF0ZSgpOwogfQpAQCAtNjAsNiArNjIsNyBA
QAogICAgICwgbV9leHRlbnQoZXh0ZW50KQogICAgICwgbV9hZmZpbml0eShhZmZpbml0eSkKICAg
ICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCisgICAgLCBtX2VsZW1lbnQo
MCkKIHsKICAgICB2YWxpZGF0ZSgpOwogfQpAQCAtNjksNiArNzIsNyBAQAogICAgICwgbV9leHRl
bnQocG9zLmRlZXBFcXVpdmFsZW50KCkpCiAgICAgLCBtX2FmZmluaXR5KHBvcy5hZmZpbml0eSgp
KQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAsIG1fZWxl
bWVudCgwKQogewogICAgIHZhbGlkYXRlKCk7CiB9CkBAIC03OCw2ICs4Miw3IEBACiAgICAgLCBt
X2V4dGVudChleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSkKICAgICAsIG1fYWZmaW5pdHkoYmFzZS5h
ZmZpbml0eSgpKQogICAgICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAg
ICAsIG1fZWxlbWVudCgwKQogewogICAgIHZhbGlkYXRlKCk7CiB9CkBAIC04NywxMCArOTIsMTcg
QEAKICAgICAsIG1fZXh0ZW50KHJhbmdlLT5lbmRQb3NpdGlvbigpKQogICAgICwgbV9hZmZpbml0
eShhZmZpbml0eSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCisg
ICAgLCBtX2VsZW1lbnQoMCkKIHsKICAgICB2YWxpZGF0ZSgpOwogfQogCitTZWxlY3Rpb246OlNl
bGVjdGlvbihIVE1MRWxlbWVudCogZWxlbWVudCkKKyAgICA6IG1fZWxlbWVudChlbGVtZW50KQor
eworICAgIHZhbGlkYXRlKCk7Cit9CisKIFNlbGVjdGlvbiBTZWxlY3Rpb246OnNlbGVjdGlvbkZy
b21Db250ZW50c09mTm9kZShOb2RlKiBub2RlKQogewogICAgIHJldHVybiBTZWxlY3Rpb24oUG9z
aXRpb24obm9kZSwgMCksIFBvc2l0aW9uKG5vZGUsIG1heERlZXBPZmZzZXQobm9kZSkpLCBET1dO
U1RSRUFNKTsKQEAgLTk5LDI0ICsxMTEsMjggQEAKIHZvaWQgU2VsZWN0aW9uOjpzZXRCYXNlKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBtX2Jhc2UgPSBwb3NpdGlvbjsKKyAgICBt
X2VsZW1lbnQgPSAwOwogICAgIHZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgU2VsZWN0aW9uOjpzZXRC
YXNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewogICAgIG1fYmFz
ZSA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOworICAgIG1fZWxlbWVudCA9IDA7
CiAgICAgdmFsaWRhdGUoKTsKIH0KIAogdm9pZCBTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgbV9leHRlbnQgPSBwb3NpdGlvbjsKKyAgICBtX2Vs
ZW1lbnQgPSAwOwogICAgIHZhbGlkYXRlKCk7CiB9CiAKIHZvaWQgU2VsZWN0aW9uOjpzZXRFeHRl
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgbV9leHRl
bnQgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBtX2VsZW1lbnQgPSAw
OwogICAgIHZhbGlkYXRlKCk7CiB9CiAKQEAgLTEzNiw3ICsxNTIsMTAgQEAKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBQb3NpdGlvbiBzLCBlOwotICAgIGlmIChpc0NhcmV0KCkpIHsKKyAgICBp
ZiAoaXNDb250cm9sKCkpIHsKKyAgICAgICAgcyA9IHBvc2l0aW9uQmVmb3JlTm9kZShtX2VsZW1l
bnQpOworICAgICAgICBlID0gcG9zaXRpb25BZnRlck5vZGUobV9lbGVtZW50KTsKKyAgICB9IGVs
c2UgaWYgKGlzQ2FyZXQoKSkgewogICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgY2Fy
ZXQsIG1vdmUgdGhlIHJhbmdlIHN0YXJ0IHVwc3RyZWFtLiBUaGlzIGhlbHBzIHVzIG1hdGNoCiAg
ICAgICAgIC8vIHRoZSBjb252ZW50aW9ucyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVkLCB3aGljaCBt
YWtlIHN0eWxlIGRldGVybWluYXRpb25zIGJhc2VkCiAgICAgICAgIC8vIG9uIHRoZSBjaGFyYWN0
ZXIgYmVmb3JlIHRoZSBjYXJldCwgaWYgYW55LiAKQEAgLTE4NSw3ICsyMDQsNyBAQAogCiBib29s
IFNlbGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCiB7Ci0gICAgaWYgKGlzTm9uZSgpKQorICAgIGlmIChpc05vbmUoKSB8fCBpc0NvbnRy
b2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9ncmFudWxhcml0eSA9IGdyYW51
bGFyaXR5OwpAQCAtMzQ0LDcgKzM2MywxNiBAQAogICAgIGFkanVzdEZvckVkaXRhYmxlQ29udGVu
dCgpOwogCiAgICAgLy8gYWRqdXN0IHRoZSBzdGF0ZQotICAgIGlmIChtX3N0YXJ0LmlzTnVsbCgp
KSB7CisgICAgaWYgKG1fZWxlbWVudCkgeworICAgICAgICBtX3N0YXRlID0gQ09OVFJPTDsKKyAg
ICAgICAgCisgICAgICAgIG1fc3RhcnQgPSBQb3NpdGlvbihtX2VsZW1lbnQsIDApOworICAgICAg
ICBtX2VuZCA9IFBvc2l0aW9uKG1fZWxlbWVudCwgbWF4RGVlcE9mZnNldChtX2VsZW1lbnQpKTsK
KyAgICAgICAgbV9iYXNlID0gbV9zdGFydDsKKyAgICAgICAgbV9leHRlbnQgPSBtX2VuZDsKKyAg
ICAgICAgCisgICAgICAgIG1fYWZmaW5pdHkgPSBET1dOU1RSRUFNOworICAgIH0gZWxzZSBpZiAo
bV9zdGFydC5pc051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9lbmQuaXNOdWxsKCkpOwogICAg
ICAgICBtX3N0YXRlID0gTk9ORTsKIApJbmRleDogZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGVkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMzExNjgpCisrKyBlZGl0aW5nL0Vk
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMiw2ICs2MDIsNyBAQAogICAgICAgICAgICAg
bV9mcmFtZS0+Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6CisgICAg
ICAgIGNhc2UgU2VsZWN0aW9uOjpDT05UUk9MOgogICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRv
Y3VtZW50KCkgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKG5ldyBBcHBs
eVN0eWxlQ29tbWFuZChtX2ZyYW1lLT5kb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MjEsNiArNjIyLDcgQEAKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q0FSRVQ6CiAgICAgICAgIGNhc2UgU2VsZWN0
aW9uOjpSQU5HRToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNPTlRST0w6CiAgICAgICAgICAg
ICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBzdHlsZSkKICAgICAgICAgICAgICAgICBhcHBs
eUNvbW1hbmQobmV3IEFwcGx5U3R5bGVDb21tYW5kKG1fZnJhbWUtPmRvY3VtZW50KCksIHN0eWxl
LCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFuZDo6Rm9yY2VCbG9ja1Byb3BlcnRpZXMp
KTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHJldmlzaW9u
IDMxMTY4KQorKysgZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk0LDYgKzk0LDcgQEAKICAgICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVybiBtX3Nl
bC5pc0NhcmV0KCk7IH0KICAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbC5p
c1JhbmdlKCk7IH0KICAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9z
ZWwuaXNDYXJldE9yUmFuZ2UoKTsgfQorICAgIGJvb2wgaXNDb250cm9sKCkgY29uc3QgeyByZXR1
cm4gbV9zZWwuaXNDb250cm9sKCk7IH0KICAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkKCkgY29u
c3Q7CiAgICAgYm9vbCBpc0luc2lkZU5vZGUoKSBjb25zdDsKICAgICAKQEAgLTEyMSw2ICsxMjIs
MTEgQEAKICAgICB2b2lkIHNob3dUcmVlRm9yVGhpcygpIGNvbnN0OwogI2VuZGlmCiAKKyAgICBI
VE1MRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmVsZW1lbnQoKTsgfQor
ICAgIAorICAgIHN0YXRpYyBib29sIGNhblN0YXJ0VGV4dFNlbGVjdGlvbihOb2RlKik7CisgICAg
c3RhdGljIGJvb2wgY2FuU3RhcnRDb250cm9sU2VsZWN0aW9uKE5vZGUqKTsKKwogcHJpdmF0ZToK
ICAgICBlbnVtIEVQb3NpdGlvblR5cGUgeyBTVEFSVCwgRU5ELCBCQVNFLCBFWFRFTlQgfTsKIApA
QCAtMTYwLDYgKzE2Niw5IEBACiAgICAgCiAgICAgaW50IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dO
YXZpZ2F0aW9uOwogICAgIGJvb2wgbV9mb2N1c2VkOworICAgIAorICAgIGJvb2wgbV9jaGFuZ2Vk
T3V0bGluZUZvckNvbnRyb2xTZWxlY3Rpb247CisgICAgYm9vbCBtX2NoYW5nZWRSZXNpemVGb3JD
b250cm9sU2VsZWN0aW9uOwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZWxl
Y3Rpb25Db250cm9sbGVyJiBhLCBjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBiKQpJbmRleDog
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCShyZXZpc2lvbiAzMTE2OCkKKysrIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxOCw2ICs0MTgsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5PTkU6CisgICAgICAgIGNhc2UgU2Vs
ZWN0aW9uOjpDT05UUk9MOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CkBAIC00OTEsNiArNDkyLDcgQEAKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOT05FOgorICAgICAgICBj
YXNlIFNlbGVjdGlvbjo6Q09OVFJPTDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogZWRpdGluZy9TZWxlY3Rpb25Db250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAzMTE2OCkKKysrIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNzAsNiArNzEsOCBAQAogICAgICwgbV9p
c0NhcmV0QmxpbmtpbmdTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFy
cm93TmF2aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKICAgICAsIG1f
Zm9jdXNlZChmYWxzZSkKKyAgICAsIG1fY2hhbmdlZE91dGxpbmVGb3JDb250cm9sU2VsZWN0aW9u
KGZhbHNlKQorICAgICwgbV9jaGFuZ2VkUmVzaXplRm9yQ29udHJvbFNlbGVjdGlvbihmYWxzZSkK
IHsKIH0KIApAQCAtMTMyLDYgKzEzNSwzNiBAQAogCiAgICAgbV9zZWwgPSBzOwogICAgIAorICAg
IGlmIChvbGRTZWxlY3Rpb24uaXNDb250cm9sKCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQgPSBvbGRTZWxlY3Rpb24uZWxlbWVudCgpOworICAgICAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5nZXRJbmxpbmVTdHlsZURlY2woKTsKKyAgICAg
ICAgaWYgKG1fY2hhbmdlZE91dGxpbmVGb3JDb250cm9sU2VsZWN0aW9uKQorICAgICAgICAgICAg
c3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5T3V0bGluZSwgIiIpOworICAgICAgICBpZiAo
bV9jaGFuZ2VkUmVzaXplRm9yQ29udHJvbFNlbGVjdGlvbikKKyAgICAgICAgICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVJlc2l6ZSwgIiIpOworICAgICAgICBtX2NoYW5nZWRPdXRs
aW5lRm9yQ29udHJvbFNlbGVjdGlvbiA9IGZhbHNlOworICAgICAgICBtX2NoYW5nZWRSZXNpemVG
b3JDb250cm9sU2VsZWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChtX3NlbC5p
c0NvbnRyb2woKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgaW50IG91dGxpbmVXaWR0aCA9IDI7
CisgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgb3V0bGluZVN0cmluZyA9ICJweCBzb2xpZCAj
OTlGIjsKKyAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyByZXNpemVTdHJpbmcgPSAiYm90aCI7
CisgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbV9zZWwuZWxlbWVudCgpOworICAgICAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5nZXRJbmxpbmVT
dHlsZURlY2woKTsKKyAgICAgICAgU3RyaW5nIHN0eWxlU3RyaW5nID0gc3R5bGUtPmNzc1RleHQo
KTsKKyAgICAgICAgLy8gV2UgcmVseSBvbiB0aGlzIHN0eWxlIGNoYW5nZSB0byB0cmlnZ2VyIGEg
c3R5bGUgcmVzb2x2ZSB0byBjcmVhdGUgdGhlIHJlc2l6ZSBsYXllciwgcGVyaGFwcworICAgICAg
ICAvLyB0aGlzIGlzIHdyb25nLgorICAgICAgICBpZiAoIXN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoKSkgeworICAgICAgICAgICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5T3V0bGluZSwgU3RyaW5nOjpudW1iZXIob3V0bGluZVdpZHRoKSAr
IG91dGxpbmVTdHJpbmcpOworICAgICAgICAgICAgbV9jaGFuZ2VkT3V0bGluZUZvckNvbnRyb2xT
ZWxlY3Rpb24gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlSZXNpemUpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlSZXNpemUsIHJlc2l6ZVN0cmluZyk7CisgICAgICAgICAgICBt
X2NoYW5nZWRSZXNpemVGb3JDb250cm9sU2VsZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoIXMuaXNO
b25lKCkpCkBAIC00MjAsNiArNDUzLDcgQEAKICAgICByZXR1cm4gcG9zOwogfQogCisvLyBGSVhN
RTogVGhpcyBzaG91bGQgZ28gdGhyb3VnaCBzZXRTZWxlY3Rpb24gdG8gY2hhbmdlIHRoZSBzZWxl
dGlvbiBsaWtlIGV2ZXJ5b25lIGVsc2UgZG9lcywgaW5zdGVhZCBvZiBtb2RpZnlpbmcgbV9zZWwg
ZGlyZWN0bHkuCiBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXJhdGlvbiBh
bHRlciwgRURpcmVjdGlvbiBkaXIsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCB1
c2VyVHJpZ2dlcmVkKQogewogICAgIGlmICh1c2VyVHJpZ2dlcmVkKSB7CkBAIC01OTEsNyArNjI1
LDcgQEAKIAogYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKLSAgICBpZiAoaXNOb25lKCkpCisgICAg
aWYgKGlzTm9uZSgpIHx8IGlzQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBtX3NlbC5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsKQEAgLTYwMyw3ICs2
MzcsNyBAQAogewogICAgIGludCB4ID0gMDsKIAotICAgIGlmIChpc05vbmUoKSkKKyAgICBpZiAo
aXNOb25lKCkgfHwgaXNDb250cm9sKCkpCiAgICAgICAgIHJldHVybiB4OwogCiAgICAgUG9zaXRp
b24gcG9zOwpAQCAtNzcyLDcgKzgwNiw3IEBACiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQgKnAsIGNvbnN0IEludFJlY3QgJnJlY3QpCiB7Ci0g
ICAgaWYgKCEgbV9zZWwuaXNDYXJldCgpKQorICAgIGlmICghaXNDYXJldCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV9uZWVkc0xheW91dCkKQEAgLTg2Niw3ICs5MDAsNyBAQAogewog
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgCi0gICAg
Ly8gVHJlYXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9uIGxpa2Ugbm8gc2VsZWN0aW9uLgorICAgIC8v
IFRyZWF0IGEgY29sbGFwc2VkIG9yIGNvbnRyb2wgc2VsZWN0aW9uIGxpa2Ugbm8gc2VsZWN0aW9u
LgogICAgIGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFk
b2N1bWVudC0+cmVuZGVyZXIoKSkgCkBAIC0xMDg0LDYgKzExMTgsNDIgQEAKIHsKICAgICByZXR1
cm4gbV9mb2N1c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwogfQorCitzdGF0aWMgTm9kZSogZW5jbG9zaW5nTm9k
ZVdpdGhUYWcoTm9kZSogbm9kZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKK3sKKyAg
ICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUodGFnTmFtZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAKKyAgICBy
ZXR1cm4gbm9kZTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydFRleHRT
ZWxlY3Rpb24oTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgaWYgKG5vZGUtPmhhc1Rh
Z05hbWUoaW5wdXRUYWcpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KG5vZGUpLT5pc1RleHRGaWVsZCgpOworICAgICAgICAKKyAgICBpZiAoZW5jbG9zaW5n
Tm9kZVdpdGhUYWcobm9kZSwgc2VsZWN0VGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpICYmIG5vZGUtPnBhcmVu
dE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKTsKK30KKworYm9vbCBTZWxlY3Rpb25Db250cm9s
bGVyOjpjYW5TdGFydENvbnRyb2xTZWxlY3Rpb24oTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPnBhcmVudCgpIHx8ICFub2RlLT5wYXJl
bnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCk7Cit9CiAgIAogI2lmbmRlZiBOREVCVUcK
IApJbmRleDogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRm9j
dXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMzExNjgpCisrKyBwYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGlmIChOb2RlKiBtb3VzZVByZXNzTm9kZSA9IG5ld0ZvY3VzZWRGcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlUHJlc3NOb2RlKCkpCi0gICAgICAgIGlmIChtb3VzZVBy
ZXNzTm9kZS0+cmVuZGVyZXIoKSAmJiAhbW91c2VQcmVzc05vZGUtPmNhblN0YXJ0U2VsZWN0aW9u
KCkpCisgICAgICAgIGlmIChtb3VzZVByZXNzTm9kZS0+cmVuZGVyZXIoKSAmJiAhU2VsZWN0aW9u
Q29udHJvbGxlcjo6Y2FuU3RhcnRUZXh0U2VsZWN0aW9uKG1vdXNlUHJlc3NOb2RlKSAmJiAhU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Y2FuU3RhcnRDb250cm9sU2VsZWN0aW9uKG1vdXNlUHJlc3NOb2Rl
KSkKICAgICAgICAgICAgIGlmIChOb2RlKiByb290ID0gcy0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
KQogICAgICAgICAgICAgICAgIGlmIChOb2RlKiBzaGFkb3dBbmNlc3Rvck5vZGUgPSByb290LT5z
aGFkb3dBbmNlc3Rvck5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhp
cyBmb3IgdGV4dGFyZWFzIGFuZCB0ZXh0IGZpZWxkcywgd2hlbiB0aGV5IGxvc2UgZm9jdXMgdGhl
aXIgc2VsZWN0aW9ucyBzaG91bGQgYmUgY2xlYXJlZApJbmRleDogcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMzExNjgp
CisrKyBwYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MCwxMCArMjYw
LDEwIEBACiAgICAgICAgIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oaW5uZXJOb2RlLCAw
LCBET1dOU1RSRUFNKTsKICAgICBQb3NpdGlvbiBwb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFs
ZW50KCk7CiAgICAgCisgICAgbV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZXRMYXN0
Q2hhbmdlV2FzSG9yaXpvbnRhbEV4dGVuc2lvbihmYWxzZSk7IC8vIFNob3VsZCBnbyBpbiBzZXRT
ZWxlY3Rpb24uCisgICAgCiAgICAgU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IG1fZnJhbWUtPnNl
bGVjdGlvbkNvbnRyb2xsZXIoKS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKGV4dGVuZFNlbGVjdGlv
biAmJiBuZXdTZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKSkgewotICAgICAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb25Db250cm9sbGVyKCktPnNldExhc3RDaGFuZ2VXYXNIb3Jpem9udGFsRXh0ZW5zaW9u
KGZhbHNlKTsKLSAgICAgICAgCiAgICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vMzY2ODE1
Nz4gUkVHUkVTU0lPTiAoTWFpbCk6IHNoaWZ0LWNsaWNrIGRlc2VsZWN0cyB3aGVuIHNlbGVjdGlv
biAKICAgICAgICAgLy8gd2FzIGNyZWF0ZWQgcmlnaHQtdG8tbGVmdAogICAgICAgICBQb3NpdGlv
biBzdGFydCA9IG5ld1NlbGVjdGlvbi5zdGFydCgpOwpAQCAtMjc3LDYgKzI3Nyw4IEBACiAgICAg
ICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpICE9IENoYXJhY3RlckdyYW51
bGFyaXR5KQogICAgICAgICAgICAgbmV3U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
bV9mcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSk7CiAgICAgICAgIG1fYmVnYW5TZWxlY3Rp
bmdUZXh0ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhblN0
YXJ0Q29udHJvbFNlbGVjdGlvbihpbm5lck5vZGUpKSB7CisgICAgICAgIG5ld1NlbGVjdGlvbiA9
IFNlbGVjdGlvbihzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGlubmVyTm9kZSkpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFNlbGVjdGlvbih2aXNpYmxlUG9zKTsKICAg
ICAgICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpOwpAQCAtNzM4LDcgKzc0MCw3IEBACiAgICAgICAgICAgICBib29sIGluUmVzaXplciA9IGZh
bHNlOwogICAgICAgICAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSAmJiBsYXllciAmJiBsYXllci0+
aXNQb2ludEluUmVzaXplQ29udHJvbChtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
ZXZlbnQuZXZlbnQoKS5wb3MoKSkpKQogICAgICAgICAgICAgICAgIGluUmVzaXplciA9IHRydWU7
Ci0gICAgICAgICAgICBpZiAoKGVkaXRhYmxlIHx8IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNU
ZXh0KCkgJiYgbm9kZS0+Y2FuU3RhcnRTZWxlY3Rpb24oKSkpICYmICFpblJlc2l6ZXIgJiYgIXNj
cm9sbGJhcikKKyAgICAgICAgICAgIGlmIChTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydFRl
eHRTZWxlY3Rpb24obm9kZSkgJiYgIWluUmVzaXplciAmJiAhc2Nyb2xsYmFyKQogICAgICAgICAg
ICAgICAgIHJldHVybiBpQmVhbUN1cnNvcigpOwogICAgICAgICAgICAgcmV0dXJuIHBvaW50ZXJD
dXJzb3IoKTsKICAgICAgICAgfQpAQCAtMTM5Niw3ICsxMzk4LDcgQEAKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgCiAgICAgLy8gU29tZSBjb250cm9scyBhbmQgaW1hZ2VzIGNhbid0IHN0YXJ0
IGEgc2VsZWN0IG9uIGEgbW91c2UgZG93bi4KLSAgICBpZiAoIW5vZGUtPmNhblN0YXJ0U2VsZWN0
aW9uKCkpCisgICAgaWYgKCFTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydFRleHRTZWxlY3Rp
b24obm9kZSkgJiYgIVNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhblN0YXJ0Q29udHJvbFNlbGVjdGlv
bihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCiAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGN1cnIgPSBub2RlLT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+
cGFyZW50KCkpICAgIApJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9G
cmFtZS5jcHAJKHJldmlzaW9uIDMxMTY4KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNzcsNiArMTI3Nyw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6CisgICAgICAgIGNhc2UgU2VsZWN0aW9u
OjpDT05UUk9MOgogICAgICAgICAgICAgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9u
UmVjdChmYWxzZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20119</attachid>
            <date>2008-03-27 00:59:23 -0700</date>
            <delta_ts>2010-06-11 11:59:51 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>5696409.txt</filename>
            <type>text/plain</type>
            <size>29150</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMxMzcw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzcgQEAKKzIwMDgtMDMt
MjcgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTY5
NjQwOT4gSW1wbGVtZW50IGNvbnRyb2wgc2VsZWN0aW9ucyBmb3IgZWRpdGFibGUgZWxlbWVudHMg
KDEyMjUwKQorICAgICAgICAKKyAgICAgICAgVG8gZG86CisgICAgICAgIC0gRW5hYmxlIGNvbnRy
b2wgc2VsZWN0aW9ucyBmb3IgbW9yZSBlbGVtZW50cy4KKyAgICAgICAgLSBEb24ndCB1c2UgdGhl
IG91dGxpbmUgcHJvcGVydHkgdG8gZGVub3RlIGEgY29udHJvbCBzZWxlY3Rpb24sIHdlIG5lZWQK
KyAgICAgICAgdG8gYmUgYWJsZSB0byBoaWdobGlnaHQgYSBjb250cm9sbGVkIGVsZW1lbnQgdGhh
dCBhbHJlYWR5IGhhcyBhbiBvdXRsaW5lCisgICAgICAgIGFuZCBvdXRsaW5lcyBkb24ndCBzZWVt
IHRvIHdvcmsgZm9yIGNlcnRhaW4gZWxlbWVudHMsIGxpa2UgdGFibGVzLgorICAgICAgICAKKyAg
ICAgICAgQnVncyB1bmNvdmVyZWQ6CisgICAgICAgIC0gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9k
aWZ5KC4uLikgc2hvdWxkIGdvIHRocm91Z2ggc2V0U2VsZWN0aW9uIGZvciBzZWxlY3Rpb24gY2hh
bmdlcywgaW5zdGVhZCBvZiBtb2RpZnlpbmcgbV9zZWwgZGlyZWN0bHkuCisgICAgICAgIC0gQ2hh
bmdpbmcgdGhlIHZhbHVlIG9mIHRoZSByZXNpemUgcHJvcGVydHkgc2hvdWxkIHJlLXJlc29sdmUg
dGhlIHN0eWxlIChzZWUgRklYTUUgYXQgTm9kZS5jcHA6NzY4KS4KKyAgICAgICAgLSBFYWNoIHR5
cGUgb2Ygc2VsZWN0aW9uIHNob3VsZCBoYXZlIGl0cyBvd24gY2xhc3MuCisKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OlNlbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnNldEJhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uOjpzZXRFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Ojp0b1JhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFu
dWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnZhbGlkYXRlKToKKyAgICAg
ICAgKiBlZGl0aW5nL1NlbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjop
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjppc0NvbnRyb2wpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uOjplbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6U2Vs
ZWN0aW9uQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVy
OjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6
ZXhwYW5kVXNpbmdHcmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250
cm9sbGVyOjp4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25Db250cm9sbGVyOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25Db250cm9sbGVyOjpjYW5TdGFydFRleHRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FuU3RhcnRDb250cm9sU2VsZWN0aW9uKToKKyAgICAgICAg
KiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvbkNvbnRyb2xsZXI6OmlzQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyOjplbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6
CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAg
ICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFu
ZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJl
c3NFdmVudFNpbmdsZUNsaWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Vs
ZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEb3du
U3RhcnRTZWxlY3QpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNsZWFyU2VsZWN0aW9uSWZOZWVkZWQpOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJldmVhbFNlbGVjdGlvbik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpyZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRS
ZXNpemVDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1BvaW50SW5S
ZXNpemVDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVy
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVx
dWlyZXNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRyYWdnYWJsZU5v
ZGUpOgorCiAyMDA4LTAzLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4K
IAogICAgICAgICBSZW5hbWUgc29tZSBJbnNwZWN0b3IgZmlsZXMgdG8gZmFjaWxpdGF0ZSB0aGUg
dXAtY29taW5nIFVJIHJlZnJlc2ggY2hhbmdlcy4KSW5kZXg6IGh0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24g
MzEzNjUpCisrKyBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTYsMTMgKzQ1Niw2IEBACiAgICAgfQogfQogCi1ib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmNhblN0
YXJ0U2VsZWN0aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZTo6Y2FuU3RhcnRTZWxlY3Rpb24oKTsKLX0KLQogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpjYW5I
YXZlU2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gaXNUZXh0RmllbGQoKTsKSW5kZXg6
IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxTZWxlY3RF
bGVtZW50LmgJKHJldmlzaW9uIDMxMzY1KQorKysgaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw2IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hGb2N1c0V2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7Ci0g
ICAgCi0gICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRT
ZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9u
Q2hhbmdlID0gZmFsc2UpOwpJbmRleDogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDMxMzY1KQorKysg
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MywxNCArMjkz
LDYgQEAKICAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IGhyZWZBdHRyOwogfQogCi1ib29sIEhU
TUxBbmNob3JFbGVtZW50OjpjYW5TdGFydFNlbGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IFdlIHByb2JhYmx5IHdhbnQgdGhpcyBzYW1lIGJlaGF2aW9yIGluIFNWR0FFbGVtZW50IHRv
bwotICAgIGlmICghaXNMaW5rKCkpCi0gICAgICAgIHJldHVybiBIVE1MRWxlbWVudDo6Y2FuU3Rh
cnRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gaXNDb250ZW50RWRpdGFibGUoKTsKLX0KLQogU3Ry
aW5nIEhUTUxBbmNob3JFbGVtZW50OjphY2Nlc3NLZXkoKSBjb25zdAogewogICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0cik7CkluZGV4OiBodG1sL0hUTUxJbWFnZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMzEzNjUp
CisrKyBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDks
NiBAQAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU3Rh
cnRTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgaW50IHdpZHRoKGJv
b2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzID0gZmFsc2UpIGNvbnN0OwogICAgIGludCBoZWln
aHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMgPSBmYWxzZSkgY29uc3Q7CiAKSW5kZXg6
IGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxBbmNob3JF
bGVtZW50LmgJKHJldmlzaW9uIDMxMzY1KQorKysgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw2IEBACiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tl
eUFjdGlvbihib29sIGZ1bGxBY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0
ZShBdHRyaWJ1dGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBjYW5TdGFydFNlbGVjdGlv
bigpIGNvbnN0OwotCiAgICAgU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYpOwogCkluZGV4OiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gMzEzNjUp
CisrKyBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEw
MSw2IEBACiAKICAgICB2aXJ0dWFsIGJvb2wgc2F2ZVN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU3RhdGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdDsKICAgICAKICAgICBib29sIGNh
bkhhdmVTZWxlY3Rpb24oKSBjb25zdDsKICAgICBpbnQgc2VsZWN0aW9uU3RhcnQoKSBjb25zdDsK
SW5kZXg6IGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxC
dXR0b25FbGVtZW50LmgJKHJldmlzaW9uIDMxMzY1KQorKysgaHRtbC9IVE1MQnV0dG9uRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw2IEBACiAKICAgICB2aXJ0dWFsIHZvaWQg
YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgU3Ry
aW5nIGFjY2Vzc0tleSgpIGNvbnN0OwogICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IFN0cmlu
ZyYpOwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzEzNjUpCisrKyByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDcgKzUwMCw3IEBACiAKIGJv
b2wgUmVuZGVyT2JqZWN0OjpyZXF1aXJlc0xheWVyKCkKIHsKLSAgICByZXR1cm4gaXNSb290KCkg
fHwgaXNQb3NpdGlvbmVkKCkgfHwgaXNSZWxQb3NpdGlvbmVkKCkgfHwgaXNUcmFuc3BhcmVudCgp
IHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgpOworICAgIHJldHVybiBpc1Jv
b3QoKSB8fCBpc1Bvc2l0aW9uZWQoKSB8fCBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFy
ZW50KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgc3R5bGUoKS0+
cmVzaXplKCkgIT0gUkVTSVpFX05PTkU7CiB9CiAKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6
OmZpcnN0TGluZUJsb2NrKCkgY29uc3QKQEAgLTIwMTIsNyArMjAxMiw3IEBACiAgICAgICAgICAg
ICAgICAgZGh0bWxXaWxsRHJhZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHJldHVybiBjdXJy
LT5ub2RlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZWx0LT5jYW5TdGFydFNl
bGVjdGlvbigpKQorICAgICAgICAgICAgaWYgKFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhblN0YXJ0
VGV4dFNlbGVjdGlvbihlbHQpKQogICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBo
YXZlIGEgY2xpY2sgaW4gdGhlIHVuc2VsZWN0ZWQgcG9ydGlvbiBvZiB0ZXh0LiAgSWYgdGhpcyB0
ZXh0IGlzCiAgICAgICAgICAgICAgICAgLy8gc2VsZWN0YWJsZSwgd2Ugd2FudCB0byBzdGFydCB0
aGUgc2VsZWN0aW9uIHByb2Nlc3MgaW5zdGVhZCBvZiBsb29raW5nIGZvciBhIHBhcmVudAogICAg
ICAgICAgICAgICAgIC8vIHRvIHRyeSB0byBkcmFnLgpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lv
biAzMTM2NSkKKysrIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkxMCwxOCArOTEwLDE2IEBACiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgSW50U2l6ZSYgb2xkT2Zmc2V0KQogewotICAgIGlm
ICghaW5SZXNpemVNb2RlKCkgfHwgIW1fb2JqZWN0LT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBp
ZiAoIWluUmVzaXplTW9kZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBTZXQgdGhlIHdp
ZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHNoYWRvdyBhbmNlc3RvciBub2RlIGlmIHRoZXJlIGlzIG9u
ZS4KICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGV4dGFyZWEgZWxlbWVudHMgc2luY2Ug
dGhlIHJlc2l6YWJsZSBsYXllciBpcyBpbiB0aGUgc2hhZG93IGNvbnRlbnQuCiAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX29iamVjdC0+bm9kZSgpLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKSk7Ci0gICAgUmVuZGVyQm94KiByZW5kZXJlciA9IHN0YXRpY19jYXN0
PFJlbmRlckJveCo+KGVsZW1lbnQtPnJlbmRlcmVyKCkpOworICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIAorICAgIEFTU0VSVChyZW5kZXJlci0+
c3R5bGUoKS0+cmVzaXplKCkgIT0gUkVTSVpFX05PTkUpOwogCi0gICAgRVJlc2l6ZSByZXNpemUg
PSByZW5kZXJlci0+c3R5bGUoKS0+cmVzaXplKCk7Ci0gICAgaWYgKHJlc2l6ZSA9PSBSRVNJWkVf
Tk9ORSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVu
dC0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+bW91c2VQcmVzc2VkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExMDksNyArMTEwNyw3IEBA
CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scygpCiB7Ci0gICAg
aWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAoIW1fb2JqZWN0LT5oYXNPdmVyZmxvd0NsaXAoKSB8
fCBtX29iamVjdC0+c3R5bGUoKS0+cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpKQorICAgIGlmICgh
bV9oQmFyICYmICFtX3ZCYXIpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpbnQgeCA9IDA7
CkBAIC0xMjk5LDYgKzEyOTcsMjIgQEAKICAgICAgICAgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoaG9y
aXpvbnRhbE92ZXJmbG93LCB2ZXJ0aWNhbE92ZXJmbG93KTsKIH0KIAordm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRSZXNpemVDb250cm9sKEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHR4LCBpbnQgdHkp
Cit7CisgICAgaWYgKG1fb2JqZWN0LT5zdHlsZSgpLT5yZXNpemUoKSA9PSBSRVNJWkVfTk9ORSB8
fCBtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgSW50UmVjdCBhYnNCb3VuZHMobV9vYmplY3QtPnhQb3MoKSArIHR4LCBtX29iamVjdC0+
eVBvcygpICsgdHksIG1fb2JqZWN0LT53aWR0aCgpLCBtX29iamVjdC0+aGVpZ2h0KCkpOworCisg
ICAgLy8gUGFpbnQgdGhlIHJlc2l6ZXIgY29udHJvbC4KKyAgICBzdGF0aWMgSW1hZ2UqIHJlc2l6
ZUNvcm5lckltYWdlOworICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJlc2l6
ZUNvcm5lckltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6
ZUNvcm5lciIpOworICAgICAgICAKKyAgICBJbnRQb2ludCByZXNpemVDb3JuZXIoYWJzQm91bmRz
LnJpZ2h0KCkgLSByZXNpemVDb3JuZXJJbWFnZS0+d2lkdGgoKSwgYWJzQm91bmRzLmJvdHRvbSgp
IC0gcmVzaXplQ29ybmVySW1hZ2UtPmhlaWdodCgpKTsKKyAgICBwLT5kcmF3SW1hZ2UocmVzaXpl
Q29ybmVySW1hZ2UsIHJlc2l6ZUNvcm5lcik7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqIHAsIGludCB0eCwgaW50IHR5LCBjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQogewogICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdl
IGhhdmUgbm8gb3ZlcmZsb3cuCkBAIC0xMzY5LDcgKzEzODMsNyBAQAogCiBib29sIFJlbmRlckxh
eWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKLSAg
ICBpZiAoIW1fb2JqZWN0LT5oYXNPdmVyZmxvd0NsaXAoKSB8fCBtX29iamVjdC0+c3R5bGUoKS0+
cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpCisgICAgaWYgKG1fb2JqZWN0LT5zdHlsZSgpLT5yZXNp
emUoKSA9PSBSRVNJWkVfTk9ORSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlu
dCB4ID0gMDsKQEAgLTE1OTUsNiArMTYwOSw4IEBACiAgICAgICAgICAgICBwYWludEluZm8ucGhh
c2UgPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lczsKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnBh
aW50KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcGFp
bnRSZXNpemVDb250cm9sKHAsIHR4LCB0eSk7CiAKICAgICAgICAgLy8gTm93IHJlc3RvcmUgb3Vy
IGNsaXAuCiAgICAgICAgIHJlc3RvcmVDbGlwKHAsIHBhaW50RGlydHlSZWN0LCBjbGlwUmVjdFRv
QXBwbHkpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDMxMzY1KQorKysgcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAsNyBAQAogICAgIEludFNpemUg
b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgdm9p
ZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHks
IGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVDb250cm9s
KEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKIAogICAgIHZvaWQgdXBkYXRlU2Ny
b2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAKSW5kZXg6IGRvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vTm9kZS5jcHAJKHJldmlzaW9uIDMxMzY1KQorKysgZG9tL05vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDY4LDE1ICsxMDY4LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotLy8gRklY
TUU6IFNob3VsZG4ndCB0aGVzZSBmdW5jdGlvbnMgYmUgaW4gdGhlIGVkaXRpbmcgY29kZT8gIENv
ZGUgdGhhdCBhc2tzIHF1ZXN0aW9ucyBhYm91dCBIVE1MIGluIHRoZSBjb3JlIERPTSBjbGFzcwot
Ly8gaXMgb2J2aW91c2x5IG1pc3BsYWNlZC4KLWJvb2wgTm9kZTo6Y2FuU3RhcnRTZWxlY3Rpb24o
KSBjb25zdAotewotICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZSgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gcGFyZW50KCkgPyBwYXJlbnQoKS0+Y2FuU3RhcnRTZWxlY3Rpb24o
KSA6IHRydWU7Ci19Ci0KIE5vZGUqIE5vZGU6OnNoYWRvd0FuY2VzdG9yTm9kZSgpCiB7CiAjaWYg
RU5BQkxFKFNWRykKSW5kZXg6IGRvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL05vZGUuaAko
cmV2aXNpb24gMzEzNjUpCisrKyBkb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAsOSAr
MzcwLDYgQEAKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2VsZWN0QWxsKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0QWxsKCkgeyB9CiAKLSAgICAvLyBXaGV0
aGVyIG9yIG5vdCBhIHNlbGVjdGlvbiBjYW4gYmUgc3RhcnRlZCBpbiB0aGlzIG9iamVjdAotICAg
IHZpcnR1YWwgYm9vbCBjYW5TdGFydFNlbGVjdGlvbigpIGNvbnN0OwotCiAgICAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICAgICAvLyBJbnRlZ3JhdGlvbiB3aXRoIHJlbmRlcmluZyB0cmVlCiAK
SW5kZXg6IGVkaXRpbmcvU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9TZWxlY3Rp
b24uaAkocmV2aXNpb24gMzEzNjUpCisrKyBlZGl0aW5nL1NlbGVjdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxMiArMzIsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUG9z
aXRpb247CitjbGFzcyBIVE1MRWxlbWVudDsKIAogY29uc3QgRUFmZmluaXR5IFNFTF9ERUZBVUxU
X0FGRklOSVRZID0gRE9XTlNUUkVBTTsKIAogY2xhc3MgU2VsZWN0aW9uIHsKIHB1YmxpYzoKLSAg
ICBlbnVtIEVTdGF0ZSB7IE5PTkUsIENBUkVULCBSQU5HRSB9OworICAgIGVudW0gRVN0YXRlIHsg
Tk9ORSwgQ0FSRVQsIFJBTkdFLCBDT05UUk9MIH07CiAgICAgZW51bSBFRGlyZWN0aW9uIHsgRk9S
V0FSRCwgQkFDS1dBUkQsIFJJR0hULCBMRUZUIH07CiAKICAgICBTZWxlY3Rpb24oKTsKQEAgLTQ5
LDYgKzUwLDEwIEBACiAgICAgCiAgICAgU2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OwogICAgIFNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGdpdmUgZWFjaCB0eXBl
IG9mIFNlbGVjdGlvbiBpdHMgb3duIGNsYXNzLCBzaW5jZQorICAgIC8vIGVsZW1lbnQoKSBpcyBt
ZWFuaW5nbGVzcyBmb3IgY2FyZXQgYW5kIHJhbmdlIFNlbGVjdGlvbnMsIGFuZCBhZmZpbml0eSgp
IGlzIG1lYW5pbmdsZXNzCisgICAgLy8gZm9yIHJhbmdlIGFuZCBjb250cm9sIHNlbGVjdGlvbnMu
CisgICAgU2VsZWN0aW9uKEhUTUxFbGVtZW50Kik7CiAKICAgICBzdGF0aWMgU2VsZWN0aW9uIHNl
bGVjdGlvbkZyb21Db250ZW50c09mTm9kZShOb2RlKik7CiAKQEAgLTc0LDYgKzc5LDcgQEAKICAg
ICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IENBUkVUOyB9CiAgICAg
Ym9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSBSQU5HRTsgfQogICAgIGJv
b2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpICE9IE5PTkU7IH0KKyAg
ICBib29sIGlzQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gQ09OVFJPTDsgfQog
CiAgICAgYm9vbCBpc0Jhc2VGaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUlzRmlyc3Q7IH0K
IApAQCAtOTQsNiArMTAwLDggQEAKICNlbmRpZgogCiAgICAgdm9pZCBzZXRXaXRob3V0VmFsaWRh
dGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CisgICAgCisgICAgSFRNTEVs
ZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KIAogcHJpdmF0ZToK
ICAgICB2b2lkIHZhbGlkYXRlKCk7CkBAIC0xMTAsNiArMTE4LDggQEAKICAgICAvLyB0aGVzZSBh
cmUgY2FjaGVkLCBjYW4gYmUgcmVjYWxjdWxhdGVkIGJ5IHZhbGlkYXRlKCkKICAgICBFU3RhdGUg
bV9zdGF0ZTsgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlIG9mIHRoZSBzZWxlY3Rpb24K
ICAgICBib29sIG1fYmFzZUlzRmlyc3Q7ICAgICAgICAgICAgICAgLy8gdHJ1ZSBpZiBiYXNlIGlz
IGJlZm9yZSB0aGUgZXh0ZW50CisgICAgCisgICAgSFRNTEVsZW1lbnQqIG1fZWxlbWVudDsKIH07
CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uJiBhLCBjb25zdCBTZWxl
Y3Rpb24mIGIpCkluZGV4OiBlZGl0aW5nL1NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRp
dGluZy9TZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAzMTM2NSkKKysrIGVkaXRpbmcvU2VsZWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogICAgICwgbV9ncmFudWxhcml0
eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKICAgICAsIG1fc3RhdGUoTk9ORSkKICAgICAsIG1fYmFz
ZUlzRmlyc3QodHJ1ZSkKKyAgICAsIG1fZWxlbWVudCgwKQogewogfQogCkBAIC01MSw2ICs1Miw3
IEBACiAgICAgLCBtX2V4dGVudChwb3MpCiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQogICAg
ICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAsIG1fZWxlbWVudCgw
KQogewogICAgIHZhbGlkYXRlKCk7CiB9CkBAIC02MCw2ICs2Miw3IEBACiAgICAgLCBtX2V4dGVu
dChleHRlbnQpCiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQogICAgICwgbV9ncmFudWxhcml0
eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAsIG1fZWxlbWVudCgwKQogewogICAgIHZhbGlk
YXRlKCk7CiB9CkBAIC02OSw2ICs3Miw3IEBACiAgICAgLCBtX2V4dGVudChwb3MuZGVlcEVxdWl2
YWxlbnQoKSkKICAgICAsIG1fYWZmaW5pdHkocG9zLmFmZmluaXR5KCkpCiAgICAgLCBtX2dyYW51
bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQorICAgICwgbV9lbGVtZW50KDApCiB7CiAgICAg
dmFsaWRhdGUoKTsKIH0KQEAgLTc4LDYgKzgyLDcgQEAKICAgICAsIG1fZXh0ZW50KGV4dGVudC5k
ZWVwRXF1aXZhbGVudCgpKQogICAgICwgbV9hZmZpbml0eShiYXNlLmFmZmluaXR5KCkpCiAgICAg
LCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQorICAgICwgbV9lbGVtZW50KDAp
CiB7CiAgICAgdmFsaWRhdGUoKTsKIH0KQEAgLTg3LDEwICs5MiwxNyBAQAogICAgICwgbV9leHRl
bnQocmFuZ2UtPmVuZFBvc2l0aW9uKCkpCiAgICAgLCBtX2FmZmluaXR5KGFmZmluaXR5KQogICAg
ICwgbV9ncmFudWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAsIG1fZWxlbWVudCgw
KQogewogICAgIHZhbGlkYXRlKCk7CiB9CiAKK1NlbGVjdGlvbjo6U2VsZWN0aW9uKEhUTUxFbGVt
ZW50KiBlbGVtZW50KQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCit7CisgICAgdmFsaWRhdGUo
KTsKK30KKwogU2VsZWN0aW9uIFNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2Rl
KE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIFNlbGVjdGlvbihQb3NpdGlvbihub2RlLCAwKSwg
UG9zaXRpb24obm9kZSwgbWF4RGVlcE9mZnNldChub2RlKSksIERPV05TVFJFQU0pOwpAQCAtOTks
MjQgKzExMSwyOCBAQAogdm9pZCBTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQogewogICAgIG1fYmFzZSA9IHBvc2l0aW9uOworICAgIG1fZWxlbWVudCA9IDA7CiAg
ICAgdmFsaWRhdGUoKTsKIH0KIAogdm9pZCBTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgbV9iYXNlID0gdmlzaWJsZVBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCk7CisgICAgbV9lbGVtZW50ID0gMDsKICAgICB2YWxpZGF0ZSgp
OwogfQogCiB2b2lkIFNlbGVjdGlvbjo6c2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlv
bikKIHsKICAgICBtX2V4dGVudCA9IHBvc2l0aW9uOworICAgIG1fZWxlbWVudCA9IDA7CiAgICAg
dmFsaWRhdGUoKTsKIH0KIAogdm9pZCBTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBtX2V4dGVudCA9IHZpc2libGVQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpOworICAgIG1fZWxlbWVudCA9IDA7CiAgICAgdmFsaWRhdGUo
KTsKIH0KIApAQCAtMTM2LDcgKzE1MiwxMCBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIFBv
c2l0aW9uIHMsIGU7Ci0gICAgaWYgKGlzQ2FyZXQoKSkgeworICAgIGlmIChpc0NvbnRyb2woKSkg
eworICAgICAgICBzID0gcG9zaXRpb25CZWZvcmVOb2RlKG1fZWxlbWVudCk7CisgICAgICAgIGUg
PSBwb3NpdGlvbkFmdGVyTm9kZShtX2VsZW1lbnQpOworICAgIH0gZWxzZSBpZiAoaXNDYXJldCgp
KSB7CiAgICAgICAgIC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgYSBjYXJldCwgbW92ZSB0aGUgcmFu
Z2Ugc3RhcnQgdXBzdHJlYW0uIFRoaXMgaGVscHMgdXMgbWF0Y2gKICAgICAgICAgLy8gdGhlIGNv
bnZlbnRpb25zIG9mIHRleHQgZWRpdG9ycyB0ZXN0ZWQsIHdoaWNoIG1ha2Ugc3R5bGUgZGV0ZXJt
aW5hdGlvbnMgYmFzZWQKICAgICAgICAgLy8gb24gdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGNh
cmV0LCBpZiBhbnkuIApAQCAtMTg1LDcgKzIwNCw3IEBACiAKIGJvb2wgU2VsZWN0aW9uOjpleHBh
bmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKLSAgICBp
ZiAoaXNOb25lKCkpCisgICAgaWYgKGlzTm9uZSgpIHx8IGlzQ29udHJvbCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7CkBAIC0zNDQs
NyArMzYzLDE2IEBACiAgICAgYWRqdXN0Rm9yRWRpdGFibGVDb250ZW50KCk7CiAKICAgICAvLyBh
ZGp1c3QgdGhlIHN0YXRlCi0gICAgaWYgKG1fc3RhcnQuaXNOdWxsKCkpIHsKKyAgICBpZiAobV9l
bGVtZW50KSB7CisgICAgICAgIG1fc3RhdGUgPSBDT05UUk9MOworICAgICAgICAKKyAgICAgICAg
bV9zdGFydCA9IFBvc2l0aW9uKG1fZWxlbWVudCwgMCk7CisgICAgICAgIG1fZW5kID0gUG9zaXRp
b24obV9lbGVtZW50LCBtYXhEZWVwT2Zmc2V0KG1fZWxlbWVudCkpOworICAgICAgICBtX2Jhc2Ug
PSBtX3N0YXJ0OworICAgICAgICBtX2V4dGVudCA9IG1fZW5kOworICAgICAgICAKKyAgICAgICAg
bV9hZmZpbml0eSA9IERPV05TVFJFQU07CisgICAgfSBlbHNlIGlmIChtX3N0YXJ0LmlzTnVsbCgp
KSB7CiAgICAgICAgIEFTU0VSVChtX2VuZC5pc051bGwoKSk7CiAgICAgICAgIG1fc3RhdGUgPSBO
T05FOwogCkluZGV4OiBlZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9F
ZGl0b3IuY3BwCShyZXZpc2lvbiAzMTM2NSkKKysrIGVkaXRpbmcvRWRpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAyLDYgKzYwMiw3IEBACiAgICAgICAgICAgICBtX2ZyYW1lLT5jb21wdXRl
QW5kU2V0VHlwaW5nU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAgICAgICAgY2FzZSBTZWxlY3Rp
b246OkNPTlRST0w6CiAgICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBzdHls
ZSkKICAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQobmV3IEFwcGx5U3R5bGVDb21tYW5kKG1f
ZnJhbWUtPmRvY3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uKSk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTYyMSw2ICs2MjIsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgU2VsZWN0aW9uOjpDQVJFVDoKICAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgorICAg
ICAgICBjYXNlIFNlbGVjdGlvbjo6Q09OVFJPTDoKICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5k
b2N1bWVudCgpICYmIHN0eWxlKQogICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChuZXcgQXBw
bHlTdHlsZUNvbW1hbmQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24s
IEFwcGx5U3R5bGVDb21tYW5kOjpGb3JjZUJsb2NrUHJvcGVydGllcykpOwogICAgICAgICAgICAg
YnJlYWs7CkluZGV4OiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMzEzNjUpCisrKyBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsNyBA
QAogICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmlzQ2FyZXQoKTsgfQog
ICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmlzUmFuZ2UoKTsgfQogICAg
IGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbC5pc0NhcmV0T3JSYW5n
ZSgpOyB9CisgICAgYm9vbCBpc0NvbnRyb2woKSBjb25zdCB7IHJldHVybiBtX3NlbC5pc0NvbnRy
b2woKTsgfQogICAgIGJvb2wgaXNJblBhc3N3b3JkRmllbGQoKSBjb25zdDsKICAgICBib29sIGlz
SW5zaWRlTm9kZSgpIGNvbnN0OwogICAgIApAQCAtMTIxLDYgKzEyMiwxMSBAQAogICAgIHZvaWQg
c2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CiAjZW5kaWYKIAorICAgIEhUTUxFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zZWwuZWxlbWVudCgpOyB9CisgICAgCisgICAgc3RhdGlj
IGJvb2wgY2FuU3RhcnRUZXh0U2VsZWN0aW9uKE5vZGUqKTsKKyAgICBzdGF0aWMgTm9kZSogY2Fu
U3RhcnRDb250cm9sU2VsZWN0aW9uKE5vZGUqKTsKKwogcHJpdmF0ZToKICAgICBlbnVtIEVQb3Np
dGlvblR5cGUgeyBTVEFSVCwgRU5ELCBCQVNFLCBFWFRFTlQgfTsKIApAQCAtMTYwLDYgKzE2Niw5
IEBACiAgICAgCiAgICAgaW50IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwogICAg
IGJvb2wgbV9mb2N1c2VkOworICAgIAorICAgIGJvb2wgbV9jaGFuZ2VkT3V0bGluZUZvckNvbnRy
b2xTZWxlY3Rpb247CisgICAgYm9vbCBtX2NoYW5nZWRSZXNpemVGb3JDb250cm9sU2VsZWN0aW9u
OwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTZWxlY3Rpb25Db250cm9sbGVy
JiBhLCBjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBiKQpJbmRleDogZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCShyZXZp
c2lvbiAzMTM2NSkKKysrIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxOCw2ICs0MTgsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBTZWxlY3Rpb246Ok5PTkU6CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDT05UUk9M
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CkBAIC00OTEsNiArNDkyLDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOT05FOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6
Q09OVFJPTDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQpJbmRleDogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzMTM2
NSkKKysrIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25D
b250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAi
Q1N0cmluZy5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgpAQCAtNzAsNiArNzEsOCBAQAogICAgICwgbV9pc0NhcmV0QmxpbmtpbmdT
dXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihO
b1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbikKICAgICAsIG1fZm9jdXNlZChmYWxzZSkK
KyAgICAsIG1fY2hhbmdlZE91dGxpbmVGb3JDb250cm9sU2VsZWN0aW9uKGZhbHNlKQorICAgICwg
bV9jaGFuZ2VkUmVzaXplRm9yQ29udHJvbFNlbGVjdGlvbihmYWxzZSkKIHsKIH0KIApAQCAtMTMy
LDYgKzEzNSwzNSBAQAogCiAgICAgbV9zZWwgPSBzOwogICAgIAorICAgIGlmIChvbGRTZWxlY3Rp
b24uaXNDb250cm9sKCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBvbGRTZWxl
Y3Rpb24uZWxlbWVudCgpOworICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUgPSBlbGVtZW50LT5nZXRJbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgaWYgKG1fY2hhbmdl
ZE91dGxpbmVGb3JDb250cm9sU2VsZWN0aW9uKQorICAgICAgICAgICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5T3V0bGluZSwgIiIpOworICAgICAgICBpZiAobV9jaGFuZ2VkUmVzaXpl
Rm9yQ29udHJvbFNlbGVjdGlvbikKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVJlc2l6ZSwgIiIpOworICAgICAgICBtX2NoYW5nZWRPdXRsaW5lRm9yQ29udHJvbFNl
bGVjdGlvbiA9IGZhbHNlOworICAgICAgICBtX2NoYW5nZWRSZXNpemVGb3JDb250cm9sU2VsZWN0
aW9uID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChtX3NlbC5pc0NvbnRyb2woKSkgewor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG91dGxpbmVXaWR0aCA9IDM7CisgICAgICAgIHN0YXRp
YyBjb25zdCBTdHJpbmcgb3V0bGluZVN0cmluZyA9ICJweCBzb2xpZCAjOTlGIjsKKyAgICAgICAg
c3RhdGljIGNvbnN0IFN0cmluZyByZXNpemVTdHJpbmcgPSAiYm90aCI7CisgICAgICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gbV9zZWwuZWxlbWVudCgpOworICAgICAgICBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5nZXRJbmxpbmVTdHlsZURlY2woKTsKKyAg
ICAgICAgLy8gV2UgcmVseSBvbiB0aGlzIHN0eWxlIGNoYW5nZSB0byB0cmlnZ2VyIGEgc3R5bGUg
cmVzb2x2ZSB0byBjcmVhdGUgdGhlIHJlc2l6ZSBsYXllciwgcGVyaGFwcworICAgICAgICAvLyB0
aGlzIGlzIHdyb25nLgorICAgICAgICBpZiAoIXN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5T3V0bGluZVdpZHRoKSkgeworICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5T3V0bGluZSwgU3RyaW5nOjpudW1iZXIob3V0bGluZVdpZHRoKSArIG91dGxp
bmVTdHJpbmcpOworICAgICAgICAgICAgbV9jaGFuZ2VkT3V0bGluZUZvckNvbnRyb2xTZWxlY3Rp
b24gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlSZXNpemUpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlSZXNpemUsIHJlc2l6ZVN0cmluZyk7CisgICAgICAgICAgICBtX2NoYW5n
ZWRSZXNpemVGb3JDb250cm9sU2VsZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoIXMuaXNOb25lKCkp
CkBAIC00MjAsNiArNDUyLDcgQEAKICAgICByZXR1cm4gcG9zOwogfQogCisvLyBGSVhNRTogVGhp
cyBzaG91bGQgZ28gdGhyb3VnaCBzZXRTZWxlY3Rpb24gdG8gY2hhbmdlIHRoZSBzZWxldGlvbiBs
aWtlIGV2ZXJ5b25lIGVsc2UgZG9lcywgaW5zdGVhZCBvZiBtb2RpZnlpbmcgbV9zZWwgZGlyZWN0
bHkuCiBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwg
RURpcmVjdGlvbiBkaXIsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCB1c2VyVHJp
Z2dlcmVkKQogewogICAgIGlmICh1c2VyVHJpZ2dlcmVkKSB7CkBAIC01OTEsNyArNjI0LDcgQEAK
IAogYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKLSAgICBpZiAoaXNOb25lKCkpCisgICAgaWYgKGlz
Tm9uZSgpIHx8IGlzQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3Nl
bC5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsKQEAgLTYwMyw3ICs2MzYsNyBA
QAogewogICAgIGludCB4ID0gMDsKIAotICAgIGlmIChpc05vbmUoKSkKKyAgICBpZiAoaXNOb25l
KCkgfHwgaXNDb250cm9sKCkpCiAgICAgICAgIHJldHVybiB4OwogCiAgICAgUG9zaXRpb24gcG9z
OwpAQCAtNzcyLDcgKzgwNSw3IEBACiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRD
YXJldChHcmFwaGljc0NvbnRleHQgKnAsIGNvbnN0IEludFJlY3QgJnJlY3QpCiB7Ci0gICAgaWYg
KCEgbV9zZWwuaXNDYXJldCgpKQorICAgIGlmICghaXNDYXJldCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9uZWVkc0xheW91dCkKQEAgLTg2Niw3ICs4OTksNyBAQAogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgCi0gICAgLy8gVHJl
YXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9uIGxpa2Ugbm8gc2VsZWN0aW9uLgorICAgIC8vIFRyZWF0
IGEgY29sbGFwc2VkIG9yIGNvbnRyb2wgc2VsZWN0aW9uIGxpa2Ugbm8gc2VsZWN0aW9uLgogICAg
IGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkb2N1bWVu
dC0+cmVuZGVyZXIoKSkgCkBAIC0xMDg0LDYgKzExMTcsNTggQEAKIHsKICAgICByZXR1cm4gbV9m
b2N1c2VkICYmIG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLT5pc0FjdGl2ZSgpOwogfQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhblN0
YXJ0VGV4dFNlbGVjdGlvbihOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIENlcnRhaW4g
dGV4dHVhbCBub2RlcyBjYW4gbm90IHN0YXJ0IGEgdGV4dCBzZWxlY3Rpb24uCisgICAgZm9yIChO
b2RlKiBuID0gbm9kZTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkKKyAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoc2VsZWN0VGFnKSB8fCBuLT5pc0xpbmsoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICAvLyBPbmx5IGFsbG93IHRleHQgc2VsZWN0aW9uIGluc2lkZSBhIHRl
eHRhcmVhIHRoYXQgaXMgaXRzZWxmIGVkaXRhYmxlIGlmIHRoZXJlCisgICAgLy8gaXMgYWxyZWFk
eSBhIGNvbnRyb2wgc2VsZWN0aW9uIGFyb3VuZCB0aGUgdGV4dGFyZWEsIG9yIGlmIHRoZXJlIGlz
IGFscmVhZHkgYQorICAgIC8vIHRleHQgc2VsZWN0aW9uIGluc2lkZSB0aGUgdGV4dGFyZWEuCisg
ICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkp
CisgICAgICAgIGlmIChzaGFkb3dBbmNlc3Rvci0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpCisg
ICAgICAgICAgICBpZiAoc2hhZG93QW5jZXN0b3ItPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRp
dGFibGUoKSkKKyAgICAgICAgICAgICAgICBpZiAoU2VsZWN0aW9uQ29udHJvbGxlciogcyA9IHNo
YWRvd0FuY2VzdG9yLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb25Db250cm9sbGVyKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzLT5pc0NvbnRyb2woKSAmJiBzLT5lbGVtZW50
KCkgPT0gc2hhZG93QW5jZXN0b3IgfHwgcy0+aXNDYXJldE9yUmFuZ2UoKSAmJiBzLT5zdGFydCgp
Lm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gc2hhZG93QW5jZXN0b3I7CisgICAgCisg
ICAgLy8gQ2FuJ3Qgc3RhcnQgdGV4dCBzZWxlY3Rpb25zIGluc2lkZSB0aGVzZSBlbGVtZW50cywg
KmV2ZW4gaWYqIHRoZXkgYXJlIGluIGFuIGVkaXRhYmxlIHJlZ2lvbi4KKyAgICBpZiAobm9kZS0+
aGFzVGFnTmFtZShpbnB1dFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShidXR0b25UYWcpICYmIG5v
ZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiB0cnVlOworfQorCisvLyBSZXR1cm5zIHRoZSBhbmNlc3RvciBvZiB0aGUgZ2l2
ZW4gbm9kZSBhcm91bmQgd2hpY2ggYSBuZXcgY29udHJvbCBzZWxlY3Rpb24gaXMgYWxsb3dlZC4K
K05vZGUqIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNhblN0YXJ0Q29udHJvbFNlbGVjdGlvbihOb2Rl
KiBub2RlKQoreworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgLy8gQWxsb3cgYSBuZXcgY29udHJvbCBzZWxlY3Rpb24gYXJv
dW5kIGEgdGV4dGFyZWEgaW5zaWRlIGFuIGVkaXRhYmxlIHJlZ2lvbiwKKyAgICAvLyBidXQgbm90
IGlmIHRoZXJlIGlzIGFscmVhZHkgYSBjb250cm9sIHNlbGVjdGlvbiBhcm91bmQgaXQsIGFuZCBu
b3QgaWYgCisgICAgLy8gdGhlcmUgaXMgYWxyZWFkeSBhIHRleHQgc2VsZWN0aW9uIGluc2lkZSBv
ZiBpdC4KKyAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBub2RlLT5zaGFkb3dBbmNlc3Rv
ck5vZGUoKSkKKyAgICAgICAgaWYgKHNoYWRvd0FuY2VzdG9yLT5oYXNUYWdOYW1lKHRleHRhcmVh
VGFnKSkKKyAgICAgICAgICAgIGlmIChzaGFkb3dBbmNlc3Rvci0+cGFyZW50KCktPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgICAgICAgICAgICAgaWYgKFNlbGVjdGlvbkNvbnRyb2xsZXIqIHMg
PSBzaGFkb3dBbmNlc3Rvci0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uQ29udHJvbGxl
cigpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIShzLT5pc0NvbnRyb2woKSAmJiBzLT5lbGVt
ZW50KCkgPT0gc2hhZG93QW5jZXN0b3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMt
PmlzTm9uZSgpIHx8IHMtPnN0YXJ0KCkubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSAhPSBz
aGFkb3dBbmNlc3RvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93
QW5jZXN0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgaWYgKCFub2RlLT5w
YXJlbnQoKSB8fCAhbm9kZS0+cGFyZW50KCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpCisg
ICAgICAgIHJldHVybiBub2RlOworICAgICAgICAKKyAgICByZXR1cm4gMDsKK30KICAgCiAjaWZu
ZGVmIE5ERUJVRwogCkluZGV4OiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzMTM2NSkKKysrIHBhZ2UvRm9j
dXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgaWYgKE5vZGUqIG1vdXNlUHJlc3NOb2RlID0gbmV3
Rm9jdXNlZEZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VQcmVzc05vZGUoKSkKLSAgICAgICAg
aWYgKG1vdXNlUHJlc3NOb2RlLT5yZW5kZXJlcigpICYmICFtb3VzZVByZXNzTm9kZS0+Y2FuU3Rh
cnRTZWxlY3Rpb24oKSkKKyAgICAgICAgaWYgKG1vdXNlUHJlc3NOb2RlLT5yZW5kZXJlcigpICYm
ICFTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydFRleHRTZWxlY3Rpb24obW91c2VQcmVzc05v
ZGUpICYmICFTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydENvbnRyb2xTZWxlY3Rpb24obW91
c2VQcmVzc05vZGUpKQogICAgICAgICAgICAgaWYgKE5vZGUqIHJvb3QgPSBzLT5yb290RWRpdGFi
bGVFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yTm9k
ZSA9IHJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQogICAgICAgICAgICAgICAgICAgICAvLyBE
b24ndCBkbyB0aGlzIGZvciB0ZXh0YXJlYXMgYW5kIHRleHQgZmllbGRzLCB3aGVuIHRoZXkgbG9z
ZSBmb2N1cyB0aGVpciBzZWxlY3Rpb25zIHNob3VsZCBiZSBjbGVhcmVkCkluZGV4OiBwYWdlL0V2
ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZp
c2lvbiAzMTM2NSkKKysrIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYwLDEwICsyNjAsMTAgQEAKICAgICAgICAgdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihp
bm5lck5vZGUsIDAsIERPV05TVFJFQU0pOwogICAgIFBvc2l0aW9uIHBvcyA9IHZpc2libGVQb3Mu
ZGVlcEVxdWl2YWxlbnQoKTsKICAgICAKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVy
KCktPnNldExhc3RDaGFuZ2VXYXNIb3Jpem9udGFsRXh0ZW5zaW9uKGZhbHNlKTsgLy8gU2hvdWxk
IGdvIGluIHNldFNlbGVjdGlvbi4KKyAgICAKICAgICBTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0g
bV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoZXh0
ZW5kU2VsZWN0aW9uICYmIG5ld1NlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpKSB7Ci0gICAgICAg
IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+c2V0TGFzdENoYW5nZVdhc0hvcml6b250
YWxFeHRlbnNpb24oZmFsc2UpOwotICAgICAgICAKICAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJv
YmxlbS8zNjY4MTU3PiBSRUdSRVNTSU9OIChNYWlsKTogc2hpZnQtY2xpY2sgZGVzZWxlY3RzIHdo
ZW4gc2VsZWN0aW9uIAogICAgICAgICAvLyB3YXMgY3JlYXRlZCByaWdodC10by1sZWZ0CiAgICAg
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gbmV3U2VsZWN0aW9uLnN0YXJ0KCk7CkBAIC0yNzcsNiArMjc3
LDggQEAKICAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgIT0gQ2hh
cmFjdGVyR3JhbnVsYXJpdHkpCiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24uZXhwYW5kVXNpbmdH
cmFudWxhcml0eShtX2ZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0eSgpKTsKICAgICAgICAgbV9i
ZWdhblNlbGVjdGluZ1RleHQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoTm9kZSogY29udHJvbEVs
ZW1lbnQgPSBTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydENvbnRyb2xTZWxlY3Rpb24oaW5u
ZXJOb2RlKSkgeworICAgICAgICBuZXdTZWxlY3Rpb24gPSBTZWxlY3Rpb24oc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihjb250cm9sRWxlbWVudCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG5l
d1NlbGVjdGlvbiA9IFNlbGVjdGlvbih2aXNpYmxlUG9zKTsKICAgICAgICAgbV9mcmFtZS0+c2V0
U2VsZWN0aW9uR3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtNzM4LDcgKzc0
MCw3IEBACiAgICAgICAgICAgICBib29sIGluUmVzaXplciA9IGZhbHNlOwogICAgICAgICAgICAg
aWYgKG1fZnJhbWUtPnZpZXcoKSAmJiBsYXllciAmJiBsYXllci0+aXNQb2ludEluUmVzaXplQ29u
dHJvbChtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3Mo
KSkpKQogICAgICAgICAgICAgICAgIGluUmVzaXplciA9IHRydWU7Ci0gICAgICAgICAgICBpZiAo
KGVkaXRhYmxlIHx8IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0KCkgJiYgbm9kZS0+Y2Fu
U3RhcnRTZWxlY3Rpb24oKSkpICYmICFpblJlc2l6ZXIgJiYgIXNjcm9sbGJhcikKKyAgICAgICAg
ICAgIGlmIChTZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydFRleHRTZWxlY3Rpb24obm9kZSkg
JiYgIWluUmVzaXplciAmJiAhc2Nyb2xsYmFyKQogICAgICAgICAgICAgICAgIHJldHVybiBpQmVh
bUN1cnNvcigpOwogICAgICAgICAgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKICAgICAgICAg
fQpAQCAtMTM5Niw3ICsxMzk4LDcgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAg
Ly8gU29tZSBjb250cm9scyBhbmQgaW1hZ2VzIGNhbid0IHN0YXJ0IGEgc2VsZWN0IG9uIGEgbW91
c2UgZG93bi4KLSAgICBpZiAoIW5vZGUtPmNhblN0YXJ0U2VsZWN0aW9uKCkpCisgICAgaWYgKCFT
ZWxlY3Rpb25Db250cm9sbGVyOjpjYW5TdGFydFRleHRTZWxlY3Rpb24obm9kZSkgJiYgIVNlbGVj
dGlvbkNvbnRyb2xsZXI6OmNhblN0YXJ0Q29udHJvbFNlbGVjdGlvbihub2RlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIg
PSBub2RlLT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpICAgIApJbmRl
eDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9u
IDMxMzY1KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNiArMTI3
Nyw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNl
bGVjdGlvbjo6UkFOR0U6CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDT05UUk9MOgogICAgICAg
ICAgICAgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uUmVjdChmYWxzZSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158167</attachid>
            <date>2012-08-13 17:44:17 -0700</date>
            <delta_ts>2012-08-13 18:29:13 -0700</delta_ts>
            <desc>Shadow DOM-based approach - WIP prototype 1</desc>
            <filename>wip12250</filename>
            <type>text/plain</type>
            <size>14717</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMjU0NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2Myw3IEBACiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNm1vZGlmeUVOUzBfMTFFQWx0ZXJhdGlvbkVOU18x
OFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUVOU18xNEVVc2VyVHJpZ2dl
cmVkRQogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbkMxRVBOU181RnJhbWVFCitfX1pON1dlYkNvcmUxNEZyYW1lU2Vs
ZWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTRQbHVnaW5Eb2N1bWVudDEycGx1Z2luV2lkZ2V0RXYK
IF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZmaW5nRXYKIF9f
Wk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNnN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlRXYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDEyNTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwNSw2ICsxMjA1LDE1
IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgRWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdChT
aGFkb3dSb290KikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byByZW1vdmUgdGhlIHNwZWNpZmlj
IHNoYWRvdyByb290IHdlJ3JlIGdpdmVuLgorICAgIGlmIChFbGVtZW50U2hhZG93KiBlbGVtZW50
U2hhZG93ID0gc2hhZG93KCkpIHsKKyAgICAgICAgZWxlbWVudFNoYWRvdy0+cmVtb3ZlQWxsU2hh
ZG93Um9vdHMoKTsKKyAgICAgICAgZWxlbWVudFJhcmVEYXRhKCktPm1fc2hhZG93LmNsZWFyKCk7
CisgICAgfQorfQorCiBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lk
KCkgY29uc3QKIHsKICAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVsZW1lbnRSYXJlRGF0YSgp
LT5tX3NoYWRvd1BzZXVkb0lkIDogbnVsbEF0b207CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJl
dmlzaW9uIDEyNTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Niw2ICsyNzYsNyBAQAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQWRkQXV0aG9y
U2hhZG93Um9vdCgpIHsgfQogCiAgICAgU2hhZG93Um9vdCogdXNlckFnZW50U2hhZG93Um9vdCgp
IGNvbnN0OworICAgIHZvaWQgcmVtb3ZlU2hhZG93Um9vdChTaGFkb3dSb290Kik7CiAKICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKICAgICB2
b2lkIHNldFNoYWRvd1BzZXVkb0lkKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
ID0gQVNTRVJUX05PX0VYQ0VQVElPTik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gMTI1NDQzKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBA
CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNp
bmNsdWRlICJFbGVtZW50U2hhZG93LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJTaGFkb3dSb290LmgiCisKICNkZWZpbmUgRURJVF9ERUJVRyAwCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTExOCw2ICsxMjIsMTAgQEAKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0
SXNEaXJlY3Rpb25hbCh0cnVlKTsKIH0KIAorRnJhbWVTZWxlY3Rpb246On5GcmFtZVNlbGVjdGlv
bigpCit7Cit9CisKIEVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50
T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3Qg
PSBtX3NlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CkBAIC0yODYsNyArMjk0LDU4IEBA
CiAgICAgCiAgICAgaWYgKCFzLmlzTm9uZSgpICYmICEob3B0aW9ucyAmIERvTm90U2V0Rm9jdXMp
KQogICAgICAgICBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7Ci0gICAgCisKKyAgICAvLyBGSVhN
RTogTW92ZSB0aGlzIHRvIGEgc2VwYXJhdGUgbWVtYmVyIGZ1bmN0aW9uLgorICAgIFBvc2l0aW9u
IHN0YXJ0UG9zaXRpb24gPSBtX3NlbGVjdGlvbi5zdGFydCgpOworICAgIFBvc2l0aW9uIGVuZFBv
c2l0aW9uID0gbV9zZWxlY3Rpb24uZW5kKCk7CisgICAgSFRNTEVsZW1lbnQqIG5ld0NvbnRyb2xT
ZWxlY3Rpb25Pd25lciA9IDA7CisgICAgaWYgKE5vZGUqIHN0YXJ0UG9zaXRpb25Ob2RlID0gc3Rh
cnRQb3NpdGlvbi5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSkgeworICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIGNvbmRpdGlvbiBtb3JlIHJvYnVzdC4KKyAgICAgICAgaWYgKHN0YXJ0UG9z
aXRpb25Ob2RlID09IGVuZFBvc2l0aW9uLmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKSAmJiBz
dGFydFBvc2l0aW9uTm9kZS0+aGFzVGFnTmFtZShpbWdUYWcpKQorICAgICAgICAgICAgbmV3Q29u
dHJvbFNlbGVjdGlvbk93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihzdGFydFBvc2l0
aW9uTm9kZSk7CisgICAgfQorCisgICAgaWYgKG5ld0NvbnRyb2xTZWxlY3Rpb25Pd25lciAhPSBt
X2NvbnRyb2xTZWxlY3Rpb25Pd25lcikgeworICAgICAgICBpZiAobV9jb250cm9sU2VsZWN0aW9u
T3duZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbnRyb2xTZWxlY3Rpb25Pd25lci0+c2hh
ZG93KCktPnlvdW5nZXN0U2hhZG93Um9vdCgpKTsKKyAgICAgICAgICAgIG1fY29udHJvbFNlbGVj
dGlvbk93bmVyLT5zaGFkb3coKS0+eW91bmdlc3RTaGFkb3dSb290KCktPnNldElubmVySFRNTCgi
PHNoYWRvdz4iLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIG1fY29udHJvbFNl
bGVjdGlvbk93bmVyID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3Q29udHJvbFNlbGVj
dGlvbk93bmVyKSB7CisgICAgICAgICAgICBtX2NvbnRyb2xTZWxlY3Rpb25Pd25lciA9IG5ld0Nv
bnRyb2xTZWxlY3Rpb25Pd25lcjsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFkb3dSb290PiBzaGFk
b3dSb290ID0gU2hhZG93Um9vdDo6Y3JlYXRlKG1fY29udHJvbFNlbGVjdGlvbk93bmVyLmdldCgp
LCBTaGFkb3dSb290OjpBdXRob3JTaGFkb3dSb290LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKwor
ICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjb250YWluZXIgPSBIVE1MRGl2RWxlbWVu
dDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgY29udGFpbmVyLT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAicG9zaXRpb246IHJlbGF0aXZlOyIpOworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHdhbnQgdG8gYmUgdXNpbmcgdGhlIHNoYWRvdyBlbGVtZW50IGhlcmUg
YnV0IGl0IHNlZW1zIGxpa2UgdGhlIHNoYWRvdyBlbGVtZW50IGRvZXNuJ3QgcHJlc2VydmUKKyAg
ICAgICAgICAgIC8vIHRoZSBpbnRyaW5zaWMgd2lkdGggJiBoZWlnaHQgb2YgdGhlIGltYWdlLgor
ICAgICAgICAgICAgLy8gY29udGFpbmVyLT5hcHBlbmRDaGlsZChtX2ZyYW1lLT5kb2N1bWVudCgp
LT5jcmVhdGVFbGVtZW50KHNoYWRvd1RhZywgQVNTRVJUX05PX0VYQ0VQVElPTikpOworICAgICAg
ICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChzdGF0aWNfY2FzdDxOb2RlKj4obV9jb250cm9s
U2VsZWN0aW9uT3duZXIuZ2V0KCkpLT5jbG9uZU5vZGUoZmFsc2UpKTsgLy8gTm8gZGVlcCBjb3B5
LgorCisgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHVwcGVyTGVmdENvcm5lciA9IEhU
TUxEaXZFbGVtZW50OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICB1
cHBlckxlZnRDb3JuZXItPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsCisgICAgICAgICAgICAgICAg
IndpZHRoOiA0cHg7IGhlaWdodDogNHB4OyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC0ycHg7
IHRvcDogLTJweDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJhY2tncm91bmQ6IHdoaXRlOyIp
OworICAgICAgICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZCh1cHBlckxlZnRDb3JuZXIpOwor
CisgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHVwcGVyUmlnaHRDb3JuZXIgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgdXBw
ZXJSaWdodENvcm5lci0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwKKyAgICAgICAgICAgICAgICAi
d2lkdGg6IDRweDsgaGVpZ2h0OiA0cHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IC0ycHg7
IHRvcDogLTJweDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJhY2tncm91bmQ6IHdoaXRlOyIp
OworICAgICAgICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZCh1cHBlclJpZ2h0Q29ybmVyKTsK
KworICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsb3dlckxlZnRDb3JuZXIgPSBIVE1M
RGl2RWxlbWVudDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgbG93
ZXJMZWZ0Q29ybmVyLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLAorICAgICAgICAgICAgICAgICJ3
aWR0aDogNHB4OyBoZWlnaHQ6IDRweDsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtMnB4OyBi
b3R0b206IC0ycHg7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBiYWNrZ3JvdW5kOiB3aGl0ZTsi
KTsKKyAgICAgICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQobG93ZXJMZWZ0Q29ybmVyKTsK
KworICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsb3dlclJpZ2h0Q29ybmVyID0gSFRN
TERpdkVsZW1lbnQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGxv
d2VyUmlnaHRDb3JuZXItPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsCisgICAgICAgICAgICAgICAg
IndpZHRoOiA0cHg7IGhlaWdodDogNHB4OyBwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAtMnB4
OyBib3R0b206IC0ycHg7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBiYWNrZ3JvdW5kOiB3aGl0
ZTsiKTsKKyAgICAgICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQobG93ZXJSaWdodENvcm5l
cik7CisKKyAgICAgICAgICAgIHNoYWRvd1Jvb3QtPmFwcGVuZENoaWxkKGNvbnRhaW5lciwgQVNT
RVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIH0KKyAgICB9CisKICAgICB1cGRhdGVBcHBlYXJh
bmNlKCk7CiAKICAgICAvLyBBbHdheXMgY2xlYXIgdGhlIHggcG9zaXRpb24gdXNlZCBmb3IgdmVy
dGljYWwgYXJyb3cgbmF2aWdhdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmgJKHJldmlzaW9uIDEyNTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw3IEBACiAgICAg
fQogCiAgICAgZXhwbGljaXQgRnJhbWVTZWxlY3Rpb24oRnJhbWUqID0gMCk7CisgICAgfkZyYW1l
U2VsZWN0aW9uKCk7CiAKICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOyB9CiAgICAgRWxlbWVu
dCogcm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7CkBAIC0zMDAs
NiArMzAxLDcgQEAKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsKIAogICAgIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50
PiBtX2NvbnRyb2xTZWxlY3Rpb25Pd25lcjsKIAogICAgIFRpbWVyPEZyYW1lU2VsZWN0aW9uPiBt
X2NhcmV0QmxpbmtUaW1lcjsKICAgICAvLyBUaGUgcGFpbnRlZCBib3VuZHMgb2YgdGhlIGNhcmV0
IGluIGFic29sdXRlIGNvb3JkaW5hdGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCShyZXZpc2lvbiAxMjU0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5OSw2ICs0OTksMTEgQEAKIHsKICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
ICAgICBOb2RlKiBpbm5lck5vZGUgPSB0YXJnZXROb2RlKGV2ZW50KTsKKyAgICBpZiAoaW5uZXJO
b2RlICYmIGlubmVyTm9kZS0+aGFzVGFnTmFtZShpbWdUYWcpICYmIGlubmVyTm9kZS0+aXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICByZXR1cm4gdXBkYXRlU2VsZWN0aW9uRm9y
TW91c2VEb3duRGlzcGF0Y2hpbmdTZWxlY3RTdGFydChpbm5lck5vZGUsCisgICAgICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShpbm5lck5vZGUpLCBwb3NpdGlvbkFm
dGVyTm9kZShpbm5lck5vZGUpKSwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgIH0KKwogICAg
IGlmICghKGlubmVyTm9kZSAmJiBpbm5lck5vZGUtPnJlbmRlcmVyKCkgJiYgbV9tb3VzZURvd25N
YXlTdGFydFNlbGVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTI1NDQzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODAxLDYgKzE4MDEsNyBAQAogCQk2NURGMzI2MTA5RDFF
MTk5MDAwQkUzMjUgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MUFGMDlEMTRFRTYwMDBFNjFE
NyAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICovOyB9OwogCQk2NUUwRTk0NDExMzND
ODlGMDBCNENCMTAgLyogSlNET01XcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUwRTk0MzExMzNDODlGMDBCNENCMTAgLyogSlNET01XcmFw
cGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBh
Z2UuY3BwICovOyB9OworCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQ
dHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCMzQ4
MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZFMjFDNkMwMTEyNjMzODUwMEE3QkUw
MiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250
ZXh0M0QuY3BwICovOyB9OwogCQk2RTIxQzZDMjExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3ND
b250ZXh0M0RDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAg
Ki87IH07CiAJCTZFM0ZBRDM4MTQ3MzNGNDAwMEU0MjMwNiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFM0ZBRDM2MTQ3MzNGNDAwMEU0MjMwNiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDLmNwcCAqLzsgfTsKQEAgLTE5NjAsOCArMTk2MSw3IEBACiAJCTdCMUVBMENGMTU3NkM1QjUw
MDYwMTc3RCAvKiBKU1VuZG9NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QjFFQTBDRDE1NzZDNUI1MDA2MDE3N0QgLyogSlNVbmRvTWFuYWdl
ci5oICovOyB9OwogCQk3QjkxODREMjE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5MTg0Q0Yx
NTc1OEU0MjAwOTJBQTkzIC8qIFVuZG9NYW5hZ2VyLmNwcCAqLzsgfTsKIAkJN0I5MTg0RDMxNTc1
OEU0MjAwOTJBQTkzIC8qIFVuZG9NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QjkxODREMDE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFn
ZXIuaCAqLzsgfTsKLQkJN0M1MjJENEIxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJs
YXkuY3BwICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNTIyRDQ5MTVCNDc3
RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLzsgfTsKLQkJN0M1MjJENEMxNUI0
NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzUyMkQ0QTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3Zlcmxh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdD
NTIyRDRCMTVCNDc3RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNTIyRDQ5MTVCNDc3RTgwMDlC
N0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmNwcCAqLzsgfTsKIAkJN0UzM0NEMDExMjdGMzQwRDAw
QkU4RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdFMzNDRDAwMTI3RjM0MEQwMEJFOEYxNyAvKiBQdXJnZVByaW9yaXR5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0Uz
N0VGMkUxMzM5MjA4ODAwQjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0UzN0VGMkQxMzM5MjA4ODAw
QjI5MjUwIC8qIFN1YnJlc291cmNlTG9hZGVyQ0YuY3BwICovOyB9OwogCQk3RTk5QUY1MTBCMTM4
NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFOTlBRjUyMEIxMzg0NjQ2OEZC
MDFBNSAvKiBXaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuY3BwICovOyB9OwpAQCAtNDgyNiw3
ICs0ODI2LDYgQEAKIAkJQjI3NTM1NzQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQ2MEIwNTM4
MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzUwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQ3MEIw
NTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVI
YXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1
MzU0ODBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZUhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEg
LyogTmF0aXZlSW1hZ2VQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc3
MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRBMEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1h
Yy5tbSAqLzsgfTsKIAkJQjI3NTM1NzgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0
QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLzsgfTsKIAkJQjI3NTM1Nzkw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFJlY3RNYWMubW0gKi87IH07CkBAIC04OTUwLDYgKzg5NDksNyBAQAogCQk2NUUwRTk0MzExMzND
ODlGMDBCNENCMTAgLyogSlNET01XcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRE9NV3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUY4
MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQmxvY2tFeGNlcHRp
b25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlUHRyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMjFDNkJGMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFw
aGljc0NvbnRleHQzRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc0NvbnRleHQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMjFD
NkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTNGQUQzNjE0NzMzRjQwMDBFNDIzMDYgLyogSlNX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMDY0LDcgKzEyMDY0LDYgQEAKIAkJQjI3NTM1NDYwQjA1Mzgx
NDAwMkNFNjRGIC8qIEludFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDcwQjA1Mzgx
NDAwMkNFNjRGIC8qIEludFNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDgwQjA1Mzgx
NDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnRTaXplSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QjM0ODA5
MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyNzUzNTRBMEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb2xvck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NEIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmxvYXRQb2lu
dE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NEMwQjA1MzgxNDAw
MkNFNjRGIC8qIEZsb2F0UmVjdE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBGbG9hdFJlY3RNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMzYzNSw3ICsyMzYzNCw2IEBACiAJCQkJN0FDRDg4RDQxNEMwOEJENjAwODRFREQyIC8qIElu
c3BlY3RvckluZGV4ZWREQkFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyMEQ2MjkyNzEyNTM2
OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QUE1MURENjE0ODUwNkE5MDBBRDI3NTIgLyogSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBp
biBIZWFkZXJzICovLAotCQkJCTdDNTIyRDRDMTVCNDc4QjIwMDlCN0M5NSAvKiBJbnNwZWN0b3JP
dmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0RjZGREQ2NTEzNDFERUREMDAxRjhFRTMgLyog
SW5zcGVjdG9yUGFnZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5RjBENkIyRjEyMUJGRUJB
MDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODJBQjE3NzYxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclJlc291cmNlQWdlbnQuaCBpbiBI
ZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>158169</attachid>
            <date>2012-08-13 17:48:46 -0700</date>
            <delta_ts>2012-08-15 01:22:23 -0700</delta_ts>
            <desc>Screenshot</desc>
            <filename>Screen shot 2012-08-13 at 5.45.12 PM.png</filename>
            <type>image/png</type>
            <size>29331</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">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
A3/2Z3/2V3/1V4uLi0899VS95V6v9wd/8Ad/+Zd/+fu///tPP/30bm7LocKWjgOlVKPZtoIu80cr
EoAsy9fWO51Oz1iO4jhJkjiO3eRfmQAVaBwTVsDET4/px1W44PHHH3/44Ye//OUvW2s//OEPA4C1
9rHHHvuLv/iL//zP/3zooYd+8Rd/cXV19Qot/MIv/MJb3/rWj370o48//vjXvva197///RMnvOc9
77ntttvm5+dnZ2cfffTR++6779Zbb33d614HAGfPnv3t3/7tOI63ayfLsscff/xf//Vfz549+973
vndubq7e8vvf//6HH374gx/84N///d//4Ac/8A9lNbE7LggCHadNyzIcZuvrnV5/YEWiOE7SNIqi
igLqvkBnCOzEF+jv9oHDVbjgXe9610/91E+dOXPmne98p/PD/9M//ZOIfOlLX/r85z9/6tSppaWl
J598cruPf/7zn/+v//qvX/3VXwWAIAh+67d+63Of+9xXvvKVidMee+yxf//3f3f1Nh555JHPfvaz
xhgA+MIXvvC+973vCu382I/92NmzZ++99973vve9H/vYx+66666qza9+9av/9m//9jM/8zMAQEQ/
//M/f03355BgImhXWfVJkoRxooIgbTZr4YAxCvC+wCOCq3BB9QXPzc11Oh0A+MpXvrKwsBCGYRiG
b3vb25544okHHnhgu48/9dRTi4uLldPuLW95CwB84xvfmDjt137t15aWlr70pS8BwLe//e1ut/sf
//Efg8GAmRuNxpXbSZJkcXFxc9df/OIXz549Ozs76942m80j/rButhScnEdRXE37E4ZAnQU2OwjA
+wIPF3ada3Tp0iWt9SOPPLKTk3u93qVLlzqdTrPZBIA3vvGNWututztx2sLCwrve9a5PfepTs7Oz
Dz74IBF95jOfWVtbe/e7372rdup4+eWXL126VD/in1qH6j5QmS9QeVW9L/AoY9eu9de+9rVPPPGE
8+cBgIh88Ytf3O7ks2fPWmu//vWvu7cXL140xtx7772bz3z00Ucff/zxf/zHf/yd3/mdxx577F/+
5V++8IUvPPzww7ttp8Lp06eXlpaeffbZ3V7gIUZdq6/b/Jtjgd4XeARxJS7o9Xq9Xs+97vf7znX/
G7/xGxcuXPjABz6wsrJy8eLFD33oQ85Kz7Isz3N3cvX6fe9735kzZ5544gl3/Omnnz579uzP/uzP
bu7r537u56IoUkrNzMz85E/+ZLvdPnXqVPXYXaEdY0w9NlF1/Su/8ita64997GPu+DPPPHPp0iVX
52s4HH74wx9++eWXr+WGHXBMOA62w8QJ4CngCED9+Z//uXu1tJEvbZiljXyxHS62gief+OzHP/7x
1dXVt73tba+88srf/M3fPPfcc29+85t/4id+4sSJEx/96Ec/8pGPfOITn/jd3/3dt7zlLU899dRf
//VfP//88ydOnMiy7G//9m/d6wcffPCRRx75yEc+0u/319bWPvWpT/3DP/zD8ePHN4+DiC5cuPCH
f/iH8/PziLiysvKbv/mb8/Pz7q9hGL7zne/c3M6nP/3pj3/84y+88MKtt976hje8oT6Md7zjHffc
c8+HPvShT37yk08++SQzZ1mWpukb3/jG73//+7/8y7/8pje96U1velM1gO8v3fibPR2YMPKvygge
+4a7F2/mPR9Vxfruue53z/e/e677+lsarz+dvP6WxhU+lmXZSy+9dPvtt2t9dY+DiDz33HNEdOed
d17htOFwGEXR5te7bacOa+3KysqxY8cGg4GLTTosLS1VHsfND/3nvrNfdQE9jjze9YZJ3fyGb3W1
Da5xnWIYhjsXSESsR/u2Q134NxPBztupQyl17NgxAKgTAQBMhB7qd9/Phx77jCl5/I5iWq6Hh8dm
eC7w8PAAqNsIgSZNAACXO/mPLh1yjgg0JQHNpDoOtrjS/3MPDHJe65l+zrnxvgOPPcaVH7/cyk15
/EZc4AbXilVvaF9aHvayQysDxopWOJOo1yzGJ2dC2GSkDXJ+dS370dJgrW/dyTdppB6HEFP7+I3i
CBsD++Ll4ffO9166PNgYbLnf1mHD3SfTW+bCheakA/Vyx5xbyZ59tXdTRuVxRDBtj99oHHFAJ9oB
QrLQ1Gs9c4hV47WeWe+bjYF9ZXXYHdqZdPLLcCcAQCtW7URvPsHD45oxtY/f2Pa7N8tQ2WcMcrnc
yV9aHl7u5P1tTKEkpIVmcOt8tNAM4sDbCB57hql9/LbZivtQI7ey1jMX17ML6/mWGpAmmEn1iXZw
vB3OpDrw/gKPvcPUPn5HkQvgahpQ3c3ricBjzzGdj98R5QIPD48JHPI8Ag8Pjx3Cc4GHhweA5wIP
Dw8HzwUeHh4Angs8PDwcPBd4eHgAeC7w8PBw8Fzg4eEB4LnAw8PDwXOBh4cHgOcCDw8PB88FHh4e
AJ4LPDw8HDwXeHh4AHgu8PDwcPBc4OHhAeC5wMPDw8FzgYeHB4DnAg8PDwfPBR4eHgCeCzw8PBw8
F3h4eAB4LvDw8HDwXODh4QHgucDDw8PBc4GHhweA5wIPDw8HzwUeHh4Angs8PDwcPBd4eHgAeC7w
8PBw8Fzg4eEBAPD/AQRL6d9AWYfrAAAAAElFTkSuQmCC
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>158170</attachid>
            <date>2012-08-13 17:53:01 -0700</date>
            <delta_ts>2012-08-13 19:51:23 -0700</delta_ts>
            <desc>Screenshot 2 - the image has disappered</desc>
            <filename>Screen shot 2012-08-13 at 5.51.27 PM.png</filename>
            <type>image/png</type>
            <size>4459</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">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
1AAAAABJRU5ErkJggg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158178</attachid>
            <date>2012-08-13 18:29:13 -0700</date>
            <delta_ts>2012-08-13 19:51:23 -0700</delta_ts>
            <desc>Shadow DOM-based approach - Delete old shadow roots</desc>
            <filename>wip12250b</filename>
            <type>text/plain</type>
            <size>15373</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMjU0NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2Myw3IEBACiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNm1vZGlmeUVOUzBfMTFFQWx0ZXJhdGlvbkVOU18x
OFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUVOU18xNEVVc2VyVHJpZ2dl
cmVkRQogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbkMxRVBOU181RnJhbWVFCitfX1pON1dlYkNvcmUxNEZyYW1lU2Vs
ZWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTRQbHVnaW5Eb2N1bWVudDEycGx1Z2luV2lkZ2V0RXYK
IF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZmaW5nRXYKIF9f
Wk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNnN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlRXYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHJldmlzaW9uIDEyNTQ0MykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNiArODksMjQgQEAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hT
aGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQogCit2b2lkIEVsZW1l
bnRTaGFkb3c6OnJlbW92ZVNoYWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290PiBzaGFkb3dS
b290VG9SZW1vdmUpCit7CisgICAgLy8gRG9udCBwcm90ZWN0IHRoaXMgcmVmIGNvdW50LgorICAg
IEVsZW1lbnQqIHNoYWRvd0hvc3QgPSBob3N0KCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxQb3BTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3RUb1JlbW92ZS5n
ZXQoKSk7CisgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1
YnRyZWUoc2hhZG93Um9vdFRvUmVtb3ZlLmdldCgpKTsKKyAgICBtX3NoYWRvd1Jvb3RzLnJlbW92
ZShzaGFkb3dSb290VG9SZW1vdmUuZ2V0KCkpOworCisgICAgaWYgKHNoYWRvd1Jvb3RUb1JlbW92
ZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgc2hhZG93Um9vdFRvUmVtb3ZlLT5kZXRhY2goKTsKKwor
ICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50KCktPmFkb3B0SWZOZWVkZWQoc2hhZG93Um9vdFRvUmVt
b3ZlLmdldCgpKTsKKyAgICBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXIoc2hhZG93SG9zdCkubm90
aWZ5KHNoYWRvd1Jvb3RUb1JlbW92ZS5nZXQoKSk7CisKKyAgICBpbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKHNoYWRvd0hvc3QpOworfQorCiB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRv
d1Jvb3RzKCkKIHsKICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHJldmlzaW9uIDEyNTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcg
QEAKIAogICAgIHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKICAgICB2b2lkIGFkZFNoYWRv
d1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFzc1JlZlB0cjxTaGFkb3dSb290PiwgU2hhZG93
Um9vdDo6U2hhZG93Um9vdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVNo
YWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290Pik7CiAKICAgICB2b2lkIGF0dGFjaCgpOwog
ICAgIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTI1NDQzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEwIEBACiAjaW5j
bHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpbmNsdWRl
ICJFbGVtZW50U2hhZG93LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTaGFkb3dSb290LmgiCisKICNkZWZpbmUgRURJVF9ERUJVRyAwCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTExOCw2ICsxMjIsMTAgQEAKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJl
Y3Rpb25hbCh0cnVlKTsKIH0KIAorRnJhbWVTZWxlY3Rpb246On5GcmFtZVNlbGVjdGlvbigpCit7
Cit9CisKIEVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1
bWVudEVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBtX3Nl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CkBAIC0yODYsNyArMjk0LDU5IEBACiAgICAg
CiAgICAgaWYgKCFzLmlzTm9uZSgpICYmICEob3B0aW9ucyAmIERvTm90U2V0Rm9jdXMpKQogICAg
ICAgICBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7Ci0gICAgCisKKyAgICAvLyBGSVhNRTogTW92
ZSB0aGlzIHRvIGEgc2VwYXJhdGUgbWVtYmVyIGZ1bmN0aW9uLgorICAgIFBvc2l0aW9uIHN0YXJ0
UG9zaXRpb24gPSBtX3NlbGVjdGlvbi5zdGFydCgpOworICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9u
ID0gbV9zZWxlY3Rpb24uZW5kKCk7CisgICAgSFRNTEVsZW1lbnQqIG5ld0NvbnRyb2xTZWxlY3Rp
b25Ib3N0ID0gMDsKKyAgICBpZiAoTm9kZSogc3RhcnRQb3NpdGlvbk5vZGUgPSBzdGFydFBvc2l0
aW9uLmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYWtl
IHRoaXMgY29uZGl0aW9uIG1vcmUgcm9idXN0LgorICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbk5v
ZGUgPT0gZW5kUG9zaXRpb24uY29tcHV0ZU5vZGVCZWZvcmVQb3NpdGlvbigpICYmIHN0YXJ0UG9z
aXRpb25Ob2RlLT5oYXNUYWdOYW1lKGltZ1RhZykpCisgICAgICAgICAgICBuZXdDb250cm9sU2Vs
ZWN0aW9uSG9zdCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oc3RhcnRQb3NpdGlvbk5vZGUp
OworICAgIH0KKworICAgIGlmIChuZXdDb250cm9sU2VsZWN0aW9uSG9zdCAhPSAobV9jb250cm9s
U2VsZWN0aW9uID8gbV9jb250cm9sU2VsZWN0aW9uLT5zaGFkb3dIb3N0KCkgOiAwKSkgeworICAg
ICAgICBpZiAobV9jb250cm9sU2VsZWN0aW9uKSB7CisgICAgICAgICAgICBFbGVtZW50KiBzaGFk
b3dIb3N0ID0gbV9jb250cm9sU2VsZWN0aW9uLT5zaGFkb3dIb3N0KCk7CisgICAgICAgICAgICBF
bGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2NvbnRyb2xTZWxlY3Rpb24tPnNoYWRvd0hvc3QoKS0+
c2hhZG93KCk7CisgICAgICAgICAgICBBU1NFUlQoc2hhZG93KTsKKyAgICAgICAgICAgIHNoYWRv
dy0+cmVtb3ZlU2hhZG93Um9vdChtX2NvbnRyb2xTZWxlY3Rpb24pOworICAgICAgICAgICAgc2hh
ZG93SG9zdC0+ZGV0YWNoKCk7CisgICAgICAgICAgICBzaGFkb3dIb3N0LT5hdHRhY2goKTsKKyAg
ICAgICAgICAgIG1fY29udHJvbFNlbGVjdGlvbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG5ld0NvbnRyb2xTZWxlY3Rpb25Ib3N0KSB7CisgICAgICAgICAgICBtX2NvbnRyb2xTZWxlY3Rp
b24gPSBTaGFkb3dSb290OjpjcmVhdGUobmV3Q29udHJvbFNlbGVjdGlvbkhvc3QsIFNoYWRvd1Jv
b3Q6OkF1dGhvclNoYWRvd1Jvb3QsIEFTU0VSVF9OT19FWENFUFRJT04pOworCisgICAgICAgICAg
ICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGNvbnRhaW5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUo
bV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBjb250YWluZXItPnNldEF0dHJpYnV0
ZShzdHlsZUF0dHIsICJwb3NpdGlvbjogcmVsYXRpdmU7Iik7CisgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugd2FudCB0byBiZSB1c2luZyB0aGUgc2hhZG93IGVsZW1lbnQgaGVyZSBidXQgaXQgc2Vl
bXMgbGlrZSB0aGUgc2hhZG93IGVsZW1lbnQgZG9lc24ndCBwcmVzZXJ2ZQorICAgICAgICAgICAg
Ly8gdGhlIGludHJpbnNpYyB3aWR0aCAmIGhlaWdodCBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAg
ICAvLyBjb250YWluZXItPmFwcGVuZENoaWxkKG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVs
ZW1lbnQoc2hhZG93VGFnLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSk7CisgICAgICAgICAgICBjb250
YWluZXItPmFwcGVuZENoaWxkKHN0YXRpY19jYXN0PE5vZGUqPihuZXdDb250cm9sU2VsZWN0aW9u
SG9zdCktPmNsb25lTm9kZShmYWxzZSkpOyAvLyBObyBkZWVwIGNvcHkuCisKKyAgICAgICAgICAg
IFN0cmluZyByZXNpemVCb3hEZWZhdWx0U3R5bGUgPSAid2lkdGg6IDRweDsgaGVpZ2h0OiA0cHg7
IHBvc2l0aW9uOiBhYnNvbHV0ZTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJhY2tncm91bmQ6
IHdoaXRlOyAiOworCisgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHVwcGVyTGVmdENv
cm5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAg
ICAgICAgICB1cHBlckxlZnRDb3JuZXItPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHJlc2l6ZUJv
eERlZmF1bHRTdHlsZSArICJsZWZ0OiAtMnB4OyB0b3A6IC0ycHg7Iik7CisgICAgICAgICAgICBj
b250YWluZXItPmFwcGVuZENoaWxkKHVwcGVyTGVmdENvcm5lcik7CisKKyAgICAgICAgICAgIFJl
ZlB0cjxIVE1MRWxlbWVudD4gdXBwZXJSaWdodENvcm5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVh
dGUobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICB1cHBlclJpZ2h0Q29ybmVyLT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCByZXNpemVCb3hEZWZhdWx0U3R5bGUgKyAicmlnaHQ6IC0y
cHg7IHRvcDogLTJweDsiKTsKKyAgICAgICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodXBw
ZXJSaWdodENvcm5lcik7CisKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbG93ZXJM
ZWZ0Q29ybmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpKTsK
KyAgICAgICAgICAgIHVwcGVyUmlnaHRDb3JuZXItPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHJl
c2l6ZUJveERlZmF1bHRTdHlsZSArICJsZWZ0OiAtMnB4OyBib3R0b206IC0ycHg7Iik7CisgICAg
ICAgICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGxvd2VyTGVmdENvcm5lcik7CisKKyAgICAg
ICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbG93ZXJSaWdodENvcm5lciA9IEhUTUxEaXZFbGVt
ZW50OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICB1cHBlclJpZ2h0
Q29ybmVyLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCByZXNpemVCb3hEZWZhdWx0U3R5bGUgKyAi
cmlnaHQ6IC0ycHg7IGJvdHRvbTogLTJweDsiKTsKKyAgICAgICAgICAgIGNvbnRhaW5lci0+YXBw
ZW5kQ2hpbGQobG93ZXJSaWdodENvcm5lcik7CisKKyAgICAgICAgICAgIG1fY29udHJvbFNlbGVj
dGlvbi0+YXBwZW5kQ2hpbGQoY29udGFpbmVyLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKIAogICAgIC8vIEFsd2F5cyBj
bGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBuYXZpZ2F0aW9uLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTI1
NDQzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAKICAgICB9CiAKICAgICBleHBsaWNpdCBGcmFtZVNl
bGVjdGlvbihGcmFtZSogPSAwKTsKKyAgICB+RnJhbWVTZWxlY3Rpb24oKTsKIAogICAgIEVsZW1l
bnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5yb290
RWRpdGFibGVFbGVtZW50KCk7IH0KICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50T3JE
b2N1bWVudEVsZW1lbnQoKSBjb25zdDsKQEAgLTMwMCw2ICszMDEsNyBAQAogICAgIFRleHRHcmFu
dWxhcml0eSBtX2dyYW51bGFyaXR5OwogCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV90eXBp
bmdTdHlsZTsKKyAgICBSZWZQdHI8U2hhZG93Um9vdD4gbV9jb250cm9sU2VsZWN0aW9uOwogCiAg
ICAgVGltZXI8RnJhbWVTZWxlY3Rpb24+IG1fY2FyZXRCbGlua1RpbWVyOwogICAgIC8vIFRoZSBw
YWludGVkIGJvdW5kcyBvZiB0aGUgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDEyNTQ0MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk5
LDYgKzQ5OSwxNSBAQAogewogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIE5vZGUqIGlubmVyTm9kZSA9IHRhcmdldE5v
ZGUoZXZlbnQpOworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBpbm5lck5vZGUgPyBpbm5l
ck5vZGUtPnNoYWRvd1Jvb3QoKSA6IDA7CisgICAgaWYgKGlubmVyTm9kZSAmJiBpbm5lck5vZGUt
Pmhhc1RhZ05hbWUoaW1nVGFnKSAmJiBpbm5lck5vZGUtPmlzQ29udGVudFJpY2hseUVkaXRhYmxl
KCkpIHsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRG93bkRpc3BhdGNo
aW5nU2VsZWN0U3RhcnQoaW5uZXJOb2RlLAorICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbihw
b3NpdGlvbkJlZm9yZU5vZGUoaW5uZXJOb2RlKSwgcG9zaXRpb25BZnRlck5vZGUoaW5uZXJOb2Rl
KSksIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICB9IGVsc2UgaWYgKHNoYWRvd1Jvb3QgJiYg
c2hhZG93Um9vdC0+aG9zdCgpLT5oYXNUYWdOYW1lKGltZ1RhZykgJiYgc2hhZG93Um9vdC0+aG9z
dCgpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgICAgIHJldHVybiB1cGRhdGVT
ZWxlY3Rpb25Gb3JNb3VzZURvd25EaXNwYXRjaGluZ1NlbGVjdFN0YXJ0KGlubmVyTm9kZSwKKyAg
ICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25CZWZvcmVOb2RlKHNoYWRvd1Jvb3Qt
Pmhvc3QoKSksIHBvc2l0aW9uQWZ0ZXJOb2RlKHNoYWRvd1Jvb3QtPmhvc3QoKSkpLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CisgICAgfQorCiAgICAgaWYgKCEoaW5uZXJOb2RlICYmIGlubmVyTm9k
ZS0+cmVuZGVyZXIoKSAmJiBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjU0NDMpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4MDEs
NiArMTgwMSw3IEBACiAJCTY1REYzMjYxMDlEMUUxOTkwMDBCRTMyNSAvKiBVc2VyQWdlbnRTdHls
ZVNoZWV0c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjU2NTgxQUYwOUQxNEVFNjAwMEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0
YS5jcHAgKi87IH07CiAJCTY1RTBFOTQ0MTEzM0M4OUYwMEI0Q0IxMCAvKiBKU0RPTVdyYXBwZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RTBFOTQz
MTEzM0M4OUYwMEI0Q0IxMCAvKiBKU0RPTVdyYXBwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyog
UGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CisJCTZCMzQ4MDk0MEVF
RjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2
ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNkUyMUM2QzAxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjFDNkJGMTEy
NjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgKi87IH07CiAJCTZFMjFDNkMy
MTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjFDNkMxMTEyNjMzOTkwMEE3QkUw
MiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNwcCAqLzsgfTsKIAkJNkUzRkFEMzgxNDczM0Y0MDAw
RTQyMzA2IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUzRkFEMzYxNDczM0Y0MDAwRTQyMzA2
IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwICovOyB9OwpAQCAtMTk2MCw4ICsx
OTYxLDcgQEAKIAkJN0IxRUEwQ0YxNTc2QzVCNTAwNjAxNzdEIC8qIEpTVW5kb01hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMUVBMENEMTU3
NkM1QjUwMDYwMTc3RCAvKiBKU1VuZG9NYW5hZ2VyLmggKi87IH07CiAJCTdCOTE4NEQyMTU3NThF
NDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QjkxODRDRjE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFn
ZXIuY3BwICovOyB9OwogCQk3QjkxODREMzE1NzU4RTQyMDA5MkFBOTMgLyogVW5kb01hbmFnZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCOTE4NEQw
MTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5oICovOyB9OwotCQk3QzUyMkQ0QjE1QjQ3
N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0M1MjJENDkxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJs
YXkuY3BwICovOyB9OwotCQk3QzUyMkQ0QzE1QjQ3OEIyMDA5QjdDOTUgLyogSW5zcGVjdG9yT3Zl
cmxheS5oICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNTIyRDRBMTVCNDc3
RTgwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0M1MjJENEIxNUI0NzdFODAwOUI3Qzk1IC8qIElu
c3BlY3Rvck92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0M1MjJENDkxNUI0NzdFODAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuY3Bw
ICovOyB9OwogCQk3RTMzQ0QwMTEyN0YzNDBEMDBCRThGMTcgLyogUHVyZ2VQcmlvcml0eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0UzM0NEMDAxMjdG
MzQwRDAwQkU4RjE3IC8qIFB1cmdlUHJpb3JpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RTM3RUYyRTEzMzkyMDg4MDBCMjkyNTAgLyogU3Vi
cmVzb3VyY2VMb2FkZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3RTM3RUYyRDEzMzkyMDg4MDBCMjkyNTAgLyogU3VicmVzb3VyY2VMb2FkZXJD
Ri5jcHAgKi87IH07CiAJCTdFOTlBRjUxMEIxMzg0NjQ2OEZCMDFBNSAvKiBXaW5kb3dGb2N1c0Fs
bG93ZWRJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0U5OUFGNTIwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZElu
ZGljYXRvci5jcHAgKi87IH07CkBAIC00ODI2LDcgKzQ4MjYsNiBAQAogCQlCMjc1MzU3NDBCMDUz
ODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1NDYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3NTBC
MDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDcwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3
NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQ4MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRT
aXplSGFzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzcwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1
NEEwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yTWFjLm1tICovOyB9OwogCQlCMjc1MzU3ODBCMDUz
ODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50TWFjLm1tICovOyB9OwogCQlCMjc1MzU3OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3
NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdE1hYy5tbSAqLzsgfTsKQEAgLTg5NTAs
NiArODk0OSw3IEBACiAJCTY1RTBFOTQzMTEzM0M4OUYwMEI0Q0IxMCAvKiBKU0RPTVdyYXBwZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01XcmFwcGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1RjgwNjk3MDU0RDlGODYwMDhCRjc3NiAvKiBCbG9j
a0V4Y2VwdGlvbnMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBCbG9ja0V4Y2VwdGlvbnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk2NUZFQTg2ODA5ODMzQURFMDBC
RUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCMzQ4MDkyMEVFRjUwRDQw
MEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmF0aXZlSW1hZ2VQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUy
MUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNELmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAyIC8qIEdyYXBo
aWNzQ29udGV4dDNEQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZF
M0ZBRDM2MTQ3MzNGNDAwMEU0MjMwNiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIwNjQsNyAr
MTIwNjQsNiBAQAogCQlCMjc1MzU0NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjc1MzU0NzBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50U2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMjc1MzU0ODBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZUhhc2guaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludFNpemVIYXNoLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJ
bWFnZVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlSW1hZ2VQ
dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NEEwQjA1MzgxNDAwMkNF
NjRGIC8qIENvbG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IENvbG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0QjBC
MDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBGbG9hdFBvaW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZsb2F0UmVjdE1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNjM1LDcgKzIzNjM0LDYgQEAKIAkJCQk3
QUNEODhENDE0QzA4QkQ2MDA4NEVERDIgLyogSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdBQTUxREQ2MTQ4NTA2QTkwMEFEMjc1
MiAvKiBJbnNwZWN0b3JNZW1vcnlBZ2VudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0M1MjJENEMx
NUI0NzhCMjAwOUI3Qzk1IC8qIEluc3BlY3Rvck92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTRGNkZERDY1MTM0MURFREQwMDFGOEVFMyAvKiBJbnNwZWN0b3JQYWdlQWdlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTlGMEQ2QjJGMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxl
ckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4MkFCMTc3NjEyNUM4MjY3MDBDNTA2OUQgLyog
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIGluIEhlYWRlcnMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158194</attachid>
            <date>2012-08-13 19:51:23 -0700</date>
            <delta_ts>2012-08-15 01:17:10 -0700</delta_ts>
            <desc>Shadow DOM-based approach - prototype 2; just adds resizing corners</desc>
            <filename>wip12250c</filename>
            <type>text/plain</type>
            <size>16782</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMjU0NDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2Myw3IEBACiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNm1vZGlmeUVOUzBfMTFFQWx0ZXJhdGlvbkVOU18x
OFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUVOU18xNEVVc2VyVHJpZ2dl
cmVkRQogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbkMxRVBOU181RnJhbWVFCitfX1pON1dlYkNvcmUxNEZyYW1lU2Vs
ZWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTRQbHVnaW5Eb2N1bWVudDEycGx1Z2luV2lkZ2V0RXYK
IF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZmaW5nRXYKIF9f
Wk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNnN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlRXYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHJldmlzaW9uIDEyNTQ0MykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNiArODksMjQgQEAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hT
aGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQogCit2b2lkIEVsZW1l
bnRTaGFkb3c6OnJlbW92ZVNoYWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290PiBzaGFkb3dS
b290VG9SZW1vdmUpCit7CisgICAgLy8gRG9udCBwcm90ZWN0IHRoaXMgcmVmIGNvdW50LgorICAg
IEVsZW1lbnQqIHNoYWRvd0hvc3QgPSBob3N0KCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxQb3BTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3RUb1JlbW92ZS5n
ZXQoKSk7CisgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1
YnRyZWUoc2hhZG93Um9vdFRvUmVtb3ZlLmdldCgpKTsKKyAgICBtX3NoYWRvd1Jvb3RzLnJlbW92
ZShzaGFkb3dSb290VG9SZW1vdmUuZ2V0KCkpOworCisgICAgaWYgKHNoYWRvd1Jvb3RUb1JlbW92
ZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgc2hhZG93Um9vdFRvUmVtb3ZlLT5kZXRhY2goKTsKKwor
ICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50KCktPmFkb3B0SWZOZWVkZWQoc2hhZG93Um9vdFRvUmVt
b3ZlLmdldCgpKTsKKyAgICBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXIoc2hhZG93SG9zdCkubm90
aWZ5KHNoYWRvd1Jvb3RUb1JlbW92ZS5nZXQoKSk7CisKKyAgICBpbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKHNoYWRvd0hvc3QpOworfQorCiB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRv
d1Jvb3RzKCkKIHsKICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHJldmlzaW9uIDEyNTQ0MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcg
QEAKIAogICAgIHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKICAgICB2b2lkIGFkZFNoYWRv
d1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFzc1JlZlB0cjxTaGFkb3dSb290PiwgU2hhZG93
Um9vdDo6U2hhZG93Um9vdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVNo
YWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290Pik7CiAKICAgICB2b2lkIGF0dGFjaCgpOwog
ICAgIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTI1NDQzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDEyIEBACiAjaW5j
bHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpbmNsdWRl
ICJFbGVtZW50U2hhZG93LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MU2hhZG93RWxlbWVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRl
ICJTaGFkb3dSb290LmgiCisKICNkZWZpbmUgRURJVF9ERUJVRyAwCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTExOCw2ICsxMjQsMTAgQEAKICAgICAgICAgbV9zZWxlY3Rpb24uc2V0SXNEaXJl
Y3Rpb25hbCh0cnVlKTsKIH0KIAorRnJhbWVTZWxlY3Rpb246On5GcmFtZVNlbGVjdGlvbigpCit7
Cit9CisKIEVsZW1lbnQqIEZyYW1lU2VsZWN0aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1
bWVudEVsZW1lbnQoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBtX3Nl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CkBAIC0yNDAsNiArMjUwLDM2IEBACiAgICAg
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZ3JhbnVsYXJpdHkpOwogfQogCitlbnVtIFJlc2l6
ZVR5cGUgeworICAgIFVwcGVyTGVmdCwKKyAgICBVcHBlclJpZ2h0LAorICAgIExvd2VyTGVmdCwK
KyAgICBMb3dlclJpZ2h0LAorfTsKKworY2xhc3MgQ29udHJvbFNlbGVjdGlvblJlc2l6ZUJveEVs
ZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENvbnRyb2xTZWxlY3Rpb25SZXNpemVCb3hFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQq
IGRvY3VtZW50LCBSZXNpemVUeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENvbnRyb2xTZWxlY3Rpb25SZXNpemVCb3hFbGVtZW50KGRvY3VtZW50LCB0eXBlKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQp
CisgICAgeworICAgICAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZl
bnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBTdGFydCByZXNpemUgaGVyZS4gV2UgbmVlZCBhZGQgc29tZSBob29rcyB0byBFdmVudEhh
bmRsZXIuCisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzaXplVHlwZSBtX3R5
cGU7CisKKyAgICBDb250cm9sU2VsZWN0aW9uUmVzaXplQm94RWxlbWVudChEb2N1bWVudCogZG9j
dW1lbnQsIFJlc2l6ZVR5cGUgdHlwZSkKKyAgICAgICAgOiBIVE1MRGl2RWxlbWVudChIVE1MTmFt
ZXM6OmRpdlRhZywgZG9jdW1lbnQpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgeyB9Cit9
OworCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgbmV3U2VsZWN0aW9uLCBTZXRTZWxlY3Rpb25PcHRpb25zIG9wdGlvbnMsIEN1cnNvckFs
aWduT25TY3JvbGwgYWxpZ24sIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsKICAgICBi
b29sIGNsb3NlVHlwaW5nID0gb3B0aW9ucyAmIENsb3NlVHlwaW5nOwpAQCAtMjg2LDcgKzMyNiw1
OSBAQAogICAgIAogICAgIGlmICghcy5pc05vbmUoKSAmJiAhKG9wdGlvbnMgJiBEb05vdFNldEZv
Y3VzKSkKICAgICAgICAgc2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpOwotICAgIAorCisgICAgLy8g
RklYTUU6IE1vdmUgdGhpcyB0byBhIHNlcGFyYXRlIG1lbWJlciBmdW5jdGlvbi4KKyAgICBQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gbV9zZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBQb3NpdGlvbiBl
bmRQb3NpdGlvbiA9IG1fc2VsZWN0aW9uLmVuZCgpOworICAgIEhUTUxFbGVtZW50KiBuZXdDb250
cm9sU2VsZWN0aW9uSG9zdCA9IDA7CisgICAgaWYgKE5vZGUqIHN0YXJ0UG9zaXRpb25Ob2RlID0g
c3RhcnRQb3NpdGlvbi5jb21wdXRlTm9kZUFmdGVyUG9zaXRpb24oKSkgeworICAgICAgICAvLyBG
SVhNRTogTWFrZSB0aGlzIGNvbmRpdGlvbiBtb3JlIHJvYnVzdC4KKyAgICAgICAgaWYgKHN0YXJ0
UG9zaXRpb25Ob2RlID09IGVuZFBvc2l0aW9uLmNvbXB1dGVOb2RlQmVmb3JlUG9zaXRpb24oKSAm
JiBzdGFydFBvc2l0aW9uTm9kZS0+aGFzVGFnTmFtZShpbWdUYWcpKQorICAgICAgICAgICAgbmV3
Q29udHJvbFNlbGVjdGlvbkhvc3QgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KHN0YXJ0UG9z
aXRpb25Ob2RlKTsKKyAgICB9CisKKyAgICBpZiAobmV3Q29udHJvbFNlbGVjdGlvbkhvc3QgIT0g
KG1fY29udHJvbFNlbGVjdGlvbiA/IG1fY29udHJvbFNlbGVjdGlvbi0+c2hhZG93SG9zdCgpIDog
MCkpIHsKKyAgICAgICAgaWYgKG1fY29udHJvbFNlbGVjdGlvbikgeworICAgICAgICAgICAgRWxl
bWVudCogc2hhZG93SG9zdCA9IG1fY29udHJvbFNlbGVjdGlvbi0+c2hhZG93SG9zdCgpOworICAg
ICAgICAgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gbV9jb250cm9sU2VsZWN0aW9uLT5zaGFk
b3dIb3N0KCktPnNoYWRvdygpOworICAgICAgICAgICAgQVNTRVJUKHNoYWRvdyk7CisgICAgICAg
ICAgICBzaGFkb3ctPnJlbW92ZVNoYWRvd1Jvb3QobV9jb250cm9sU2VsZWN0aW9uKTsKKyAgICAg
ICAgICAgIHNoYWRvd0hvc3QtPmRldGFjaCgpOworICAgICAgICAgICAgc2hhZG93SG9zdC0+YXR0
YWNoKCk7CisgICAgICAgICAgICBtX2NvbnRyb2xTZWxlY3Rpb24gPSAwOworICAgICAgICB9Cisg
ICAgICAgIGlmIChuZXdDb250cm9sU2VsZWN0aW9uSG9zdCkgeworICAgICAgICAgICAgbV9jb250
cm9sU2VsZWN0aW9uID0gU2hhZG93Um9vdDo6Y3JlYXRlKG5ld0NvbnRyb2xTZWxlY3Rpb25Ib3N0
LCBTaGFkb3dSb290OjpBdXRob3JTaGFkb3dSb290LCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKwor
ICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjb250YWluZXIgPSBIVE1MRGl2RWxlbWVu
dDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgY29udGFpbmVyLT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAicG9zaXRpb246IHJlbGF0aXZlOyIpOworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHdhbnQgdG8gYmUgdXNpbmcgdGhlIHNoYWRvdyBlbGVtZW50IGhlcmUg
YnV0IGl0IHNlZW1zIGxpa2UgdGhlIHNoYWRvdyBlbGVtZW50IGRvZXNuJ3QgcHJlc2VydmUKKyAg
ICAgICAgICAgIC8vIHRoZSBpbnRyaW5zaWMgd2lkdGggJiBoZWlnaHQgb2YgdGhlIGltYWdlLgor
ICAgICAgICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChIVE1MU2hhZG93RWxlbWVudDo6Y3Jl
YXRlKEhUTUxOYW1lczo6c2hhZG93VGFnLCBtX2ZyYW1lLT5kb2N1bWVudCgpKSk7CisvLyAgICAg
ICAgICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoc3RhdGljX2Nhc3Q8Tm9kZSo+KG5ld0NvbnRy
b2xTZWxlY3Rpb25Ib3N0KS0+Y2xvbmVOb2RlKGZhbHNlKSk7IC8vIE5vIGRlZXAgY29weS4KKwor
ICAgICAgICAgICAgU3RyaW5nIHJlc2l6ZUJveERlZmF1bHRTdHlsZSA9ICJ3aWR0aDogNHB4OyBo
ZWlnaHQ6IDRweDsgcG9zaXRpb246IGFic29sdXRlOyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsg
YmFja2dyb3VuZDogd2hpdGU7ICI7CisKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4g
dXBwZXJMZWZ0Q29ybmVyID0gQ29udHJvbFNlbGVjdGlvblJlc2l6ZUJveEVsZW1lbnQ6OmNyZWF0
ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBVcHBlckxlZnQpOworICAgICAgICAgICAgdXBwZXJMZWZ0
Q29ybmVyLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCByZXNpemVCb3hEZWZhdWx0U3R5bGUgKyAi
bGVmdDogLTJweDsgdG9wOiAtMnB4OyBjdXJzb3I6IG53c2UtcmVzaXplOyIpOworICAgICAgICAg
ICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZCh1cHBlckxlZnRDb3JuZXIpOworCisgICAgICAgICAg
ICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHVwcGVyUmlnaHRDb3JuZXIgPSBDb250cm9sU2VsZWN0aW9u
UmVzaXplQm94RWxlbWVudDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIFVwcGVyUmlnaHQp
OworICAgICAgICAgICAgdXBwZXJSaWdodENvcm5lci0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwg
cmVzaXplQm94RGVmYXVsdFN0eWxlICsgInJpZ2h0OiAtMnB4OyB0b3A6IC0ycHg7IGN1cnNvcjog
bmVzdy1yZXNpemU7Iik7CisgICAgICAgICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKHVwcGVy
UmlnaHRDb3JuZXIpOworCisgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxvd2VyTGVm
dENvcm5lciA9IENvbnRyb2xTZWxlY3Rpb25SZXNpemVCb3hFbGVtZW50OjpjcmVhdGUobV9mcmFt
ZS0+ZG9jdW1lbnQoKSwgTG93ZXJMZWZ0KTsKKyAgICAgICAgICAgIGxvd2VyTGVmdENvcm5lci0+
c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgcmVzaXplQm94RGVmYXVsdFN0eWxlICsgImxlZnQ6IC0y
cHg7IGJvdHRvbTogLTJweDsgY3Vyc29yOiBuZXN3LXJlc2l6ZTsiKTsKKyAgICAgICAgICAgIGNv
bnRhaW5lci0+YXBwZW5kQ2hpbGQobG93ZXJMZWZ0Q29ybmVyKTsKKworICAgICAgICAgICAgUmVm
UHRyPEhUTUxFbGVtZW50PiBsb3dlclJpZ2h0Q29ybmVyID0gQ29udHJvbFNlbGVjdGlvblJlc2l6
ZUJveEVsZW1lbnQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBMb3dlclJpZ2h0KTsKKyAg
ICAgICAgICAgIGxvd2VyUmlnaHRDb3JuZXItPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHJlc2l6
ZUJveERlZmF1bHRTdHlsZSArICJyaWdodDogLTJweDsgYm90dG9tOiAtMnB4OyBjdXJzb3I6IG53
c2UtcmVzaXplOyIpOworICAgICAgICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChsb3dlclJp
Z2h0Q29ybmVyKTsKKworICAgICAgICAgICAgbV9jb250cm9sU2VsZWN0aW9uLT5hcHBlbmRDaGls
ZChjb250YWluZXIsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICB9CisgICAgfQorCiAg
ICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0
aW9uIHVzZWQgZm9yIHZlcnRpY2FsIGFycm93IG5hdmlnYXRpb24uCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxMjU0NDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2
ICsxMzIsNyBAQAogICAgIH0KIAogICAgIGV4cGxpY2l0IEZyYW1lU2VsZWN0aW9uKEZyYW1lKiA9
IDApOworICAgIH5GcmFtZVNlbGVjdGlvbigpOwogCiAgICAgRWxlbWVudCogcm9vdEVkaXRhYmxl
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsgfQogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgp
IGNvbnN0OwpAQCAtMzAwLDYgKzMwMSw3IEBACiAgICAgVGV4dEdyYW51bGFyaXR5IG1fZ3JhbnVs
YXJpdHk7CiAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxlOworICAgIFJl
ZlB0cjxTaGFkb3dSb290PiBtX2NvbnRyb2xTZWxlY3Rpb247CiAKICAgICBUaW1lcjxGcmFtZVNl
bGVjdGlvbj4gbV9jYXJldEJsaW5rVGltZXI7CiAgICAgLy8gVGhlIHBhaW50ZWQgYm91bmRzIG9m
IHRoZSBjYXJldCBpbiBhYnNvbHV0ZSBjb29yZGluYXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTI1NDQzKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTksNiArNDk5LDE1IEBACiB7
CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAgICAgTm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CisgICAg
U2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGlubmVyTm9kZSA/IGlubmVyTm9kZS0+c2hhZG93Um9v
dCgpIDogMDsKKyAgICBpZiAoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+aGFzVGFnTmFtZShpbWdU
YWcpICYmIGlubmVyTm9kZS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICBy
ZXR1cm4gdXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEb3duRGlzcGF0Y2hpbmdTZWxlY3RTdGFydChp
bm5lck5vZGUsCisgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQmVmb3JlTm9k
ZShpbm5lck5vZGUpLCBwb3NpdGlvbkFmdGVyTm9kZShpbm5lck5vZGUpKSwgQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpOworICAgIH0gZWxzZSBpZiAoc2hhZG93Um9vdCAmJiBzaGFkb3dSb290LT5ob3N0
KCktPmhhc1RhZ05hbWUoaW1nVGFnKSAmJiBzaGFkb3dSb290LT5ob3N0KCktPmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkpIHsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZVNlbGVjdGlvbkZvck1vdXNl
RG93bkRpc3BhdGNoaW5nU2VsZWN0U3RhcnQoaW5uZXJOb2RlLAorICAgICAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUoc2hhZG93Um9vdC0+aG9zdCgpKSwgcG9zaXRp
b25BZnRlck5vZGUoc2hhZG93Um9vdC0+aG9zdCgpKSksIENoYXJhY3RlckdyYW51bGFyaXR5KTsK
KyAgICB9CisKICAgICBpZiAoIShpbm5lck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYm
IG1fbW91c2VEb3duTWF5U3RhcnRTZWxlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDEyNTQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgwMSw2ICsxODAxLDcgQEAKIAkJ
NjVERjMyNjEwOUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFBRjA5
RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAqLzsgfTsKIAkJ
NjVFMEU5NDQxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEw
IC8qIEpTRE9NV3JhcHBlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTY1RkVBODY5MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkVBODY4MDk4MzNBREUw
MEJFRDRBQiAvKiBQYWdlLmNwcCAqLzsgfTsKKwkJNkIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8q
IE5hdGl2ZUltYWdlUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RTIxQzZDMDEx
MjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUyMUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8q
IEdyYXBoaWNzQ29udGV4dDNELmNwcCAqLzsgfTsKIAkJNkUyMUM2QzIxMTI2MzM5OTAwQTdCRTAy
IC8qIEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29u
dGV4dDNEQ0cuY3BwICovOyB9OwogCQk2RTNGQUQzODE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTNGQUQzNjE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5jcHAgKi87IH07CkBAIC0xOTYwLDggKzE5NjEsNyBAQAogCQk3QjFF
QTBDRjE1NzZDNUI1MDA2MDE3N0QgLyogSlNVbmRvTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxRUEwQ0QxNTc2QzVCNTAwNjAxNzdEIC8q
IEpTVW5kb01hbmFnZXIuaCAqLzsgfTsKIAkJN0I5MTg0RDIxNTc1OEU0MjAwOTJBQTkzIC8qIFVu
ZG9NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdCOTE4NENGMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5jcHAgKi87IH07CiAJ
CTdCOTE4NEQzMTU3NThFNDIwMDkyQUE5MyAvKiBVbmRvTWFuYWdlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5MTg0RDAxNTc1OEU0MjAwOTJBQTkz
IC8qIFVuZG9NYW5hZ2VyLmggKi87IH07Ci0JCTdDNTIyRDRCMTVCNDc3RTgwMDlCN0M5NSAvKiBJ
bnNwZWN0b3JPdmVybGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QzUyMkQ0OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi87IH07Ci0J
CTdDNTIyRDRDMTVCNDc4QjIwMDlCN0M5NSAvKiBJbnNwZWN0b3JPdmVybGF5LmggKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1MjJENEExNUI0NzdFODAwOUI3Qzk1IC8qIElu
c3BlY3Rvck92ZXJsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3QzUyMkQ0QjE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzUyMkQ0
OTE1QjQ3N0U4MDA5QjdDOTUgLyogSW5zcGVjdG9yT3ZlcmxheS5jcHAgKi87IH07CiAJCTdFMzND
RDAxMTI3RjM0MEQwMEJFOEYxNyAvKiBQdXJnZVByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTMzQ0QwMDEyN0YzNDBEMDBCRThGMTcgLyog
UHVyZ2VQcmlvcml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdFMzdFRjJFMTMzOTIwODgwMEIyOTI1MCAvKiBTdWJyZXNvdXJjZUxvYWRlckNG
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFMzdF
RjJEMTMzOTIwODgwMEIyOTI1MCAvKiBTdWJyZXNvdXJjZUxvYWRlckNGLmNwcCAqLzsgfTsKIAkJ
N0U5OUFGNTEwQjEzODQ2NDY4RkIwMUE1IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTk5QUY1
MjBCMTM4NDY0NjhGQjAxQTUgLyogV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNwcCAqLzsg
fTsKQEAgLTQ4MjYsNyArNDgyNiw2IEBACiAJCUIyNzUzNTc0MEIwNTM4MTQwMDJDRTY0RiAvKiBJ
bnRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Mjc1MzU0NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc1MEIwNTM4MTQwMDJDRTY0RiAv
KiBJbnRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjc1MzU0NzBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTc2MEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRTaXplSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1NDgwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNoLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkIzNDgwOTQwRUVG
NTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZl
SW1hZ2VQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlCMjc1MzU3NzBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3JNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0QTBCMDUzODE0MDAyQ0U2
NEYgLyogQ29sb3JNYWMubW0gKi87IH07CiAJCUIyNzUzNTc4MEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1NEIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRNYWMubW0gKi87IH07
CiAJCUIyNzUzNTc5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0QzBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRSZWN0TWFjLm1tICovOyB9OwpAQCAtODk1MCw2ICs4OTQ5LDcgQEAKIAkJ
NjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTVdyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjVGODA2OTcwNTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEJsb2NrRXhjZXB0aW9ucy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2
ZUltYWdlUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVJbWFn
ZVB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTIxQzZCRjExMjYzMzg1MDBB
N0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQz
RENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUzRkFEMzYxNDczM0Y0MDAw
RTQyMzA2IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjA2NCw3ICsxMjA2NCw2IEBACiAJCUIy
NzUzNTQ2MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NzUzNTQ3MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnRTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NzUzNTQ4MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplSGFzaC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50U2l6ZUhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVJbWFnZVB0ci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0QTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3JNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29sb3JNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTRCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEZsb2F0UG9pbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUz
NTRDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmxvYXRSZWN0TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjM2MzUsNyArMjM2MzQsNiBAQAogCQkJCTdBQ0Q4OEQ0MTRDMDhCRDYw
MDg0RUREMiAvKiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0FBNTFERDYxNDg1MDZBOTAwQUQyNzUyIC8qIEluc3BlY3Rvck1l
bW9yeUFnZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzUyMkQ0QzE1QjQ3OEIyMDA5QjdDOTUg
LyogSW5zcGVjdG9yT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEY2RkRENjUxMzQxREVE
RDAwMUY4RUUzIC8qIEluc3BlY3RvclBhZ2VBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUYw
RDZCMkYxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgyQUIxNzc2MTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmggaW4gSGVhZGVycyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158522</attachid>
            <date>2012-08-15 01:17:10 -0700</date>
            <delta_ts>2012-08-16 19:26:19 -0700</delta_ts>
            <desc>Shadow DOM based approach - prototype 3 (kinda works)</desc>
            <filename>wip12250d</filename>
            <type>text/plain</type>
            <size>15209</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMjU1NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2Myw3IEBACiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNm1vZGlmeUVOUzBfMTFFQWx0ZXJhdGlvbkVOU18x
OFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUVOU18xNEVVc2VyVHJpZ2dl
cmVkRQogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbkMxRVBOU181RnJhbWVFCitfX1pON1dlYkNvcmUxNEZyYW1lU2Vs
ZWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTRQbHVnaW5Eb2N1bWVudDEycGx1Z2luV2lkZ2V0RXYK
IF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZmaW5nRXYKIF9f
Wk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNnN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlRXYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHJldmlzaW9uIDEyNTU3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNiArODksMjQgQEAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hT
aGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQogCit2b2lkIEVsZW1l
bnRTaGFkb3c6OnJlbW92ZVNoYWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290PiBzaGFkb3dS
b290VG9SZW1vdmUpCit7CisgICAgLy8gRG9udCBwcm90ZWN0IHRoaXMgcmVmIGNvdW50LgorICAg
IEVsZW1lbnQqIHNoYWRvd0hvc3QgPSBob3N0KCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxQb3BTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3RUb1JlbW92ZS5n
ZXQoKSk7CisgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1
YnRyZWUoc2hhZG93Um9vdFRvUmVtb3ZlLmdldCgpKTsKKyAgICBtX3NoYWRvd1Jvb3RzLnJlbW92
ZShzaGFkb3dSb290VG9SZW1vdmUuZ2V0KCkpOworCisgICAgaWYgKHNoYWRvd1Jvb3RUb1JlbW92
ZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgc2hhZG93Um9vdFRvUmVtb3ZlLT5kZXRhY2goKTsKKwor
ICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50KCktPmFkb3B0SWZOZWVkZWQoc2hhZG93Um9vdFRvUmVt
b3ZlLmdldCgpKTsKKyAgICBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXIoc2hhZG93SG9zdCkubm90
aWZ5KHNoYWRvd1Jvb3RUb1JlbW92ZS5nZXQoKSk7CisKKyAgICBpbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKHNoYWRvd0hvc3QpOworfQorCiB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRv
d1Jvb3RzKCkKIHsKICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHJldmlzaW9uIDEyNTU3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcg
QEAKIAogICAgIHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKICAgICB2b2lkIGFkZFNoYWRv
d1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFzc1JlZlB0cjxTaGFkb3dSb290PiwgU2hhZG93
Um9vdDo6U2hhZG93Um9vdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVNo
YWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290Pik7CiAKICAgICB2b2lkIGF0dGFjaCgpOwog
ICAgIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTI1NTc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDE0IEBACiAjaW5j
bHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgi
CisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTFNoYWRvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzLmgiCisjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorCiAjZGVmaW5lIEVE
SVRfREVCVUcgMAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMDgsNiArMTE2LDcgQEAKICAg
ICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlv
bihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFudWxhcml0
eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAsIG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZShO
b0Nvcm5lcikKICAgICAsIG1fY2FyZXRCbGlua1RpbWVyKHRoaXMsICZGcmFtZVNlbGVjdGlvbjo6
Y2FyZXRCbGlua1RpbWVyRmlyZWQpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHkodHJ1ZSkK
ICAgICAsIG1fY2FyZXRQYWludCh0cnVlKQpAQCAtMTE4LDYgKzEyNywxMCBAQAogICAgICAgICBt
X3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogfQogCitGcmFtZVNlbGVjdGlvbjo6
fkZyYW1lU2VsZWN0aW9uKCkKK3sKK30KKwogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxlbWVudCog
c2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKQEAgLTI0
MCw2ICsyNTMsMTEyIEBACiAgICAgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgZ3JhbnVsYXJp
dHkpOwogfQogCitib29sIEZyYW1lU2VsZWN0aW9uOjpoYW5kbGVDbGlja09uQ29udHJvbFNlbGVj
dGlvbihOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
JiByZXN1bHRzKQoreworICAgIGlmICghbV9jb250cm9sU2VsZWN0aW9uIHx8ICF0YXJnZXROb2Rl
IHx8ICF0YXJnZXROb2RlLT5wYXJlbnROb2RlKCkKKyAgICAgICAgfHwgdGFyZ2V0Tm9kZS0+cGFy
ZW50Tm9kZSgpLT5wYXJlbnROb2RlKCkgIT0gbV9jb250cm9sU2VsZWN0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQodGFyZ2V0Tm9kZS0+aGFzVGFnTmFtZShkaXZUYWcp
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUgPSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxl
bWVudCo+KHRhcmdldE5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cik7CisgICAgaWYg
KHR5cGUgPT0gInVwcGVyTGVmdCIpCisgICAgICAgIG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZSA9
IFVwcGVyTGVmdDsKKyAgICBlbHNlIGlmICh0eXBlID09ICJ1cHBlclJpZ2h0IikKKyAgICAgICAg
bV9hY3RpdmVSZXNpemVDb3JuZXJUeXBlID0gVXBwZXJSaWdodDsKKyAgICBlbHNlIGlmICh0eXBl
ID09ICJsb3dlckxlZnQiKQorICAgICAgICBtX2FjdGl2ZVJlc2l6ZUNvcm5lclR5cGUgPSBMb3dl
ckxlZnQ7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCh0eXBlID09ICJsb3dlclJpZ2h0Iik7
CisgICAgICAgIG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZSA9IExvd2VyUmlnaHQ7CisgICAgfQor
CisgICAgbV9pbml0aWFsUG9zaXRpb25Gb3JSZXNpemUgPSByZXN1bHRzLmV2ZW50KCkuZ2xvYmFs
UG9zaXRpb24oKTsKKyAgICBtX2luaXRpYWxTaXplRm9yUmVzaXplID0gTGF5b3V0U2l6ZShtX2Nv
bnRyb2xTZWxlY3Rpb24tPnNoYWRvd0hvc3QoKS0+b2Zmc2V0V2lkdGgoKSwgbV9jb250cm9sU2Vs
ZWN0aW9uLT5zaGFkb3dIb3N0KCktPm9mZnNldEhlaWdodCgpKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEZyYW1lU2VsZWN0aW9uOjpoYW5kbGVNb3VzZU1vdmVPbkNvbnRyb2xTZWxl
Y3Rpb24oY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCit7CisgICAg
Ym9vbCBpbnZlcnRYID0gZmFsc2U7CisgICAgYm9vbCBpbnZlcnRZID0gZmFsc2U7CisgICAgc3dp
dGNoIChtX2FjdGl2ZVJlc2l6ZUNvcm5lclR5cGUpIHsKKyAgICBjYXNlIE5vQ29ybmVyOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBVcHBlckxlZnQ6CisgICAgICAgIGludmVydFgg
PSB0cnVlOworICAgICAgICBpbnZlcnRZID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBVcHBlclJpZ2h0OgorICAgICAgICBpbnZlcnRZID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBMb3dlckxlZnQ6CisgICAgICAgIGludmVydFggPSB0cnVlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExvd2VyUmlnaHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgQVNTRVJUKG1fY29udHJvbFNlbGVjdGlvbik7CisgICAgTGF5b3V0U2l6ZSBuZXdTaXpl
KG1faW5pdGlhbFNpemVGb3JSZXNpemUpOworICAgIG5ld1NpemUuZXhwYW5kKGludmVydFggPyAt
MS4wIDogMS4wICogKGV2ZW50LmV2ZW50KCkuZ2xvYmFsUG9zaXRpb24oKS54KCkgLSBtX2luaXRp
YWxQb3NpdGlvbkZvclJlc2l6ZS54KCkpLAorICAgICAgICBpbnZlcnRZID8gLTEuMCA6IDEuMCAq
IChldmVudC5ldmVudCgpLmdsb2JhbFBvc2l0aW9uKCkueSgpIC0gbV9pbml0aWFsUG9zaXRpb25G
b3JSZXNpemUueSgpKSk7CisKKyAgICBIVE1MRWxlbWVudCogc2hhZG93RWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50Kj4obV9jb250cm9sU2VsZWN0aW9uLT5maXJzdENoaWxkKCktPmZp
cnN0Q2hpbGQoKSk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gY29udmVy
dCB0byBzdHJpbmcgaGVyZS4gRmlndXJlIG91dCBhIHdheSB0byBkaXJlY3RseSBtb2RpZnkgU3R5
bGVQcm9wZXR5U2V0LgorICAgIFN0cmluZyBuZXdXaWR0aCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUobmV3U2l6ZS53aWR0aCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y3NzVGV4
dCgpOworICAgIFN0cmluZyBuZXdIZWlnaHQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5l
d1NpemUuaGVpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jc3NUZXh0KCk7Cisg
ICAgU3RyaW5nIG5ld1N0eWxlID0gU3RyaW5nKCJ3aWR0aDogIikgKyBuZXdXaWR0aCArIFN0cmlu
ZygiOyBoZWlnaHQ6IikgKyBuZXdIZWlnaHQ7CisKKyAgICBzaGFkb3dFbGVtZW50LT5zZXRBdHRy
aWJ1dGUoc3R5bGVBdHRyLCBuZXdTdHlsZSk7CisvLyAgICBzaGFkb3dFbGVtZW50LT5lbnN1cmVJ
bmxpbmVTdHlsZSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCktPnNldFByb3BlcnR5KCJ3
aWR0aCIsIG5ld1dpZHRoLCAiIiwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisvLyAgICBzaGFkb3dF
bGVtZW50LT5lbnN1cmVJbmxpbmVTdHlsZSgpLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCkt
PnNldFByb3BlcnR5KCJoZWlnaHQiLCBuZXdIZWlnaHQsICIiLCBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBSZXNpemVJbWFnZUNvbW1hbmQgOiBw
dWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZXNpemVJbWFnZUNvbW1hbmQ+IGNyZWF0ZShFbGVtZW50KiBlbGVtZW50LCBMYXlvdXRT
aXplIHNpemUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlc2l6ZUltYWdl
Q29tbWFuZChlbGVtZW50LCBzaXplKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc2l6ZUlt
YWdlQ29tbWFuZChFbGVtZW50KiBlbGVtZW50LCBMYXlvdXRTaXplIHNpemUpCisgICAgICAgIDog
Q29tcG9zaXRlRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgLCBtX2Vs
ZW1lbnQoZWxlbWVudCkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBkb0FwcGx5KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgaGF2ZSB0byBjb252ZXJ0IHRvIHN0cmluZyBoZXJlLiBGaWd1cmUgb3V0IGEg
d2F5IHRvIGRpcmVjdGx5IG1vZGlmeSBTdHlsZVByb3BldHlTZXQuCisgICAgICAgIFN0cmluZyBu
ZXdTdHlsZSA9IFN0cmluZygid2lkdGg6ICIpICsgU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8
ZG91YmxlPihtX3NpemUud2lkdGgoKSkpCisgICAgICAgICAgICArICJweDsgaGVpZ2h0OiIgKyBT
dHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxkb3VibGU+KG1fc2l6ZS5oZWlnaHQoKSkpICsgInB4
OyI7CisKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShtX2VsZW1lbnQsIHN0eWxlQXR0ciwgbmV3
U3R5bGUpOworICAgIH0KKworICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBMYXlvdXRTaXpl
IG1fc2l6ZTsKK307CisKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OmVuZENvbnRyb2xTZWxlY3Rpb25S
ZXNpemUoKQoreworICAgIGlmIChtX2FjdGl2ZVJlc2l6ZUNvcm5lclR5cGUgPT0gTm9Db3JuZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIEhUTUxFbGVtZW50KiBzaGFkb3dFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2NvbnRyb2xTZWxlY3Rpb24tPmZpcnN0Q2hpbGQoKS0+
Zmlyc3RDaGlsZCgpKTsKKworICAgIC8vIEZJWE1FOiBSZWZsZWN0IHRoZSBzaXplIGJhY2sgdXNp
bmcgYW4gZWRpdGluZyBjb21tYW5kLgorICAgIG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZSA9IE5v
Q29ybmVyOworICAgIGFwcGx5Q29tbWFuZChSZXNpemVJbWFnZUNvbW1hbmQ6OmNyZWF0ZShtX2Nv
bnRyb2xTZWxlY3Rpb24tPnNoYWRvd0hvc3QoKSwKKyAgICAgICAgTGF5b3V0U2l6ZShzaGFkb3dF
bGVtZW50LT5jbGllbnRXaWR0aCgpLCBzaGFkb3dFbGVtZW50LT5jbGllbnRIZWlnaHQoKSkpKTsK
K30KKwogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIG5ld1NlbGVjdGlvbiwgU2V0U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zLCBDdXJzb3JB
bGlnbk9uU2Nyb2xsIGFsaWduLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAg
Ym9vbCBjbG9zZVR5cGluZyA9IG9wdGlvbnMgJiBDbG9zZVR5cGluZzsKQEAgLTI4Niw3ICs0MDUs
NjMgQEAKICAgICAKICAgICBpZiAoIXMuaXNOb25lKCkgJiYgIShvcHRpb25zICYgRG9Ob3RTZXRG
b2N1cykpCiAgICAgICAgIHNldEZvY3VzZWROb2RlSWZOZWVkZWQoKTsKLSAgICAKKworICAgIC8v
IEZJWE1FOiBNb3ZlIHRoaXMgdG8gYSBzZXBhcmF0ZSBtZW1iZXIgZnVuY3Rpb24uCisgICAgUG9z
aXRpb24gc3RhcnRQb3NpdGlvbiA9IG1fc2VsZWN0aW9uLnN0YXJ0KCk7CisgICAgUG9zaXRpb24g
ZW5kUG9zaXRpb24gPSBtX3NlbGVjdGlvbi5lbmQoKTsKKyAgICBIVE1MRWxlbWVudCogbmV3Q29u
dHJvbFNlbGVjdGlvbkhvc3QgPSAwOworICAgIGlmIChOb2RlKiBzdGFydFBvc2l0aW9uTm9kZSA9
IHN0YXJ0UG9zaXRpb24uY29tcHV0ZU5vZGVBZnRlclBvc2l0aW9uKCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IE1ha2UgdGhpcyBjb25kaXRpb24gbW9yZSByb2J1c3QuCisgICAgICAgIGlmIChzdGFy
dFBvc2l0aW9uTm9kZSA9PSBlbmRQb3NpdGlvbi5jb21wdXRlTm9kZUJlZm9yZVBvc2l0aW9uKCkg
JiYgc3RhcnRQb3NpdGlvbk5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSkKKyAgICAgICAgICAgIG5l
d0NvbnRyb2xTZWxlY3Rpb25Ib3N0ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihzdGFydFBv
c2l0aW9uTm9kZSk7CisgICAgfQorCisgICAgaWYgKG5ld0NvbnRyb2xTZWxlY3Rpb25Ib3N0ICE9
IChtX2NvbnRyb2xTZWxlY3Rpb24gPyBtX2NvbnRyb2xTZWxlY3Rpb24tPnNoYWRvd0hvc3QoKSA6
IDApKSB7CisgICAgICAgIGlmIChtX2NvbnRyb2xTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIEVs
ZW1lbnQqIHNoYWRvd0hvc3QgPSBtX2NvbnRyb2xTZWxlY3Rpb24tPnNoYWRvd0hvc3QoKTsKKyAg
ICAgICAgICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IG1fY29udHJvbFNlbGVjdGlvbi0+c2hh
ZG93SG9zdCgpLT5zaGFkb3coKTsKKyAgICAgICAgICAgIEFTU0VSVChzaGFkb3cpOworICAgICAg
ICAgICAgc2hhZG93LT5yZW1vdmVTaGFkb3dSb290KG1fY29udHJvbFNlbGVjdGlvbik7CisgICAg
ICAgICAgICBzaGFkb3dIb3N0LT5kZXRhY2goKTsKKyAgICAgICAgICAgIHNoYWRvd0hvc3QtPmF0
dGFjaCgpOworICAgICAgICAgICAgbV9jb250cm9sU2VsZWN0aW9uID0gMDsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobmV3Q29udHJvbFNlbGVjdGlvbkhvc3QpIHsKKyAgICAgICAgICAgIG1fY29u
dHJvbFNlbGVjdGlvbiA9IFNoYWRvd1Jvb3Q6OmNyZWF0ZShuZXdDb250cm9sU2VsZWN0aW9uSG9z
dCwgU2hhZG93Um9vdDo6QXV0aG9yU2hhZG93Um9vdCwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisK
KyAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gY29udGFpbmVyID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lci0+
c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgInBvc2l0aW9uOiByZWxhdGl2ZTsiKTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSB3YW50IHRvIGJlIHVzaW5nIHRoZSBzaGFkb3cgZWxlbWVudCBoZXJl
IGJ1dCBpdCBzZWVtcyBsaWtlIHRoZSBzaGFkb3cgZWxlbWVudCBkb2Vzbid0IHByZXNlcnZlCisg
ICAgICAgICAgICAvLyB0aGUgaW50cmluc2ljIHdpZHRoICYgaGVpZ2h0IG9mIHRoZSBpbWFnZS4K
Ky8vICAgICAgICAgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChIVE1MU2hhZG93RWxlbWVudDo6
Y3JlYXRlKEhUTUxOYW1lczo6c2hhZG93VGFnLCBtX2ZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAg
ICAgICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKHN0YXRpY19jYXN0PE5vZGUqPihuZXdDb250
cm9sU2VsZWN0aW9uSG9zdCktPmNsb25lTm9kZShmYWxzZSkpOworCisgICAgICAgICAgICBTdHJp
bmcgcmVzaXplQm94RGVmYXVsdFN0eWxlID0gIndpZHRoOiA0cHg7IGhlaWdodDogNHB4OyBwb3Np
dGlvbjogYWJzb2x1dGU7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBiYWNrZ3JvdW5kOiB3aGl0
ZTsgIjsKKworICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiB1cHBlckxlZnRDb3JuZXIg
PSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICAg
ICAgdXBwZXJMZWZ0Q29ybmVyLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCByZXNpemVCb3hEZWZh
dWx0U3R5bGUgKyAibGVmdDogLTJweDsgdG9wOiAtMnB4OyBjdXJzb3I6IG53c2UtcmVzaXplOyIp
OworICAgICAgICAgICAgdXBwZXJMZWZ0Q29ybmVyLT5zZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCAi
dXBwZXJMZWZ0Iik7CisgICAgICAgICAgICBjb250YWluZXItPmFwcGVuZENoaWxkKHVwcGVyTGVm
dENvcm5lcik7CisKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gdXBwZXJSaWdodENv
cm5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAg
ICAgICAgICB1cHBlclJpZ2h0Q29ybmVyLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCByZXNpemVC
b3hEZWZhdWx0U3R5bGUgKyAicmlnaHQ6IC0ycHg7IHRvcDogLTJweDsgY3Vyc29yOiBuZXN3LXJl
c2l6ZTsiKTsKKyAgICAgICAgICAgIHVwcGVyUmlnaHRDb3JuZXItPnNldEF0dHJpYnV0ZShjbGFz
c0F0dHIsICJ1cHBlclJpZ2h0Iik7CisgICAgICAgICAgICBjb250YWluZXItPmFwcGVuZENoaWxk
KHVwcGVyUmlnaHRDb3JuZXIpOworCisgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxv
d2VyTGVmdENvcm5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSk7CisgICAgICAgICAgICBsb3dlckxlZnRDb3JuZXItPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIs
IHJlc2l6ZUJveERlZmF1bHRTdHlsZSArICJsZWZ0OiAtMnB4OyBib3R0b206IC0ycHg7IGN1cnNv
cjogbmVzdy1yZXNpemU7Iik7CisgICAgICAgICAgICBsb3dlckxlZnRDb3JuZXItPnNldEF0dHJp
YnV0ZShjbGFzc0F0dHIsICJsb3dlckxlZnQiKTsKKyAgICAgICAgICAgIGNvbnRhaW5lci0+YXBw
ZW5kQ2hpbGQobG93ZXJMZWZ0Q29ybmVyKTsKKworICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVt
ZW50PiBsb3dlclJpZ2h0Q29ybmVyID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX2ZyYW1lLT5k
b2N1bWVudCgpKTsKKyAgICAgICAgICAgIGxvd2VyUmlnaHRDb3JuZXItPnNldEF0dHJpYnV0ZShz
dHlsZUF0dHIsIHJlc2l6ZUJveERlZmF1bHRTdHlsZSArICJyaWdodDogLTJweDsgYm90dG9tOiAt
MnB4OyBjdXJzb3I6IG53c2UtcmVzaXplOyIpOworICAgICAgICAgICAgbG93ZXJSaWdodENvcm5l
ci0+c2V0QXR0cmlidXRlKGNsYXNzQXR0ciwgImxvd2VyUmlnaHQiKTsKKyAgICAgICAgICAgIGNv
bnRhaW5lci0+YXBwZW5kQ2hpbGQobG93ZXJSaWdodENvcm5lcik7CisKKyAgICAgICAgICAgIG1f
Y29udHJvbFNlbGVjdGlvbi0+YXBwZW5kQ2hpbGQoY29udGFpbmVyLCBBU1NFUlRfTk9fRVhDRVBU
SU9OKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKIAogICAg
IC8vIEFsd2F5cyBjbGVhciB0aGUgeCBwb3NpdGlvbiB1c2VkIGZvciB2ZXJ0aWNhbCBhcnJvdyBu
YXZpZ2F0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAko
cmV2aXNpb24gMTI1NTc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiBjbGFzcyBGcmFtZTsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKK2NsYXNzIE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHM7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJW
aWV3OwogY2xhc3MgU2V0dGluZ3M7CkBAIC0xMzIsNiArMTMzLDcgQEAKICAgICB9CiAKICAgICBl
eHBsaWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSAwKTsKKyAgICB+RnJhbWVTZWxlY3Rpb24o
KTsKIAogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7IH0KICAgICBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKQEAgLTI1NSw2ICsyNTcsMTAg
QEAKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmID0gU2Ny
b2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBSZXZlYWxFeHRlbnRPcHRpb24gPSBE
b05vdFJldmVhbEV4dGVudCk7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwogCisg
ICAgYm9vbCBoYW5kbGVDbGlja09uQ29udHJvbFNlbGVjdGlvbihOb2RlKiB0YXJnZXROb2RlLCBj
b25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CisgICAgYm9vbCBoYW5kbGVNb3Vz
ZU1vdmVPbkNvbnRyb2xTZWxlY3Rpb24oY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cyYpOworICAgIHZvaWQgZW5kQ29udHJvbFNlbGVjdGlvblJlc2l6ZSgpOworCiBwcml2YXRlOgog
ICAgIGVudW0gRVBvc2l0aW9uVHlwZSB7IFNUQVJULCBFTkQsIEJBU0UsIEVYVEVOVCB9OwogCkBA
IC0zMDAsNiArMzA2LDE3IEBACiAgICAgVGV4dEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7CiAK
ICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBtX3R5cGluZ1N0eWxlOworICAgIFJlZlB0cjxTaGFk
b3dSb290PiBtX2NvbnRyb2xTZWxlY3Rpb247CisgICAgZW51bSBSZXNpemVDb3JuZXJUeXBlIHsK
KyAgICAgICAgTm9Db3JuZXIsCisgICAgICAgIFVwcGVyTGVmdCwKKyAgICAgICAgVXBwZXJSaWdo
dCwKKyAgICAgICAgTG93ZXJMZWZ0LAorICAgICAgICBMb3dlclJpZ2h0LAorICAgIH07CisgICAg
UmVzaXplQ29ybmVyVHlwZSBtX2FjdGl2ZVJlc2l6ZUNvcm5lclR5cGU7CisgICAgTGF5b3V0UG9p
bnQgbV9pbml0aWFsUG9zaXRpb25Gb3JSZXNpemU7CisgICAgTGF5b3V0U2l6ZSBtX2luaXRpYWxT
aXplRm9yUmVzaXplOwogCiAgICAgVGltZXI8RnJhbWVTZWxlY3Rpb24+IG1fY2FyZXRCbGlua1Rp
bWVyOwogICAgIC8vIFRoZSBwYWludGVkIGJvdW5kcyBvZiB0aGUgY2FyZXQgaW4gYWJzb2x1dGUg
Y29vcmRpbmF0ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlz
aW9uIDEyNTU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDk5LDYgKzQ5OSwxNSBAQAogewogICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIE5vZGUqIGlu
bmVyTm9kZSA9IHRhcmdldE5vZGUoZXZlbnQpOworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qg
PSBpbm5lck5vZGUgPyBpbm5lck5vZGUtPnNoYWRvd1Jvb3QoKSA6IDA7CisgICAgaWYgKGlubmVy
Tm9kZSAmJiBpbm5lck5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSAmJiBpbm5lck5vZGUtPmlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkpIHsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZVNlbGVjdGlvbkZv
ck1vdXNlRG93bkRpc3BhdGNoaW5nU2VsZWN0U3RhcnQoaW5uZXJOb2RlLAorICAgICAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUoaW5uZXJOb2RlKSwgcG9zaXRpb25B
ZnRlck5vZGUoaW5uZXJOb2RlKSksIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICB9IGVsc2Ug
aWYgKHNoYWRvd1Jvb3QgJiYgc2hhZG93Um9vdC0+aG9zdCgpLT5oYXNUYWdOYW1lKGltZ1RhZykg
JiYgc2hhZG93Um9vdC0+aG9zdCgpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAg
ICAgIHJldHVybiB1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURvd25EaXNwYXRjaGluZ1NlbGVjdFN0
YXJ0KGlubmVyTm9kZSwKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25CZWZv
cmVOb2RlKHNoYWRvd1Jvb3QtPmhvc3QoKSksIHBvc2l0aW9uQWZ0ZXJOb2RlKHNoYWRvd1Jvb3Qt
Pmhvc3QoKSkpLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgfQorCiAgICAgaWYgKCEoaW5u
ZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJiBtX21vdXNlRG93bk1heVN0YXJ0U2Vs
ZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNTc2LDYgKzE1ODUsMTEgQEAKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aGFuZGxlQ2xp
Y2tPbkNvbnRyb2xTZWxlY3Rpb24obV9jbGlja05vZGUuZ2V0KCksIG1ldikpIHsKKyAgICAgICAg
aW52YWxpZGF0ZUNsaWNrKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRDYXJldEJsaW5raW5nU3VzcGVuZGVkKHRydWUpOwogCiAg
ICAgYm9vbCBzd2FsbG93RXZlbnQgPSBkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50LCB0YXJnZXROb2RlKG1ldiksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VF
dmVudCwgdHJ1ZSk7CkBAIC0xNzc2LDYgKzE3OTAsOCBAQAogCiAgICAgaWYgKG1fcmVzaXplTGF5
ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVNb2RlKCkpCiAgICAgICAgIG1fcmVzaXplTGF5
ZXItPnJlc2l6ZShtb3VzZUV2ZW50LCBtX29mZnNldEZyb21SZXNpemVDb3JuZXIpOworICAgIGVs
c2UgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5oYW5kbGVNb3VzZU1vdmVPbkNvbnRyb2xTZWxl
Y3Rpb24obWV2KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIGlm
IChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgICAgICBzY3JvbGxi
YXIgPSB2aWV3LT5zY3JvbGxiYXJBdFBvaW50KG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CkBAIC0x
ODkyLDcgKzE5MDgsOCBAQAogICAgIGlmIChtX3Jlc2l6ZUxheWVyKSB7CiAgICAgICAgIG1fcmVz
aXplTGF5ZXItPnNldEluUmVzaXplTW9kZShmYWxzZSk7CiAgICAgICAgIG1fcmVzaXplTGF5ZXIg
PSAwOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPmVu
ZENvbnRyb2xTZWxlY3Rpb25SZXNpemUoKTsKIAogICAgIGJvb2wgc3dhbGxvd01vdXNlUmVsZWFz
ZUV2ZW50ID0gZmFsc2U7CiAgICAgaWYgKCFzd2FsbG93TW91c2VVcEV2ZW50KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158980</attachid>
            <date>2012-08-16 19:26:19 -0700</date>
            <delta_ts>2012-08-17 01:21:47 -0700</delta_ts>
            <desc>work in progress 5</desc>
            <filename>wip12250e</filename>
            <type>text/plain</type>
            <size>17725</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMjU3MDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2Myw3IEBACiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNm1vZGlmeUVOUzBfMTFFQWx0ZXJhdGlvbkVOU18x
OFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUVOU18xNEVVc2VyVHJpZ2dl
cmVkRQogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbkMxRVBOU181RnJhbWVFCitfX1pON1dlYkNvcmUxNEZyYW1lU2Vs
ZWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTRQbHVnaW5Eb2N1bWVudDEycGx1Z2luV2lkZ2V0RXYK
IF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZmaW5nRXYKIF9f
Wk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNnN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlRXYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHJldmlzaW9uIDEyNTcwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNiArODksMjQgQEAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hT
aGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQogCit2b2lkIEVsZW1l
bnRTaGFkb3c6OnJlbW92ZVNoYWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290PiBzaGFkb3dS
b290VG9SZW1vdmUpCit7CisgICAgLy8gRG9udCBwcm90ZWN0IHRoaXMgcmVmIGNvdW50LgorICAg
IEVsZW1lbnQqIHNoYWRvd0hvc3QgPSBob3N0KCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxQb3BTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3RUb1JlbW92ZS5n
ZXQoKSk7CisgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1
YnRyZWUoc2hhZG93Um9vdFRvUmVtb3ZlLmdldCgpKTsKKyAgICBtX3NoYWRvd1Jvb3RzLnJlbW92
ZShzaGFkb3dSb290VG9SZW1vdmUuZ2V0KCkpOworCisgICAgaWYgKHNoYWRvd1Jvb3RUb1JlbW92
ZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgc2hhZG93Um9vdFRvUmVtb3ZlLT5kZXRhY2goKTsKKwor
ICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50KCktPmFkb3B0SWZOZWVkZWQoc2hhZG93Um9vdFRvUmVt
b3ZlLmdldCgpKTsKKyAgICBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXIoc2hhZG93SG9zdCkubm90
aWZ5KHNoYWRvd1Jvb3RUb1JlbW92ZS5nZXQoKSk7CisKKyAgICBpbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKHNoYWRvd0hvc3QpOworfQorCiB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRv
d1Jvb3RzKCkKIHsKICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHJldmlzaW9uIDEyNTcwNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcg
QEAKIAogICAgIHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKICAgICB2b2lkIGFkZFNoYWRv
d1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFzc1JlZlB0cjxTaGFkb3dSb290PiwgU2hhZG93
Um9vdDo6U2hhZG93Um9vdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVNo
YWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290Pik7CiAKICAgICB2b2lkIGF0dGFjaCgpOwog
ICAgIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTI1NzA1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxNSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAKKyNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIKKyNpbmNs
dWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJF
bGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgpAQCAtNDAsMTAgKzQzLDEyIEBA
CiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5o
IgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2VsZWN0RWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxTaGFkb3dFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCkBAIC01OCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyZWRQb3NpdGlvbi5oIgog
I2luY2x1ZGUgIlNlY3VyZVRleHRJbnB1dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5j
bHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgpAQCAtNjcs
NiArNzMsOCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCisjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorCiAjZGVm
aW5lIEVESVRfREVCVUcgMAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMDgsNiArMTE2LDcg
QEAKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFu
dWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAsIG1fYWN0aXZlUmVzaXplQ29ybmVy
VHlwZShOb0Nvcm5lcikKICAgICAsIG1fY2FyZXRCbGlua1RpbWVyKHRoaXMsICZGcmFtZVNlbGVj
dGlvbjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHko
dHJ1ZSkKICAgICAsIG1fY2FyZXRQYWludCh0cnVlKQpAQCAtMTE4LDYgKzEyNywxMCBAQAogICAg
ICAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogfQogCitGcmFtZVNlbGVj
dGlvbjo6fkZyYW1lU2VsZWN0aW9uKCkKK3sKK30KKwogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxl
bWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
QEAgLTI4Niw3ICsyOTksOSBAQAogICAgIAogICAgIGlmICghcy5pc05vbmUoKSAmJiAhKG9wdGlv
bnMgJiBEb05vdFNldEZvY3VzKSkKICAgICAgICAgc2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpOwot
ICAgIAorCisgICAgdXBkYXRlQ29udHJvbFNlbGVjdGlvbigpOworCiAgICAgdXBkYXRlQXBwZWFy
YW5jZSgpOwogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0aW9uIHVzZWQgZm9yIHZl
cnRpY2FsIGFycm93IG5hdmlnYXRpb24uCkBAIC0xNzI0LDcgKzE3MzksNyBAQAogICAgIC8vIGFz
c3VtZSBhIHZhbGlkIHNlbGVjdGlvbi4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Njk1NjM+IGFuZCA8cmRhcjovL3Byb2JsZW0vMTAyMzI4NjY+LgogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBtX3Nl
bGVjdGlvbi52aXNpYmxlRW5kKCkpOwogCi0gICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKSB7
CisgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpIHx8IG1fY29udHJvbFNlbGVjdGlvbikgewog
ICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTk5NSw2ICsyMDEwLDE5MiBAQAogICAgIHJldHVybiBzZXR0aW5ncyAmJiBzZXR0aW5ncy0+
dmlzdWFsV29yZE1vdmVtZW50RW5hYmxlZCgpOwogfQogCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFk
b3dSb290PiBjcmVhdGVDb250cm9sU2VsZWN0aW9uU2hhZG93Um9vdChFbGVtZW50KiBob3N0KQor
eworICAgIFJlZlB0cjxTaGFkb3dSb290PiBjb250cm9sU2VsZWN0aW9uID0gU2hhZG93Um9vdDo6
Y3JlYXRlKGhvc3QsIFNoYWRvd1Jvb3Q6OkF1dGhvclNoYWRvd1Jvb3QsIEFTU0VSVF9OT19FWENF
UFRJT04pOworCisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjb250YWluZXIgPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKGhvc3QtPmRvY3VtZW50KCkpOworICAgIGNvbnRhaW5lci0+c2V0QXR0cmli
dXRlKHN0eWxlQXR0ciwgImRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9zaXRpb246IHJlbGF0aXZl
OyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgbWFyZ2luOiAtMXB4OyIpOworICAgIC8vIEZJWE1F
OiBUaGUgaW1nIGVsZW1lbnQncyBVQSBzaGFkb3cgcm9vdCBkb2Vzbid0IHByZXNlcnZlIHRoZSBp
bnRyaW5zaWMgd2lkdGggJiBoZWlnaHQgb2YgdGhlIGltYWdlLgorICAgIGNvbnRhaW5lci0+YXBw
ZW5kQ2hpbGQoc3RhdGljX2Nhc3Q8Tm9kZSo+KGhvc3QpLT5jbG9uZU5vZGUoZmFsc2UpKTsKKwor
Ly8gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBib3JkZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KGhvc3QtPmRvY3VtZW50KCkpOworLy8gICAgYm9yZGVyLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRy
LCAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWln
aHQ6IDEwMCU7IGJvcmRlcjogc29saWQgMXB4IGJsYWNrOyIpOworLy8gICAgY29udGFpbmVyLT5h
cHBlbmRDaGlsZChib3JkZXIpOworCisgICAgU3RyaW5nIHJlc2l6ZUJveERlZmF1bHRTdHlsZSA9
ICJ3aWR0aDogNHB4OyBoZWlnaHQ6IDRweDsgcG9zaXRpb246IGFic29sdXRlOyBib3JkZXI6IDFw
eCBzb2xpZCBibGFjazsgYmFja2dyb3VuZDogd2hpdGU7ICI7CisKKyAgICBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IHVwcGVyTGVmdENvcm5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoaG9zdC0+ZG9j
dW1lbnQoKSk7CisgICAgdXBwZXJMZWZ0Q29ybmVyLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBy
ZXNpemVCb3hEZWZhdWx0U3R5bGUgKyAibGVmdDogLTJweDsgdG9wOiAtMnB4OyBjdXJzb3I6IG53
c2UtcmVzaXplOyIpOworICAgIHVwcGVyTGVmdENvcm5lci0+c2V0QXR0cmlidXRlKGNsYXNzQXR0
ciwgInVwcGVyTGVmdCIpOworICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hpbGQodXBwZXJMZWZ0Q29y
bmVyKTsKKworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gdXBwZXJSaWdodENvcm5lciA9IEhUTUxE
aXZFbGVtZW50OjpjcmVhdGUoaG9zdC0+ZG9jdW1lbnQoKSk7CisgICAgdXBwZXJSaWdodENvcm5l
ci0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgcmVzaXplQm94RGVmYXVsdFN0eWxlICsgInJpZ2h0
OiAtMnB4OyB0b3A6IC0ycHg7IGN1cnNvcjogbmVzdy1yZXNpemU7Iik7CisgICAgdXBwZXJSaWdo
dENvcm5lci0+c2V0QXR0cmlidXRlKGNsYXNzQXR0ciwgInVwcGVyUmlnaHQiKTsKKyAgICBjb250
YWluZXItPmFwcGVuZENoaWxkKHVwcGVyUmlnaHRDb3JuZXIpOworCisgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBsb3dlckxlZnRDb3JuZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGhvc3QtPmRv
Y3VtZW50KCkpOworICAgIGxvd2VyTGVmdENvcm5lci0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwg
cmVzaXplQm94RGVmYXVsdFN0eWxlICsgImxlZnQ6IC0ycHg7IGJvdHRvbTogLTJweDsgY3Vyc29y
OiBuZXN3LXJlc2l6ZTsiKTsKKyAgICBsb3dlckxlZnRDb3JuZXItPnNldEF0dHJpYnV0ZShjbGFz
c0F0dHIsICJsb3dlckxlZnQiKTsKKyAgICBjb250YWluZXItPmFwcGVuZENoaWxkKGxvd2VyTGVm
dENvcm5lcik7CisKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxvd2VyUmlnaHRDb3JuZXIgPSBI
VE1MRGl2RWxlbWVudDo6Y3JlYXRlKGhvc3QtPmRvY3VtZW50KCkpOworICAgIGxvd2VyUmlnaHRD
b3JuZXItPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHJlc2l6ZUJveERlZmF1bHRTdHlsZSArICJy
aWdodDogLTJweDsgYm90dG9tOiAtMnB4OyBjdXJzb3I6IG53c2UtcmVzaXplOyIpOworICAgIGxv
d2VyUmlnaHRDb3JuZXItPnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsICJsb3dlclJpZ2h0Iik7Cisg
ICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChsb3dlclJpZ2h0Q29ybmVyKTsKKworICAgIGNvbnRy
b2xTZWxlY3Rpb24tPmFwcGVuZENoaWxkKGNvbnRhaW5lciwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CisKKyAgICByZXR1cm4gY29udHJvbFNlbGVjdGlvbjsKK30KKwordm9pZCBGcmFtZVNlbGVjdGlv
bjo6dXBkYXRlQ29udHJvbFNlbGVjdGlvbigpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBz
dXBwb3J0IGVuYWJsZU9iamVjdFJlc2l6aW5nLgorCisgICAgSFRNTEVsZW1lbnQqIG5ld0NvbnRy
b2xTZWxlY3Rpb25Ib3N0ID0gMDsKKyAgICBpZiAoTm9kZSogc3RhcnRQb3NpdGlvbk5vZGUgPSBt
X3NlbGVjdGlvbi5zdGFydCgpLmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlvbigpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBNYWtlIHRoaXMgY29uZGl0aW9uIG1vcmUgcm9idXN0LgorICAgICAgICBpZiAo
c3RhcnRQb3NpdGlvbk5vZGUgPT0gbV9zZWxlY3Rpb24uZW5kKCkuY29tcHV0ZU5vZGVCZWZvcmVQ
b3NpdGlvbigpICYmIHN0YXJ0UG9zaXRpb25Ob2RlLT5oYXNUYWdOYW1lKGltZ1RhZykpCisgICAg
ICAgICAgICBuZXdDb250cm9sU2VsZWN0aW9uSG9zdCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4oc3RhcnRQb3NpdGlvbk5vZGUpOworICAgIH0KKworICAgIGlmIChuZXdDb250cm9sU2VsZWN0
aW9uSG9zdCA9PSAobV9jb250cm9sU2VsZWN0aW9uID8gbV9jb250cm9sU2VsZWN0aW9uLT5zaGFk
b3dIb3N0KCkgOiAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29udHJvbFNlbGVj
dGlvbikgeworICAgICAgICBFbGVtZW50KiBzaGFkb3dIb3N0ID0gbV9jb250cm9sU2VsZWN0aW9u
LT5zaGFkb3dIb3N0KCk7CisgICAgICAgIEFTU0VSVChzaGFkb3dIb3N0KTsKKyAgICAgICAgRWxl
bWVudFNoYWRvdyogc2hhZG93ID0gc2hhZG93SG9zdC0+c2hhZG93KCk7CisgICAgICAgIEFTU0VS
VChzaGFkb3cpOworICAgICAgICBzaGFkb3ctPnJlbW92ZVNoYWRvd1Jvb3QobV9jb250cm9sU2Vs
ZWN0aW9uKTsKKyAgICAgICAgc2hhZG93SG9zdC0+ZGV0YWNoKCk7CisgICAgICAgIHNoYWRvd0hv
c3QtPmF0dGFjaCgpOworICAgICAgICBtX2NvbnRyb2xTZWxlY3Rpb24gPSAwOworICAgIH0KKwor
ICAgIGlmIChuZXdDb250cm9sU2VsZWN0aW9uSG9zdCkKKyAgICAgICAgbV9jb250cm9sU2VsZWN0
aW9uID0gY3JlYXRlQ29udHJvbFNlbGVjdGlvblNoYWRvd1Jvb3QobmV3Q29udHJvbFNlbGVjdGlv
bkhvc3QpOworfQorCitjbGFzcyBSZXNpemVJbWFnZUNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRl
RWRpdENvbW1hbmQKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXNpemVJbWFn
ZUNvbW1hbmQ+IGNyZWF0ZShIVE1MRWxlbWVudCogZWxlbWVudCwgTGF5b3V0U2l6ZSBzaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXNpemVJbWFnZUNvbW1hbmQoZWxl
bWVudCwgc2l6ZSkpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgUmVzaXplSW1hZ2VDb21t
YW5kKEhUTUxFbGVtZW50KiBlbGVtZW50LCBMYXlvdXRTaXplIHNpemUpCisgICAgICAgIDogQ29t
cG9zaXRlRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgLCBtX2VsZW1l
bnQoZWxlbWVudCkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChlbGVtZW50KTsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoaW1nVGFnKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSBPVkVSUklERQorICAgIHsKKyAg
ICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkobV9lbGVtZW50LCBDU1NQcm9wZXJ0eVdpZHRoKTsKKyAg
ICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkobV9lbGVtZW50LCBDU1NQcm9wZXJ0eUhlaWdodCk7ICAg
ICAgICAKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShtX2VsZW1lbnQsIHdpZHRoQXR0ciwgU3Ry
aW5nOjpudW1iZXIobV9zaXplLndpZHRoKCkucm91bmQoKSkpOworICAgICAgICBzZXROb2RlQXR0
cmlidXRlKG1fZWxlbWVudCwgaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1iZXIobV9zaXplLmhlaWdo
dCgpLnJvdW5kKCkpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZWxlbWVu
dDsKKyAgICBMYXlvdXRTaXplIG1fc2l6ZTsKK307CisKK2Jvb2wgRnJhbWVTZWxlY3Rpb246Omhh
bmRsZUNsaWNrT25Db250cm9sU2VsZWN0aW9uKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIHJlc3VsdHMpCit7CisgICAgaWYgKCFtX2NvbnRyb2xT
ZWxlY3Rpb24gfHwgIXRhcmdldE5vZGUgfHwgIXRhcmdldE5vZGUtPnBhcmVudE5vZGUoKQorICAg
ICAgICB8fCB0YXJnZXROb2RlLT5wYXJlbnROb2RlKCktPnBhcmVudE5vZGUoKSAhPSBtX2NvbnRy
b2xTZWxlY3Rpb24gfHwgIXRhcmdldE5vZGUtPmhhc1RhZ05hbWUoZGl2VGFnKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gc3RhdGljX2Nh
c3Q8SFRNTERpdkVsZW1lbnQqPih0YXJnZXROb2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0
dHIpOworICAgIGlmICh0eXBlID09ICJ1cHBlckxlZnQiKQorICAgICAgICBtX2FjdGl2ZVJlc2l6
ZUNvcm5lclR5cGUgPSBVcHBlckxlZnQ7CisgICAgZWxzZSBpZiAodHlwZSA9PSAidXBwZXJSaWdo
dCIpCisgICAgICAgIG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZSA9IFVwcGVyUmlnaHQ7CisgICAg
ZWxzZSBpZiAodHlwZSA9PSAibG93ZXJMZWZ0IikKKyAgICAgICAgbV9hY3RpdmVSZXNpemVDb3Ju
ZXJUeXBlID0gTG93ZXJMZWZ0OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQodHlwZSA9PSAi
bG93ZXJSaWdodCIpOworICAgICAgICBtX2FjdGl2ZVJlc2l6ZUNvcm5lclR5cGUgPSBMb3dlclJp
Z2h0OworICAgIH0KKworICAgIG1faW5pdGlhbFBvc2l0aW9uRm9yUmVzaXplID0gcmVzdWx0cy5l
dmVudCgpLmdsb2JhbFBvc2l0aW9uKCk7CisgICAgbV9pbml0aWFsU2l6ZUZvclJlc2l6ZSA9IExh
eW91dFNpemUobV9jb250cm9sU2VsZWN0aW9uLT5zaGFkb3dIb3N0KCktPm9mZnNldFdpZHRoKCks
IG1fY29udHJvbFNlbGVjdGlvbi0+c2hhZG93SG9zdCgpLT5vZmZzZXRIZWlnaHQoKSk7CisKKyAg
ICBBU1NFUlQobV9jb250cm9sU2VsZWN0aW9uLT5maXJzdENoaWxkKCktPmhhc1RhZ05hbWUoZGl2
VGFnKSk7CisgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4obV9jb250cm9sU2VsZWN0aW9uLT5maXJzdENoaWxkKCkpOworICAgIEFTU0VSVChjb250
YWluZXItPmZpcnN0Q2hpbGQoKS0+aGFzVGFnTmFtZShpbWdUYWcpKTsKKyAgICBIVE1MRWxlbWVu
dCogaW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGNvbnRhaW5lci0+Zmlyc3RDaGls
ZCgpKTsKKworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdpZHRoLCBtX2luaXRpYWxTaXplRm9yUmVzaXplLndpZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUhlaWdodCwgbV9pbml0aWFsU2l6ZUZvclJlc2l6ZS5oZWlnaHQoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCk7CisgICAgaW1hZ2UtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgMTAwLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Cisg
ICAgaW1hZ2UtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIDEwMC4w
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworCisgICAgLy8gRklYTUU6IFJl
bW92ZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBpbWFnZSBlbGVtZW50IHNvIHRoYXQgYm91bmRp
bmcgYm94IGNoYW5nZSBpdHMgc2l6ZSBhcHByb3ByaWF0ZWx5LgorCisgICAgcmV0dXJuIHRydWU7
Cit9CisgICAgCitzdGF0aWMgY29uc3QgZG91YmxlIGNvbnRyb2xTZWxlY3Rpb25NaW5JbWFnZVdp
ZHRoID0gNS4wOworc3RhdGljIGNvbnN0IGRvdWJsZSBjb250cm9sU2VsZWN0aW9uTWluSW1hZ2VI
ZWlnaHQgPSA1LjA7CisKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OmhhbmRsZU1vdXNlTW92ZU9uQ29u
dHJvbFNlbGVjdGlvbihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkK
K3sKKyAgICBib29sIGludmVydFggPSBmYWxzZTsKKyAgICBib29sIGludmVydFkgPSBmYWxzZTsK
KyAgICBzd2l0Y2ggKG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZSkgeworICAgIGNhc2UgTm9Db3Ju
ZXI6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFVwcGVyTGVmdDoKKyAgICAgICAg
aW52ZXJ0WCA9IHRydWU7CisgICAgICAgIGludmVydFkgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFVwcGVyUmlnaHQ6CisgICAgICAgIGludmVydFkgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExvd2VyTGVmdDoKKyAgICAgICAgaW52ZXJ0WCA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTG93ZXJSaWdodDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgQVNTRVJUKG1fY29udHJvbFNlbGVjdGlvbik7CisgICAgTGF5b3V0U2l6ZSBuZXdTaXpl
KG1faW5pdGlhbFNpemVGb3JSZXNpemUpOworICAgIG5ld1NpemUuZXhwYW5kKChpbnZlcnRYID8g
LTEuMCA6IDEuMCkgKiAoZXZlbnQuZXZlbnQoKS5nbG9iYWxQb3NpdGlvbigpLngoKSAtIG1faW5p
dGlhbFBvc2l0aW9uRm9yUmVzaXplLngoKSksCisgICAgICAgIChpbnZlcnRZID8gLTEuMCA6IDEu
MCkgKiAoZXZlbnQuZXZlbnQoKS5nbG9iYWxQb3NpdGlvbigpLnkoKSAtIG1faW5pdGlhbFBvc2l0
aW9uRm9yUmVzaXplLnkoKSkpOworCisgICAgQVNTRVJUKG1fY29udHJvbFNlbGVjdGlvbi0+Zmly
c3RDaGlsZCgpLT5oYXNUYWdOYW1lKGRpdlRhZykpOworICAgIEhUTUxFbGVtZW50KiBjb250YWlu
ZXIgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fY29udHJvbFNlbGVjdGlvbi0+Zmlyc3RD
aGlsZCgpKTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlXaWR0aCwgbWF4KGNvbnRyb2xTZWxlY3Rpb25NaW5JbWFnZVdpZHRoLCBuZXdTaXplLndpZHRo
KCkudG9Eb3VibGUoKSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIGNvbnRhaW5l
ci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgbWF4KGNvbnRyb2xT
ZWxlY3Rpb25NaW5JbWFnZUhlaWdodCwgbmV3U2l6ZS5oZWlnaHQoKS50b0RvdWJsZSgpKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBG
cmFtZVNlbGVjdGlvbjo6ZW5kQ29udHJvbFNlbGVjdGlvblJlc2l6ZSgpCit7CisgICAgaWYgKG1f
YWN0aXZlUmVzaXplQ29ybmVyVHlwZSA9PSBOb0Nvcm5lcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9hY3RpdmVSZXNpemVDb3JuZXJUeXBlID0gTm9Db3JuZXI7CisKKyAgICBIVE1MRWxlbWVu
dCogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2NvbnRyb2xTZWxlY3Rp
b24tPmZpcnN0Q2hpbGQoKSk7CisKKyAgICBBU1NFUlQobV9jb250cm9sU2VsZWN0aW9uLT5zaGFk
b3dIb3N0KCktPmhhc1RhZ05hbWUoaW1nVGFnKSk7CisgICAgYXBwbHlDb21tYW5kKFJlc2l6ZUlt
YWdlQ29tbWFuZDo6Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9jb250cm9sU2Vs
ZWN0aW9uLT5zaGFkb3dIb3N0KCkpLAorICAgICAgICBMYXlvdXRTaXplKGNvbnRhaW5lci0+Y2xp
ZW50V2lkdGgoKSwgY29udGFpbmVyLT5jbGllbnRIZWlnaHQoKSkpKTsKK30KKwogI2lmbmRlZiBO
REVCVUcKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMjU3MDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDkgQEAKIHZvaWQgUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSA9
IG1fZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1
cm47CisKICAgICBtX29sZFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobV9wcm9wZXJ0
eSk7CiAgICAgbV9pbXBvcnRhbnQgPSBzdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChtX3Byb3Bl
cnR5KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2
aXNpb24gMTI1NzA1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiBjbGFzcyBGcmFtZTsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKK2NsYXNzIE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHM7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBSZW5kZXJWaWV3
OwogY2xhc3MgU2V0dGluZ3M7CkBAIC0xMzIsNiArMTMzLDcgQEAKICAgICB9CiAKICAgICBleHBs
aWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSAwKTsKKyAgICB+RnJhbWVTZWxlY3Rpb24oKTsK
IAogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7IH0KICAgICBFbGVtZW50KiByb290RWRpdGFi
bGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKQEAgLTI1NSw2ICsyNTcsMTAgQEAK
ICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmID0gU2Nyb2xs
QWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBSZXZlYWxFeHRlbnRPcHRpb24gPSBEb05v
dFJldmVhbEV4dGVudCk7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwogCisgICAg
Ym9vbCBoYW5kbGVDbGlja09uQ29udHJvbFNlbGVjdGlvbihOb2RlKiB0YXJnZXROb2RlLCBjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CisgICAgYm9vbCBoYW5kbGVNb3VzZU1v
dmVPbkNvbnRyb2xTZWxlY3Rpb24oY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYp
OworICAgIHZvaWQgZW5kQ29udHJvbFNlbGVjdGlvblJlc2l6ZSgpOworCiBwcml2YXRlOgogICAg
IGVudW0gRVBvc2l0aW9uVHlwZSB7IFNUQVJULCBFTkQsIEJBU0UsIEVYVEVOVCB9OwogCkBAIC0y
OTEsNiArMjk3LDggQEAKICAgCiAgICAgYm9vbCB2aXN1YWxXb3JkTW92ZW1lbnRFbmFibGVkKCkg
Y29uc3Q7CiAKKyAgICB2b2lkIHVwZGF0ZUNvbnRyb2xTZWxlY3Rpb24oKTsKKwogICAgIEZyYW1l
KiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdh
dGlvbjsKQEAgLTMwMCw2ICszMDgsMTcgQEAKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxh
cml0eTsKIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7CisgICAgUmVm
UHRyPFNoYWRvd1Jvb3Q+IG1fY29udHJvbFNlbGVjdGlvbjsKKyAgICBlbnVtIFJlc2l6ZUNvcm5l
clR5cGUgeworICAgICAgICBOb0Nvcm5lciwKKyAgICAgICAgVXBwZXJMZWZ0LAorICAgICAgICBV
cHBlclJpZ2h0LAorICAgICAgICBMb3dlckxlZnQsCisgICAgICAgIExvd2VyUmlnaHQsCisgICAg
fTsKKyAgICBSZXNpemVDb3JuZXJUeXBlIG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZTsKKyAgICBM
YXlvdXRQb2ludCBtX2luaXRpYWxQb3NpdGlvbkZvclJlc2l6ZTsKKyAgICBMYXlvdXRTaXplIG1f
aW5pdGlhbFNpemVGb3JSZXNpemU7CiAKICAgICBUaW1lcjxGcmFtZVNlbGVjdGlvbj4gbV9jYXJl
dEJsaW5rVGltZXI7CiAgICAgLy8gVGhlIHBhaW50ZWQgYm91bmRzIG9mIHRoZSBjYXJldCBpbiBh
YnNvbHV0ZSBjb29yZGluYXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAkocmV2aXNpb24gMTI1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTksNiArNDk5LDE1IEBACiB7CiAgICAgbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAg
Tm9kZSogaW5uZXJOb2RlID0gdGFyZ2V0Tm9kZShldmVudCk7CisgICAgU2hhZG93Um9vdCogc2hh
ZG93Um9vdCA9IGlubmVyTm9kZSA/IGlubmVyTm9kZS0+c2hhZG93Um9vdCgpIDogMDsKKyAgICBp
ZiAoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+aGFzVGFnTmFtZShpbWdUYWcpICYmIGlubmVyTm9k
ZS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAgICByZXR1cm4gdXBkYXRlU2Vs
ZWN0aW9uRm9yTW91c2VEb3duRGlzcGF0Y2hpbmdTZWxlY3RTdGFydChpbm5lck5vZGUsCisgICAg
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShpbm5lck5vZGUpLCBw
b3NpdGlvbkFmdGVyTm9kZShpbm5lck5vZGUpKSwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAg
IH0gZWxzZSBpZiAoc2hhZG93Um9vdCAmJiBzaGFkb3dSb290LT5ob3N0KCktPmhhc1RhZ05hbWUo
aW1nVGFnKSAmJiBzaGFkb3dSb290LT5ob3N0KCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
IHsKKyAgICAgICAgcmV0dXJuIHVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRG93bkRpc3BhdGNoaW5n
U2VsZWN0U3RhcnQoaW5uZXJOb2RlLAorICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbihwb3Np
dGlvbkJlZm9yZU5vZGUoc2hhZG93Um9vdC0+aG9zdCgpKSwgcG9zaXRpb25BZnRlck5vZGUoc2hh
ZG93Um9vdC0+aG9zdCgpKSksIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICB9CisKICAgICBp
ZiAoIShpbm5lck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYmIG1fbW91c2VEb3duTWF5
U3RhcnRTZWxlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE1NzYsNiArMTU4NSwx
MSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5o
YW5kbGVDbGlja09uQ29udHJvbFNlbGVjdGlvbihtX2NsaWNrTm9kZS5nZXQoKSwgbWV2KSkgewor
ICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1
ZSk7CiAKICAgICBib29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQsIHRhcmdldE5vZGUobWV2KSwgdHJ1ZSwgbV9jbGlja0NvdW50
LCBtb3VzZUV2ZW50LCB0cnVlKTsKQEAgLTE3NzYsNiArMTc5MCw4IEBACiAKICAgICBpZiAobV9y
ZXNpemVMYXllciAmJiBtX3Jlc2l6ZUxheWVyLT5pblJlc2l6ZU1vZGUoKSkKICAgICAgICAgbV9y
ZXNpemVMYXllci0+cmVzaXplKG1vdXNlRXZlbnQsIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcik7
CisgICAgZWxzZSBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmhhbmRsZU1vdXNlTW92ZU9uQ29u
dHJvbFNlbGVjdGlvbihtZXYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBlbHNlIHsKICAg
ICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAgICAg
IHNjcm9sbGJhciA9IHZpZXctPnNjcm9sbGJhckF0UG9pbnQobW91c2VFdmVudC5wb3NpdGlvbigp
KTsKQEAgLTE4OTIsNyArMTkwOCw4IEBACiAgICAgaWYgKG1fcmVzaXplTGF5ZXIpIHsKICAgICAg
ICAgbV9yZXNpemVMYXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKICAgICAgICAgbV9yZXNp
emVMYXllciA9IDA7Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+ZW5kQ29udHJvbFNlbGVjdGlvblJlc2l6ZSgpOwogCiAgICAgYm9vbCBzd2FsbG93TW91
c2VSZWxlYXNlRXZlbnQgPSBmYWxzZTsKICAgICBpZiAoIXN3YWxsb3dNb3VzZVVwRXZlbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159042</attachid>
            <date>2012-08-17 01:21:47 -0700</date>
            <delta_ts>2012-10-16 06:41:38 -0700</delta_ts>
            <desc>work in progress 6</desc>
            <filename>wip12250f</filename>
            <type>text/plain</type>
            <size>18059</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMjU4NjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYgKzI2NCw3IEBACiBf
X1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uNm1vZGlmeUVOUzBfMTFFQWx0ZXJhdGlvbkVOU18x
OFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUVOU18xNEVVc2VyVHJpZ2dl
cmVkRQogX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjlzZWxlY3RBbGxFdgogX19aTjdXZWJD
b3JlMTRGcmFtZVNlbGVjdGlvbkMxRVBOU181RnJhbWVFCitfX1pON1dlYkNvcmUxNEZyYW1lU2Vs
ZWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTRQbHVnaW5Eb2N1bWVudDEycGx1Z2luV2lkZ2V0RXYK
IF9fWk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyMGZvcmNlQ29udGVudFNuaWZmaW5nRXYKIF9f
Wk43V2ViQ29yZTE0UmVzb3VyY2VIYW5kbGUyNnN5bmNocm9ub3VzTG9hZFJ1bkxvb3BNb2RlRXYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHJldmlzaW9uIDEyNTg2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksNiArODksMjQgQEAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hT
aGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQogCit2b2lkIEVsZW1l
bnRTaGFkb3c6OnJlbW92ZVNoYWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290PiBzaGFkb3dS
b290VG9SZW1vdmUpCit7CisgICAgLy8gRG9udCBwcm90ZWN0IHRoaXMgcmVmIGNvdW50LgorICAg
IEVsZW1lbnQqIHNoYWRvd0hvc3QgPSBob3N0KCk7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxQb3BTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3RUb1JlbW92ZS5n
ZXQoKSk7CisgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1
YnRyZWUoc2hhZG93Um9vdFRvUmVtb3ZlLmdldCgpKTsKKyAgICBtX3NoYWRvd1Jvb3RzLnJlbW92
ZShzaGFkb3dSb290VG9SZW1vdmUuZ2V0KCkpOworCisgICAgaWYgKHNoYWRvd1Jvb3RUb1JlbW92
ZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgc2hhZG93Um9vdFRvUmVtb3ZlLT5kZXRhY2goKTsKKwor
ICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50KCktPmFkb3B0SWZOZWVkZWQoc2hhZG93Um9vdFRvUmVt
b3ZlLmdldCgpKTsKKyAgICBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXIoc2hhZG93SG9zdCkubm90
aWZ5KHNoYWRvd1Jvb3RUb1JlbW92ZS5nZXQoKSk7CisKKyAgICBpbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKHNoYWRvd0hvc3QpOworfQorCiB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRv
d1Jvb3RzKCkKIHsKICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHJldmlzaW9uIDEyNTg2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcg
QEAKIAogICAgIHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKICAgICB2b2lkIGFkZFNoYWRv
d1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFzc1JlZlB0cjxTaGFkb3dSb290PiwgU2hhZG93
Um9vdDo6U2hhZG93Um9vdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbW92ZVNo
YWRvd1Jvb3QoUGFzc1JlZlB0cjxTaGFkb3dSb290Pik7CiAKICAgICB2b2lkIGF0dGFjaCgpOwog
ICAgIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAkocmV2aXNpb24gMTI1ODYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxNSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAKKyNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIKKyNpbmNs
dWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJF
bGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgpAQCAtNDAsMTAgKzQzLDEyIEBA
CiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5o
IgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2VsZWN0RWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxTaGFkb3dFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCkBAIC01OCw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyZWRQb3NpdGlvbi5oIgog
I2luY2x1ZGUgIlNlY3VyZVRleHRJbnB1dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5j
bHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgpAQCAtNjcs
NiArNzMsOCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCisjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorCiAjZGVm
aW5lIEVESVRfREVCVUcgMAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMDgsNiArMTE2LDcg
QEAKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbihOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpKQogICAgICwgbV9ncmFu
dWxhcml0eShDaGFyYWN0ZXJHcmFudWxhcml0eSkKKyAgICAsIG1fYWN0aXZlUmVzaXplQ29ybmVy
VHlwZShOb0Nvcm5lcikKICAgICAsIG1fY2FyZXRCbGlua1RpbWVyKHRoaXMsICZGcmFtZVNlbGVj
dGlvbjo6Y2FyZXRCbGlua1RpbWVyRmlyZWQpCiAgICAgLCBtX2Fic0NhcmV0Qm91bmRzRGlydHko
dHJ1ZSkKICAgICAsIG1fY2FyZXRQYWludCh0cnVlKQpAQCAtMTE4LDYgKzEyNywxMCBAQAogICAg
ICAgICBtX3NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKHRydWUpOwogfQogCitGcmFtZVNlbGVj
dGlvbjo6fkZyYW1lU2VsZWN0aW9uKCkKK3sKK30KKwogRWxlbWVudCogRnJhbWVTZWxlY3Rpb246
OnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgRWxl
bWVudCogc2VsZWN0aW9uUm9vdCA9IG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
QEAgLTI5NCw3ICszMDcsOSBAQAogICAgIAogICAgIGlmICghcy5pc05vbmUoKSAmJiAhKG9wdGlv
bnMgJiBEb05vdFNldEZvY3VzKSkKICAgICAgICAgc2V0Rm9jdXNlZE5vZGVJZk5lZWRlZCgpOwot
ICAgIAorCisgICAgdXBkYXRlQ29udHJvbFNlbGVjdGlvbigpOworCiAgICAgdXBkYXRlQXBwZWFy
YW5jZSgpOwogCiAgICAgLy8gQWx3YXlzIGNsZWFyIHRoZSB4IHBvc2l0aW9uIHVzZWQgZm9yIHZl
cnRpY2FsIGFycm93IG5hdmlnYXRpb24uCkBAIC0xNzMyLDcgKzE3NDcsNyBAQAogICAgIC8vIGFz
c3VtZSBhIHZhbGlkIHNlbGVjdGlvbi4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Njk1NjM+IGFuZCA8cmRhcjovL3Byb2JsZW0vMTAyMzI4NjY+LgogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBtX3Nl
bGVjdGlvbi52aXNpYmxlRW5kKCkpOwogCi0gICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKSB7
CisgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpIHx8IG1fY29udHJvbFNlbGVjdGlvbikgewog
ICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMjAwMyw2ICsyMDE4LDIxNSBAQAogICAgIHJldHVybiBzZXR0aW5ncyAmJiBzZXR0aW5ncy0+
dmlzdWFsV29yZE1vdmVtZW50RW5hYmxlZCgpOwogfQogCisKK2Jvb2wgRnJhbWVTZWxlY3Rpb246
OmdldENvbnRyb2xTZWxlY3Rpb25JZlBvc3NpYmxlKE5vZGUqIGlubmVyTm9kZSwgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAgIGlmICghaW5uZXJOb2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+aGFzVGFnTmFtZShp
bWdUYWcpICYmIGlubmVyTm9kZS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgeworICAgICAg
ICBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShpbm5lck5v
ZGUpLCBwb3NpdGlvbkFmdGVyTm9kZShpbm5lck5vZGUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKCFpbm5lck5vZGUtPmhhc1RhZ05hbWUod2Via2l0SW5uZXJJbWFn
ZVRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QgPSBpbm5lck5vZGUtPnNoYWRvd1Jvb3QoKTsKKyAgICBBU1NFUlQoc2hhZG93Um9vdCk7Cisg
ICAgRWxlbWVudCogaG9zdCA9IHNoYWRvd1Jvb3QtPmhvc3QoKTsKKyAgICBBU1NFUlQoaG9zdC0+
aGFzVGFnTmFtZShpbWdUYWcpKTsKKyAgICBpZiAoaG9zdC0+aXNDb250ZW50UmljaGx5RWRpdGFi
bGUoKSkgeworICAgICAgICBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uQmVm
b3JlTm9kZShob3N0KSwgcG9zaXRpb25BZnRlck5vZGUoaG9zdCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxT
aGFkb3dSb290PiBjcmVhdGVDb250cm9sU2VsZWN0aW9uU2hhZG93Um9vdChFbGVtZW50KiBob3N0
KQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGhpZGUgaXQgZnJvbSBzY3JpcHRzLgorICAg
IFJlZlB0cjxTaGFkb3dSb290PiBjb250cm9sU2VsZWN0aW9uID0gU2hhZG93Um9vdDo6Y3JlYXRl
KGhvc3QsIFNoYWRvd1Jvb3Q6OkF1dGhvclNoYWRvd1Jvb3QsIEFTU0VSVF9OT19FWENFUFRJT04p
OworCisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjb250YWluZXIgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGhvc3QtPmRvY3VtZW50KCkpOworICAgIGNvbnRhaW5lci0+c2V0QXR0cmlidXRlKHN0
eWxlQXR0ciwgImRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9zaXRpb246IHJlbGF0aXZlOyBib3Jk
ZXI6IDFweCBzb2xpZCBibGFjazsgbWFyZ2luOiAtMXB4OyIpOworICAgIC8vIEZJWE1FOiBUaGUg
aW1nIGVsZW1lbnQncyBVQSBzaGFkb3cgcm9vdCBkb2Vzbid0IHByZXNlcnZlIHRoZSBpbnRyaW5z
aWMgd2lkdGggJiBoZWlnaHQgb2YgdGhlIGltYWdlLgorICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hp
bGQoc3RhdGljX2Nhc3Q8Tm9kZSo+KGhvc3QpLT5jbG9uZU5vZGUoZmFsc2UpKTsKKyAgICBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudCo+KGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpKS0+c2V0QXR0cmli
dXRlKHN0eWxlQXR0ciwgImRpc3BsYXk6IGJsb2NrOyIpOworCisgICAgU3RyaW5nIHJlc2l6ZUJv
eERlZmF1bHRTdHlsZSA9ICJ3aWR0aDogNHB4OyBoZWlnaHQ6IDRweDsgcG9zaXRpb246IGFic29s
dXRlOyBib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYmFja2dyb3VuZDogd2hpdGU7ICI7CisKKyAg
ICBSZWZQdHI8SFRNTEVsZW1lbnQ+IHVwcGVyTGVmdENvcm5lciA9IEhUTUxEaXZFbGVtZW50Ojpj
cmVhdGUoaG9zdC0+ZG9jdW1lbnQoKSk7CisgICAgdXBwZXJMZWZ0Q29ybmVyLT5zZXRBdHRyaWJ1
dGUoc3R5bGVBdHRyLCByZXNpemVCb3hEZWZhdWx0U3R5bGUgKyAibGVmdDogLTJweDsgdG9wOiAt
MnB4OyBjdXJzb3I6IG53c2UtcmVzaXplOyIpOworICAgIHVwcGVyTGVmdENvcm5lci0+c2V0QXR0
cmlidXRlKGNsYXNzQXR0ciwgInVwcGVyTGVmdCIpOworICAgIGNvbnRhaW5lci0+YXBwZW5kQ2hp
bGQodXBwZXJMZWZ0Q29ybmVyKTsKKworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gdXBwZXJSaWdo
dENvcm5lciA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoaG9zdC0+ZG9jdW1lbnQoKSk7CisgICAg
dXBwZXJSaWdodENvcm5lci0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgcmVzaXplQm94RGVmYXVs
dFN0eWxlICsgInJpZ2h0OiAtMnB4OyB0b3A6IC0ycHg7IGN1cnNvcjogbmVzdy1yZXNpemU7Iik7
CisgICAgdXBwZXJSaWdodENvcm5lci0+c2V0QXR0cmlidXRlKGNsYXNzQXR0ciwgInVwcGVyUmln
aHQiKTsKKyAgICBjb250YWluZXItPmFwcGVuZENoaWxkKHVwcGVyUmlnaHRDb3JuZXIpOworCisg
ICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsb3dlckxlZnRDb3JuZXIgPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKGhvc3QtPmRvY3VtZW50KCkpOworICAgIGxvd2VyTGVmdENvcm5lci0+c2V0QXR0cmli
dXRlKHN0eWxlQXR0ciwgcmVzaXplQm94RGVmYXVsdFN0eWxlICsgImxlZnQ6IC0ycHg7IGJvdHRv
bTogLTJweDsgY3Vyc29yOiBuZXN3LXJlc2l6ZTsiKTsKKyAgICBsb3dlckxlZnRDb3JuZXItPnNl
dEF0dHJpYnV0ZShjbGFzc0F0dHIsICJsb3dlckxlZnQiKTsKKyAgICBjb250YWluZXItPmFwcGVu
ZENoaWxkKGxvd2VyTGVmdENvcm5lcik7CisKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxvd2Vy
UmlnaHRDb3JuZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGhvc3QtPmRvY3VtZW50KCkpOwor
ICAgIGxvd2VyUmlnaHRDb3JuZXItPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHJlc2l6ZUJveERl
ZmF1bHRTdHlsZSArICJyaWdodDogLTJweDsgYm90dG9tOiAtMnB4OyBjdXJzb3I6IG53c2UtcmVz
aXplOyIpOworICAgIGxvd2VyUmlnaHRDb3JuZXItPnNldEF0dHJpYnV0ZShjbGFzc0F0dHIsICJs
b3dlclJpZ2h0Iik7CisgICAgY29udGFpbmVyLT5hcHBlbmRDaGlsZChsb3dlclJpZ2h0Q29ybmVy
KTsKKworICAgIGNvbnRyb2xTZWxlY3Rpb24tPmFwcGVuZENoaWxkKGNvbnRhaW5lciwgQVNTRVJU
X05PX0VYQ0VQVElPTik7CisKKyAgICByZXR1cm4gY29udHJvbFNlbGVjdGlvbjsKK30KKwordm9p
ZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQ29udHJvbFNlbGVjdGlvbigpCit7CisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBzdXBwb3J0IGVuYWJsZU9iamVjdFJlc2l6aW5nLgorCisgICAgSFRNTEVs
ZW1lbnQqIG5ld0NvbnRyb2xTZWxlY3Rpb25Ib3N0ID0gMDsKKyAgICBpZiAoTm9kZSogc3RhcnRQ
b3NpdGlvbk5vZGUgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmNvbXB1dGVOb2RlQWZ0ZXJQb3NpdGlv
bigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgY29uZGl0aW9uIG1vcmUgcm9idXN0
LgorICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbk5vZGUgPT0gbV9zZWxlY3Rpb24uZW5kKCkuY29t
cHV0ZU5vZGVCZWZvcmVQb3NpdGlvbigpICYmIHN0YXJ0UG9zaXRpb25Ob2RlLT5oYXNUYWdOYW1l
KGltZ1RhZykpCisgICAgICAgICAgICBuZXdDb250cm9sU2VsZWN0aW9uSG9zdCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4oc3RhcnRQb3NpdGlvbk5vZGUpOworICAgIH0KKworICAgIGlmIChu
ZXdDb250cm9sU2VsZWN0aW9uSG9zdCA9PSAobV9jb250cm9sU2VsZWN0aW9uID8gbV9jb250cm9s
U2VsZWN0aW9uLT5zaGFkb3dIb3N0KCkgOiAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fY29udHJvbFNlbGVjdGlvbikgeworICAgICAgICBFbGVtZW50KiBzaGFkb3dIb3N0ID0gbV9j
b250cm9sU2VsZWN0aW9uLT5zaGFkb3dIb3N0KCk7CisgICAgICAgIEFTU0VSVChzaGFkb3dIb3N0
KTsKKyAgICAgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gc2hhZG93SG9zdC0+c2hhZG93KCk7
CisgICAgICAgIEFTU0VSVChzaGFkb3cpOworICAgICAgICBzaGFkb3ctPnJlbW92ZVNoYWRvd1Jv
b3QobV9jb250cm9sU2VsZWN0aW9uKTsKKyAgICAgICAgc2hhZG93SG9zdC0+ZGV0YWNoKCk7Cisg
ICAgICAgIHNoYWRvd0hvc3QtPmF0dGFjaCgpOworICAgICAgICBtX2NvbnRyb2xTZWxlY3Rpb24g
PSAwOworICAgIH0KKworICAgIGlmIChuZXdDb250cm9sU2VsZWN0aW9uSG9zdCkKKyAgICAgICAg
bV9jb250cm9sU2VsZWN0aW9uID0gY3JlYXRlQ29udHJvbFNlbGVjdGlvblNoYWRvd1Jvb3QobmV3
Q29udHJvbFNlbGVjdGlvbkhvc3QpOworfQorCitjbGFzcyBSZXNpemVJbWFnZUNvbW1hbmQgOiBw
dWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZXNpemVJbWFnZUNvbW1hbmQ+IGNyZWF0ZShIVE1MRWxlbWVudCogZWxlbWVudCwgTGF5
b3V0U2l6ZSBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXNpemVJ
bWFnZUNvbW1hbmQoZWxlbWVudCwgc2l6ZSkpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
UmVzaXplSW1hZ2VDb21tYW5kKEhUTUxFbGVtZW50KiBlbGVtZW50LCBMYXlvdXRTaXplIHNpemUp
CisgICAgICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSkKKyAg
ICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoaW1nVGFnKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKSBPVkVS
UklERQorICAgIHsKKyAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkobV9lbGVtZW50LCBDU1NQcm9w
ZXJ0eVdpZHRoKTsKKyAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHkobV9lbGVtZW50LCBDU1NQcm9w
ZXJ0eUhlaWdodCk7ICAgICAgICAKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShtX2VsZW1lbnQs
IHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIobV9zaXplLndpZHRoKCkucm91bmQoKSkpOworICAg
ICAgICBzZXROb2RlQXR0cmlidXRlKG1fZWxlbWVudCwgaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1i
ZXIobV9zaXplLmhlaWdodCgpLnJvdW5kKCkpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IG1fZWxlbWVudDsKKyAgICBMYXlvdXRTaXplIG1fc2l6ZTsKK307CisKK2Jvb2wgRnJh
bWVTZWxlY3Rpb246OmhhbmRsZUNsaWNrT25Db250cm9sU2VsZWN0aW9uKE5vZGUqIHRhcmdldE5v
ZGUsIGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIHJlc3VsdHMpCit7CisgICAg
aWYgKCFtX2NvbnRyb2xTZWxlY3Rpb24gfHwgIXRhcmdldE5vZGUgfHwgIXRhcmdldE5vZGUtPnBh
cmVudE5vZGUoKQorICAgICAgICB8fCB0YXJnZXROb2RlLT5wYXJlbnROb2RlKCktPnBhcmVudE5v
ZGUoKSAhPSBtX2NvbnRyb2xTZWxlY3Rpb24gfHwgIXRhcmdldE5vZGUtPmhhc1RhZ05hbWUoZGl2
VGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlID0gc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnQqPih0YXJnZXROb2RlKS0+ZmFzdEdldEF0
dHJpYnV0ZShjbGFzc0F0dHIpOworICAgIGlmICh0eXBlID09ICJ1cHBlckxlZnQiKQorICAgICAg
ICBtX2FjdGl2ZVJlc2l6ZUNvcm5lclR5cGUgPSBVcHBlckxlZnQ7CisgICAgZWxzZSBpZiAodHlw
ZSA9PSAidXBwZXJSaWdodCIpCisgICAgICAgIG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZSA9IFVw
cGVyUmlnaHQ7CisgICAgZWxzZSBpZiAodHlwZSA9PSAibG93ZXJMZWZ0IikKKyAgICAgICAgbV9h
Y3RpdmVSZXNpemVDb3JuZXJUeXBlID0gTG93ZXJMZWZ0OworICAgIGVsc2UgeworICAgICAgICBB
U1NFUlQodHlwZSA9PSAibG93ZXJSaWdodCIpOworICAgICAgICBtX2FjdGl2ZVJlc2l6ZUNvcm5l
clR5cGUgPSBMb3dlclJpZ2h0OworICAgIH0KKworICAgIG1faW5pdGlhbFBvc2l0aW9uRm9yUmVz
aXplID0gcmVzdWx0cy5ldmVudCgpLmdsb2JhbFBvc2l0aW9uKCk7CisgICAgbV9pbml0aWFsU2l6
ZUZvclJlc2l6ZSA9IExheW91dFNpemUobV9jb250cm9sU2VsZWN0aW9uLT5zaGFkb3dIb3N0KCkt
Pm9mZnNldFdpZHRoKCksIG1fY29udHJvbFNlbGVjdGlvbi0+c2hhZG93SG9zdCgpLT5vZmZzZXRI
ZWlnaHQoKSk7CisKKyAgICBBU1NFUlQobV9jb250cm9sU2VsZWN0aW9uLT5maXJzdENoaWxkKCkt
Pmhhc1RhZ05hbWUoZGl2VGFnKSk7CisgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50Kj4obV9jb250cm9sU2VsZWN0aW9uLT5maXJzdENoaWxkKCkpOwor
ICAgIEFTU0VSVChjb250YWluZXItPmZpcnN0Q2hpbGQoKS0+aGFzVGFnTmFtZShpbWdUYWcpKTsK
KyAgICBIVE1MRWxlbWVudCogaW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGNvbnRh
aW5lci0+Zmlyc3RDaGlsZCgpKTsKKworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBtX2luaXRpYWxTaXplRm9yUmVzaXplLndpZHRoKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgbV9pbml0aWFsU2l6ZUZvclJlc2l6ZS5oZWlnaHQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgaW1hZ2UtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgMTAwLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSk7CisgICAgaW1hZ2UtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlIZWlnaHQsIDEwMC4wLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworCisg
ICAgLy8gRklYTUU6IFJlbW92ZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBpbWFnZSBlbGVtZW50
IHNvIHRoYXQgYm91bmRpbmcgYm94IGNoYW5nZSBpdHMgc2l6ZSBhcHByb3ByaWF0ZWx5LgorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitzdGF0aWMgY29uc3QgZG91YmxlIGNvbnRyb2xTZWxl
Y3Rpb25NaW5JbWFnZVdpZHRoID0gNS4wOworc3RhdGljIGNvbnN0IGRvdWJsZSBjb250cm9sU2Vs
ZWN0aW9uTWluSW1hZ2VIZWlnaHQgPSA1LjA7CisKK2Jvb2wgRnJhbWVTZWxlY3Rpb246OmhhbmRs
ZU1vdXNlTW92ZU9uQ29udHJvbFNlbGVjdGlvbihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJiBldmVudCkKK3sKKyAgICBib29sIGludmVydFggPSBmYWxzZTsKKyAgICBib29sIGlu
dmVydFkgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZSkgewor
ICAgIGNhc2UgTm9Db3JuZXI6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFVwcGVy
TGVmdDoKKyAgICAgICAgaW52ZXJ0WCA9IHRydWU7CisgICAgICAgIGludmVydFkgPSB0cnVlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFVwcGVyUmlnaHQ6CisgICAgICAgIGludmVydFkgPSB0
cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExvd2VyTGVmdDoKKyAgICAgICAgaW52ZXJ0
WCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTG93ZXJSaWdodDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUKG1fY29udHJvbFNlbGVjdGlvbik7CisgICAgTGF5
b3V0U2l6ZSBuZXdTaXplKG1faW5pdGlhbFNpemVGb3JSZXNpemUpOworICAgIG5ld1NpemUuZXhw
YW5kKChpbnZlcnRYID8gLTEuMCA6IDEuMCkgKiAoZXZlbnQuZXZlbnQoKS5nbG9iYWxQb3NpdGlv
bigpLngoKSAtIG1faW5pdGlhbFBvc2l0aW9uRm9yUmVzaXplLngoKSksCisgICAgICAgIChpbnZl
cnRZID8gLTEuMCA6IDEuMCkgKiAoZXZlbnQuZXZlbnQoKS5nbG9iYWxQb3NpdGlvbigpLnkoKSAt
IG1faW5pdGlhbFBvc2l0aW9uRm9yUmVzaXplLnkoKSkpOworCisgICAgQVNTRVJUKG1fY29udHJv
bFNlbGVjdGlvbi0+Zmlyc3RDaGlsZCgpLT5oYXNUYWdOYW1lKGRpdlRhZykpOworICAgIEhUTUxF
bGVtZW50KiBjb250YWluZXIgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fY29udHJvbFNl
bGVjdGlvbi0+Zmlyc3RDaGlsZCgpKTsKKyAgICBjb250YWluZXItPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgbWF4KGNvbnRyb2xTZWxlY3Rpb25NaW5JbWFnZVdpZHRo
LCBuZXdTaXplLndpZHRoKCkudG9Eb3VibGUoKSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgp
OworICAgIGNvbnRhaW5lci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdo
dCwgbWF4KGNvbnRyb2xTZWxlY3Rpb25NaW5JbWFnZUhlaWdodCwgbmV3U2l6ZS5oZWlnaHQoKS50
b0RvdWJsZSgpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBGcmFtZVNlbGVjdGlvbjo6ZW5kQ29udHJvbFNlbGVjdGlvblJlc2l6ZSgp
Cit7CisgICAgaWYgKG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZSA9PSBOb0Nvcm5lcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9hY3RpdmVSZXNpemVDb3JuZXJUeXBlID0gTm9Db3JuZXI7CisK
KyAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPiht
X2NvbnRyb2xTZWxlY3Rpb24tPmZpcnN0Q2hpbGQoKSk7CisKKyAgICBBU1NFUlQobV9jb250cm9s
U2VsZWN0aW9uLT5zaGFkb3dIb3N0KCktPmhhc1RhZ05hbWUoaW1nVGFnKSk7CisgICAgYXBwbHlD
b21tYW5kKFJlc2l6ZUltYWdlQ29tbWFuZDo6Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4obV9jb250cm9sU2VsZWN0aW9uLT5zaGFkb3dIb3N0KCkpLAorICAgICAgICBMYXlvdXRTaXpl
KGNvbnRhaW5lci0+Y2xpZW50V2lkdGgoKSwgY29udGFpbmVyLT5jbGllbnRIZWlnaHQoKSkpKTsK
K30KKwogI2lmbmRlZiBOREVCVUcKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9ybWF0Rm9yRGVi
dWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwCShy
ZXZpc2lvbiAxMjU4NjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3Bl
cnR5Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDkgQEAKIHZvaWQgUmVt
b3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBjb25zdCBTdHlsZVByb3Bl
cnR5U2V0KiBzdHlsZSA9IG1fZWxlbWVudC0+aW5saW5lU3R5bGUoKTsKKyAgICBpZiAoIXN0eWxl
KQorICAgICAgICByZXR1cm47CisKICAgICBtX29sZFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5
VmFsdWUobV9wcm9wZXJ0eSk7CiAgICAgbV9pbXBvcnRhbnQgPSBzdHlsZS0+cHJvcGVydHlJc0lt
cG9ydGFudChtX3Byb3BlcnR5KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uaAkocmV2aXNpb24gMTI1ODYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiBjbGFzcyBG
cmFtZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKK2Ns
YXNzIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHM7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBj
bGFzcyBSZW5kZXJWaWV3OwogY2xhc3MgU2V0dGluZ3M7CkBAIC0xMzIsNiArMTMzLDcgQEAKICAg
ICB9CiAKICAgICBleHBsaWNpdCBGcmFtZVNlbGVjdGlvbihGcmFtZSogPSAwKTsKKyAgICB+RnJh
bWVTZWxlY3Rpb24oKTsKIAogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7IH0KICAgICBFbGVt
ZW50KiByb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKQEAgLTI1
Nyw2ICsyNTksMTEgQEAKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbihjb25zdCBTY3JvbGxBbGln
bm1lbnQmID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBSZXZlYWxFeHRl
bnRPcHRpb24gPSBEb05vdFJldmVhbEV4dGVudCk7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25Gcm9t
Tm9uZSgpOwogCisgICAgc3RhdGljIGJvb2wgZ2V0Q29udHJvbFNlbGVjdGlvbklmUG9zc2libGUo
Tm9kZSogaW5uZXJOb2RlLCBWaXNpYmxlU2VsZWN0aW9uJik7CisgICAgYm9vbCBoYW5kbGVDbGlj
a09uQ29udHJvbFNlbGVjdGlvbihOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzJik7CisgICAgYm9vbCBoYW5kbGVNb3VzZU1vdmVPbkNvbnRyb2xTZWxl
Y3Rpb24oY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOworICAgIHZvaWQgZW5k
Q29udHJvbFNlbGVjdGlvblJlc2l6ZSgpOworCiBwcml2YXRlOgogICAgIGVudW0gRVBvc2l0aW9u
VHlwZSB7IFNUQVJULCBFTkQsIEJBU0UsIEVYVEVOVCB9OwogCkBAIC0yOTMsNiArMzAwLDggQEAK
ICAgCiAgICAgYm9vbCB2aXN1YWxXb3JkTW92ZW1lbnRFbmFibGVkKCkgY29uc3Q7CiAKKyAgICB2
b2lkIHVwZGF0ZUNvbnRyb2xTZWxlY3Rpb24oKTsKKwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAg
ICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKQEAgLTMwMiw2
ICszMTEsMTcgQEAKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsKIAogICAgIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IG1fdHlwaW5nU3R5bGU7CisgICAgUmVmUHRyPFNoYWRvd1Jvb3Q+
IG1fY29udHJvbFNlbGVjdGlvbjsKKyAgICBlbnVtIFJlc2l6ZUNvcm5lclR5cGUgeworICAgICAg
ICBOb0Nvcm5lciwKKyAgICAgICAgVXBwZXJMZWZ0LAorICAgICAgICBVcHBlclJpZ2h0LAorICAg
ICAgICBMb3dlckxlZnQsCisgICAgICAgIExvd2VyUmlnaHQsCisgICAgfTsKKyAgICBSZXNpemVD
b3JuZXJUeXBlIG1fYWN0aXZlUmVzaXplQ29ybmVyVHlwZTsKKyAgICBMYXlvdXRQb2ludCBtX2lu
aXRpYWxQb3NpdGlvbkZvclJlc2l6ZTsKKyAgICBMYXlvdXRTaXplIG1faW5pdGlhbFNpemVGb3JS
ZXNpemU7CiAKICAgICBUaW1lcjxGcmFtZVNlbGVjdGlvbj4gbV9jYXJldEJsaW5rVGltZXI7CiAg
ICAgLy8gVGhlIHBhaW50ZWQgYm91bmRzIG9mIHRoZSBjYXJldCBpbiBhYnNvbHV0ZSBjb29yZGlu
YXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTI1
ODYwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OTksNiArNDk5LDExIEBACiB7CiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgTm9kZSogaW5uZXJOb2Rl
ID0gZXZlbnQudGFyZ2V0Tm9kZSgpOworCisgICAgVmlzaWJsZVNlbGVjdGlvbiBjb250cm9sU2Vs
ZWN0aW9uOworICAgIGlmIChGcmFtZVNlbGVjdGlvbjo6Z2V0Q29udHJvbFNlbGVjdGlvbklmUG9z
c2libGUoaW5uZXJOb2RlLCBjb250cm9sU2VsZWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIHVwZGF0
ZVNlbGVjdGlvbkZvck1vdXNlRG93bkRpc3BhdGNoaW5nU2VsZWN0U3RhcnQoaW5uZXJOb2RlLCBj
b250cm9sU2VsZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisKICAgICBpZiAoIShpbm5l
ck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYmIG1fbW91c2VEb3duTWF5U3RhcnRTZWxl
Y3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE1NTUsNiArMTU2MCwxMSBAQAogICAg
ICAgICB9CiAgICAgfQogCisgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5oYW5kbGVDbGlj
a09uQ29udHJvbFNlbGVjdGlvbihtX2NsaWNrTm9kZS5nZXQoKSwgbWV2KSkgeworICAgICAgICBp
bnZhbGlkYXRlQ2xpY2soKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1ZSk7CiAKICAg
ICBib29sIHN3YWxsb3dFdmVudCA9IGRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VF
dmVudCwgdHJ1ZSk7CkBAIC0xNzU1LDYgKzE3NjUsOCBAQAogCiAgICAgaWYgKG1fcmVzaXplTGF5
ZXIgJiYgbV9yZXNpemVMYXllci0+aW5SZXNpemVNb2RlKCkpCiAgICAgICAgIG1fcmVzaXplTGF5
ZXItPnJlc2l6ZShtb3VzZUV2ZW50LCBtX29mZnNldEZyb21SZXNpemVDb3JuZXIpOworICAgIGVs
c2UgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5oYW5kbGVNb3VzZU1vdmVPbkNvbnRyb2xTZWxl
Y3Rpb24obWV2KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIGlm
IChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgICAgICBzY3JvbGxi
YXIgPSB2aWV3LT5zY3JvbGxiYXJBdFBvaW50KG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CkBAIC0x
ODcxLDcgKzE4ODMsOCBAQAogICAgIGlmIChtX3Jlc2l6ZUxheWVyKSB7CiAgICAgICAgIG1fcmVz
aXplTGF5ZXItPnNldEluUmVzaXplTW9kZShmYWxzZSk7CiAgICAgICAgIG1fcmVzaXplTGF5ZXIg
PSAwOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPmVu
ZENvbnRyb2xTZWxlY3Rpb25SZXNpemUoKTsKIAogICAgIGJvb2wgc3dhbGxvd01vdXNlUmVsZWFz
ZUV2ZW50ID0gZmFsc2U7CiAgICAgaWYgKCFzd2FsbG93TW91c2VVcEV2ZW50KQo=
</data>
<flag name="commit-queue"
          id="182055"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>