<?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>81326</bug_id>
          
          <creation_ts>2012-03-16 02:49:27 -0700</creation_ts>
          <short_desc>Vertical flow support for OpenType fonts with the least platform dependencies</short_desc>
          <delta_ts>2012-03-29 20:45:39 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>81332</blocked>
    
    <blocked>81389</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Koji Ishii">kojii</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>haraken</cc>
    
    <cc>hyatt</cc>
    
    <cc>kojii</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>580315</commentid>
    <comment_count>0</comment_count>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-16 02:49:27 -0700</bug_when>
    <thetext>Splitting from bug 48459; I looked for how to split a bug without much luck, apologize in advance if I were mistaken.

There are several bug for vertical flow, one for each platform for how a platform gets vertical alternate glyphs and vertical font metrics. Each platform can use its own APIs, but some platform like Windows lacks support for such APIs and therefore it needs to read OpenType tables directly. Doing so gives more controls on its behavior like text-orientation support, and gives consistent behavior among WebKit platforms.

It was discussed briefly at webkit-dev:
https://lists.webkit.org/pipermail/webkit-dev/2012-February/019562.html
https://lists.webkit.org/pipermail/webkit-dev/2012-February/019565.html
https://lists.webkit.org/pipermail/webkit-dev/2012-February/019647.html
and it looks like our preference is to read OpenType tables directly rather than using platform-dependent APIs.

This bug is to track platform-independent part of the fix. I&apos;m thinking to propose splitting into 3 patches:
1. A class that reads all the necessary information from OpenType tables. This includes Windows version of the platfrom support for the class (this bug)
2. Change to WebCore to support the class in platform-independent way.
3. Change to WebCore to use the class for CGWin (bug 48459)

The 2nd bug is not entered yet, I&apos;ll do so soon after this bug. I&apos;m also interested in doing platform-dependent part (the last bug) for Chromium-Windows port too once the 1st and the 2nd bugs are set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580369</commentid>
    <comment_count>1</comment_count>
      <attachid>132247</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-16 04:24:20 -0700</bug_when>
    <thetext>Created attachment 132247
OpenTypeVerticalData class and its related changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580807</commentid>
    <comment_count>2</comment_count>
      <attachid>132350</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-16 12:32:34 -0700</bug_when>
    <thetext>Created attachment 132350
OpenTypeVerticalData class and its related changes

Since the OpenTypeVerticalData class is too large for a patch, I&apos;m splitting GSUB part to bug 81389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581278</commentid>
    <comment_count>3</comment_count>
      <attachid>132451</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-17 00:08:19 -0700</bug_when>
    <thetext>Created attachment 132451
OpenTypeVerticalData class and its related changes

Self-review; name cleanup and moved more code to bug 81389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581365</commentid>
    <comment_count>4</comment_count>
      <attachid>132470</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-17 13:00:27 -0700</bug_when>
    <thetext>Created attachment 132470
OpenTypeVerticalData class and its related changes

More cleanup and removed things that are not absolutely necessary to reduce patch size</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581380</commentid>
    <comment_count>5</comment_count>
      <attachid>132470</attachid>
    <who name="">mitz</who>
    <bug_when>2012-03-17 15:14:39 -0700</bug_when>
    <thetext>Comment on attachment 132470
OpenTypeVerticalData class and its related changes

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        This patch is for any platforms that wants to parse OpenType tables

typo: wants

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:280
&gt; +    void* openTypeTable(uint32_t table, size_t* = 0) const;

Do you foresee any callers who won’t be interested in the size? Are there going to be any callers besides instantiations of the below template? Maybe this can be private and the last parameter be changed into a size_t&amp;.

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:281
&gt; +    template &lt;typename T&gt; PassOwnPtr&lt;T&gt; openTypeTable(uint32_t table, size_t* size = 0) const

Same question about the size. I wonder if this function shouldn’t return a SharedBuffer instead of an OwnPtr and size. One reason is that I’m thinking that on some platforms may vend the table data as a refcounted object (e.g. a CFDataRef) so we wouldn’t want to create an extra copy.

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:288
&gt; +            ASSERT_WITH_MESSAGE(false, &quot;Broken font table ignored, size %d &lt; min %d&quot;, *size, sizeof(T));

It’s wrong to make an assertion about something that’s outside the code’s control: a font file may contain malformed tables (and the platform API may not care). You can use LOG_ERROR here.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:2
&gt; + * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.

Is the code in this new file copied form some other file with this copyright? Otherwise, why are you including it?

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:31
&gt; +struct OTInt16 {

I wonder if it would be better to have these in an OpenType namespace (or, since they apply to all sfnt-type containers, a more generic name).

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:42
&gt; +

This is the same as BigEndianUShort from OpenTypeUtilities.cpp (perhaps that’s why you included the Apple copyright?). Are you going to switch that file over to using these types?

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:59
&gt; +#define OT_MAKE_TAG(ch1, ch2, ch3, ch4) ((((uint32_t)(ch4)) &lt;&lt; 24) | (((uint32_t)(ch3)) &lt;&lt; 16) | (((uint32_t)(ch2)) &lt;&lt; 8) | ((uint32_t)(ch1)))

Is this necessary? OpenTypeUtilities.cpp makes us think that all relevant compilers support four-character literals.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.cpp:2
&gt; + * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.

Same question about copyright.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.cpp:131
&gt; +    if (vhea) {

You can reverse the condition and write this as an early return.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.cpp:152
&gt; +        if (cVmtxEntries) {

Ditto.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.h:2
&gt; + * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.

Same question about copyright.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.h:46
&gt; +    void getVerticalTranslationsForGlyphs(const SimpleFontData*, const Glyph*, size_t, float* outXYArray) const;

Is there a reason why this is using bare pointers and a count instead of vectors?

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.h:51
&gt; +private:

Extra private: label here.

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataWin.cpp:83
&gt; +    DWORD cb = GetFontData(hdc, table, 0, 0, 0);

Please use a more descriptive name than “cb”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581382</commentid>
    <comment_count>6</comment_count>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-17 15:55:39 -0700</bug_when>
    <thetext>(In reply to comment #5)

Thank you mitz for the prompt review!

&gt; &gt; Source/WebCore/platform/graphics/FontPlatformData.h:280
&gt; &gt; +    void* openTypeTable(uint32_t table, size_t* = 0) const;
&gt; 
&gt; Do you foresee any callers who won’t be interested in the size? Are there going to be any callers besides instantiations of the below template? Maybe this can be private and the last parameter be changed into a size_t&amp;.

Agreed. I don&apos;t foresee any such callers.

&gt; &gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:2
&gt; &gt; + * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
&gt; 
&gt; Is the code in this new file copied form some other file with this copyright? Otherwise, why are you including it?

I looked for webkit.org and it said I should use WebKit/LICENSE at:
http://www.webkit.org/coding/contributing.html
Should I just remove this line?

&gt; &gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:42
&gt; &gt; +
&gt; 
&gt; This is the same as BigEndianUShort from OpenTypeUtilities.cpp (perhaps that’s why you included the Apple copyright?). Are you going to switch that file over to using these types?

I once did that, but then removed to reduce patch size thinking the switch isn&apos;t absolutely necessary. Sorry I&apos;m still novice at WebKit, I&apos;ll re-do the switch.

&gt; &gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:59
&gt; &gt; +#define OT_MAKE_TAG(ch1, ch2, ch3, ch4) ((((uint32_t)(ch4)) &lt;&lt; 24) | (((uint32_t)(ch3)) &lt;&lt; 16) | (((uint32_t)(ch2)) &lt;&lt; 8) | ((uint32_t)(ch1)))
&gt; 
&gt; Is this necessary? OpenTypeUtilities.cpp makes us think that all relevant compilers support four-character literals.

You&apos;re right. I&apos;ll double-check and then make the change.

&gt; &gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.h:46
&gt; &gt; +    void getVerticalTranslationsForGlyphs(const SimpleFontData*, const Glyph*, size_t, float* outXYArray) const;
&gt; 
&gt; Is there a reason why this is using bare pointers and a count instead of vectors?

Are you talking about Glyph or outXYArray? For Glyph, it&apos;ll come from GlyphBuffer, which doesn&apos;t expose Vector. For outXYArray, there maybe a platform that wants out data as FloatPoint or CGSize in CoreGraphics, so I thought float* is the most flexible for callers. I referred to code in FontMac.mm that calls to CTFontGetVerticalTranslationsForGlyphs(platformData.ctFont(), glyphs, translations.data(), count) and I followed that model. Did I miss something? Again, I&apos;m very new to WebKit, your advice is greatly appreciated.

I&apos;ll reflect all other comments as you said in the next patch. Thank you so much again for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581435</commentid>
    <comment_count>7</comment_count>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-18 00:50:59 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:59
&gt; &gt; +#define OT_MAKE_TAG(ch1, ch2, ch3, ch4) ((((uint32_t)(ch4)) &lt;&lt; 24) | (((uint32_t)(ch3)) &lt;&lt; 16) | (((uint32_t)(ch2)) &lt;&lt; 8) | ((uint32_t)(ch1)))
&gt; 
&gt; Is this necessary? OpenTypeUtilities.cpp makes us think that all relevant compilers support four-character literals.

I remember this one; I did this because Win32 GetFontData API expects different order from four-character literals, and as you said OpenTypeUtilities and several CG code use the syntax but they&apos;re not adopted to many platforms in WebKit as far as I understand. Chrome for instance excludes OpenTypeUtilities, my understanding is -- correct me if I&apos;m wrong -- only CGWin and WinCE use OpenTypeUtilities.

I googled and got an article saying that this is implementation-defined in C99:
http://stackoverflow.com/questions/3960954/c-multicharacter-literal
but the article also says it&apos;s used in several libraries including boost. Other articles mention the same for C++0x.

I personally prefer the safe way if the spec says it&apos;s undefined, but bootst using it seems to be it&apos;s pretty safe, so I&apos;d like to follow what you&apos;d say. I can put conversion before calling Win32 API if necessary.

Can you tell me which you prefer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581489</commentid>
    <comment_count>8</comment_count>
      <attachid>132501</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-18 14:37:40 -0700</bug_when>
    <thetext>Created attachment 132501
OpenTypeVerticalData class and its related changes after mitz&apos;s review

Changes from the previous patch:
* Fixed typo in ChangeLog.
* Changed openTypeTable() method to return PassRefPtr&lt;SharedBuffer&gt;.
* Changed ASSERT to LOG_ERROR when fonts are broken.
* Removed Copyright...Apple from all new files.
* Moved all OpenType types/structs to OpenType namespace.
* Reverted big-endian struct names to be compatible with OpenTypeUtilities.
* Changed conditions to early returns.
* Removed extra private: label.
* Changed variables names like &quot;cb&quot; and &quot;cSomethign&quot; to be more descriptive.

Questions still remains:
* Is Copyright okay with this change?
* Struct names are now compatible with OpenTypeUtilities but I didn&apos;t touch OpenTypeUtilities to share the code yet. Should I do this? In a separate bug?
* Multi-character literals wasn&apos;t changed yet. See above comment, and I&apos;ll change if that&apos;s the preference.
* Haven&apos;t change getVerticalTranslationsForGlyphs to use vectors yet. See comment above, and I&apos;ll change after I got response.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588554</commentid>
    <comment_count>9</comment_count>
      <attachid>132501</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-26 21:57:26 -0700</bug_when>
    <thetext>Comment on attachment 132501
OpenTypeVerticalData class and its related changes after mitz&apos;s review

Oops, I found my knowledge of &quot;for&quot; loop scope is outdated and that causes a problem on VC 2010/Chromium. I&apos;m fixing it now. Sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588564</commentid>
    <comment_count>10</comment_count>
      <attachid>133975</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-26 22:15:42 -0700</bug_when>
    <thetext>Created attachment 133975
OpenTypeVerticalData class and its related changes after mitz&apos;s review

The previous patch had a problem with VC 2010 while porting to Chromium Windows, due to my outdated knowledge on the scope of &quot;for&quot; loop. In this patch, I also changed another ASSERT to LOG_ERROR according to the previous mitz&apos;s advice (should not assert due to contents in font files.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589015</commentid>
    <comment_count>11</comment_count>
      <attachid>133975</attachid>
    <who name="">mitz</who>
    <bug_when>2012-03-27 10:21:41 -0700</bug_when>
    <thetext>Comment on attachment 133975
OpenTypeVerticalData class and its related changes after mitz&apos;s review

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

Looks good overall. r- because of the potential out-of-bounds reads. I also suggest that you use a nested namespace.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeTypes.h:28
&gt; +namespace OpenType {

I’m sorry I wasn’t clear about this when suggesting the namespace. I meant it would be nested in the WebCore namespace. I don’t think we should add top-level namespaces in WebCore.

I also thought that if you introduced a namespace you could drop the OT prefix from most identifiers.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.cpp:37
&gt; +using namespace WebCore;

This shouldn’t be necessary if the namespaces are nested.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.cpp:139
&gt; +        m_advanceWidths[i] = hmtx-&gt;entries[i].advanceWidth;

You should check that hmtx is big enough before reading from it (you can’t rely on countHmtxEntries being correct).

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.cpp:163
&gt; +                const OTVORGTable::VertOriginYMetrics&amp; metrics = vorg-&gt;vertOriginYMetrics[i];

Same here, you can’t trust the table to have as many entries as promised.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.cpp:178
&gt; +        m_advanceHeights[i] = vmtx-&gt;entries[i].advanceHeight;

Ditto.

&gt; Source/WebCore/platform/graphics/opentype/OpenTypeVerticalData.cpp:194
&gt; +        m_topSideBearings[i] = vmtx-&gt;entries[i].topSideBearing;

And again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590402</commentid>
    <comment_count>12</comment_count>
      <attachid>134390</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-28 14:03:35 -0700</bug_when>
    <thetext>Created attachment 134390
OpenTypeVerticalData class and its related changes after mitz&apos;s 2nd review

Thank you so much for taking time for the review again.

I now understand what to do with the namespace, sorry for my misunderstanding. I&apos;ve made OpenType as nested namesapce in WebCore, and also removed all OT prefixes except the macro.

Note that I use OpenType:: specifiers even when unnecessary because type names such as &quot;Int16&quot; looked too common to me. Please let me know if this is annoying.

Also thank you for finding the out-of-bounds reads. They were all fixed now. I added validatedPtr function to get a pointer only when size is valid. It can make sure that type names of reinterpret_cast and sizeof are the same.

I also re-reviewed by myself to see if any other oob reads are left but I didn&apos;t find any others.

Hope this be the last review. I&apos;ll r? once EWS passed just in case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590449</commentid>
    <comment_count>13</comment_count>
      <attachid>134390</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-03-28 14:38:16 -0700</bug_when>
    <thetext>Comment on attachment 134390
OpenTypeVerticalData class and its related changes after mitz&apos;s 2nd review

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

Everything looks ok to me. I don&apos;t know if Dan has any last comments though.

&gt; Source/WebCore/ChangeLog:12
&gt; +        Currently, WebKit relies on platorm APIs to do the work. However,

Typo. &quot;platorm&quot; should be &quot;platform&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590455</commentid>
    <comment_count>14</comment_count>
      <attachid>134390</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-03-28 14:40:32 -0700</bug_when>
    <thetext>Comment on attachment 134390
OpenTypeVerticalData class and its related changes after mitz&apos;s 2nd review

r=me. Dan can chime in if he sees anything to warrant another minus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590845</commentid>
    <comment_count>15</comment_count>
      <attachid>134498</attachid>
    <who name="Koji Ishii">kojii</who>
    <bug_when>2012-03-28 22:13:03 -0700</bug_when>
    <thetext>Created attachment 134498
Fixed two typos in ChangeLog from the previous patch

Huge thank you Dave, I fixed two typos in ChangeLog, but I&apos;m not very clear what to do with this after r+. I set r? and cq? on this patch, apologize in advance if this isn&apos;t a good manner.

I double-checked by diff-ing with the previous patch to make sure other changes were not get mixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591850</commentid>
    <comment_count>16</comment_count>
      <attachid>134498</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 20:44:32 -0700</bug_when>
    <thetext>Comment on attachment 134498
Fixed two typos in ChangeLog from the previous patch

Clearing flags on attachment: 134498

Committed r112642: &lt;http://trac.webkit.org/changeset/112642&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132247</attachid>
            <date>2012-03-16 04:24:20 -0700</date>
            <delta_ts>2012-03-16 12:32:34 -0700</delta_ts>
            <desc>OpenTypeVerticalData class and its related changes</desc>
            <filename>81326-1.patch</filename>
            <type>text/plain</type>
            <size>41394</size>
            <attacher name="Koji Ishii">kojii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYzY2MzkxLi41ZTE3MmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTE2
IEBACisyMDEyLTAzLTE2ICBLb2ppIElzaGlpICA8a29qaWlzaGlAZ21haWwuY29tPgorCisgICAg
ICAgIFZlcnRpY2FsIGZsb3cgc3VwcG9ydCBmb3IgT3BlblR5cGUgZm9udHMgd2l0aCB0aGUgbGVh
c3QgcGxhdGZvcm0gZGVwZW5kZW5jaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MTMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBjbGFzcyBPcGVuVHlw
ZVZlcnRpY2FsRGF0YSB0byByZWFkCisgICAgICAgIHZlcnRpY2FsIGZvbnQgbWV0cmljcyBhbmQg
dmVydGljYWwgYWx0ZXJuYXRlIGdseXBoIG1hcCwgYm90aCBvZiB3aGljaAorICAgICAgICBhcmUg
cmVxdWlyZWQgaW5mb3JtYXRpb24gdG8gcmVuZGVyIHZlcnRpY2FsIGZsb3cuCisKKyAgICAgICAg
Q3VycmVudGx5LCBXZWJLaXQgcmVsaWVzIG9uIHBsYXRvcm0gQVBJcyB0byBkbyB0aGVzZSB3b3Jr
LiBIb3dldmVyLAorICAgICAgICBzb21lIHBsYXRmb3JtcyBzdWNoIGFzIFdpbmRvd3MgbGFjayBz
dXBwb3J0IGZvciBhbGwgdGhlIGNhcGFiaWxpdGllcworICAgICAgICBXZWJLaXQgcmVxdWlyZXMg
Zm9yIHZlcnRpY2FsIGZsb3cgYW5kIHRoZSB0ZXh0LW9yaWVudGF0aW9uIHByb3BlcnR5CisgICAg
ICAgIHRvIHdvcmsgY29ycmVjdGx5LiBSZWFkaW5nIE9wZW5UeXBlIHRhYmxlcyBkaXJlY3RseSBh
bHNvIGdpdmVzCisgICAgICAgIGJlbmVmaXRzIGluIGNvbnNpc3RlbnQgYmVoYXZpb3IgYW1vbmcg
dGhlIFdlYktpdCBwbGF0Zm9ybXMuCisKKyAgICAgICAgVGhpcyBjb2RlIGlzIGN1cnJlbnRseSBp
bmNsdWRlZCBvbmx5IGluIENHV2luLCBhbmQgaXNuJ3Qgb24gYW55IGNvZGUKKyAgICAgICAgcGF0
aCBldmVuIG9uIENHV2luIHlldC4gQ2FsbGVyJ3Mgc2lkZSBjaGFuZ2UgZm9yIENHV2luIGFuZCBz
dXBwb3J0IGZvcgorICAgICAgICBvdGhlciBwbGF0ZnJvbXMgd2lsbCBiZSBpbiBzZXBhcmF0ZSBi
dWdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcmUgcmVxdWlyZWQuIE5vIGJlaGF2aW9yIGNo
YW5nZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBPcGVuVHlwZVR5cGVzLmggYW5k
IE9wZW5UeXBlVmVydGljYWxEYXRhLmgvY3BwCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2o6IEFkZCBPcGVuVHlwZVR5cGVzLmggYW5kIE9wZW5UeXBlVmVydGljYWxEYXRh
LmgvY3BwCisgICAgICAgICogZ3lwL1dlYkNvcmUuZ3lwOiBFeGNsdWRlIE9wZW5UeXBlVHlwZXMu
aCBhbmQgT3BlblR5cGVWZXJ0aWNhbERhdGEuaC9jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmg6IEFkZCBvcGVuVHlwZVRhYmxlKCkKKyAgICAgICAgKEZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3Bl
blR5cGVUYWJsZSk6IHBsYXRmb3JtIEFQSSB0byByZWFkIE9wZW5UeXBlIHRhYmxlcworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6IEFkZCBzaXplUGVyVW5pdCgp
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c2l6ZVBlclVuaXQpOiBzaXplKCkg
LyB1bml0c1BlckVtKCkgZm9yIGxlc3MgbXVsdGlwbGljYXRpb24KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVR5cGVzLmg6IFNwbGl0IGZyb20gT3BlblR5cGVV
dGlsaXRpZXMgd2l0aCBzb21lIGFkZGl0aW9ucworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpCaWdFbmRpYW5TaG9ydDo6b3BlcmF0b3Igc2hvcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlnRW5kaWFuU2hvcnQ6OkJpZ0VuZGlhblNob3J0KToKKyAgICAgICAgKEJpZ0VuZGlh
blNob3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZ0VuZGlhblVTaG9ydDo6b3BlcmF0b3IgdW5z
aWduZWQgc2hvcnQpOgorICAgICAgICAoV2ViQ29yZTo6QmlnRW5kaWFuVVNob3J0OjpCaWdFbmRp
YW5VU2hvcnQpOgorICAgICAgICAoQmlnRW5kaWFuVVNob3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZ0VuZGlhbkxvbmc6Om9wZXJhdG9yIGludCk6CisgICAgICAgIChXZWJDb3JlOjpCaWdFbmRp
YW5Mb25nOjpCaWdFbmRpYW5Mb25nKToKKyAgICAgICAgKEJpZ0VuZGlhbkxvbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6QmlnRW5kaWFuVUxvbmc6Om9wZXJhdG9yIHVuc2lnbmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZ0VuZGlhblVMb25nOjpCaWdFbmRpYW5VTG9uZyk6CisgICAgICAgIChCaWdF
bmRpYW5VTG9uZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVVdGlsaXRpZXMuY3BwOiBTcGxpdCB0byBPcGVuVHlwZVR5cGVzLmgKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oOiBTcGxpdCB0byBPcGVu
VHlwZVR5cGVzLmgKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVZlcnRpY2FsRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChP
VFB0clJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9UUHRyUmFuZ2U6Ok9UUHRyUmFuZ2UpOiBW
YWxpZGF0ZSBvZmZzZXQgdG8gcHJvdGVjdCBmcm9tIGJ1ZmZlciBvdmVycnVuIGluIGJhZCBmb250
cworICAgICAgICAoV2ViQ29yZTo6T1RQdHJSYW5nZTo6YXNzZXJ0SXNUcnVlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9UUHRyUmFuZ2U6OmlzVmFsaWRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6T1RU
YWJsZTo6cHRyKToKKyAgICAgICAgKE9UVGFibGVIaGVhKTogT3BlblR5cGUgJ2hoZWEnIHRhYmxl
CisgICAgICAgIChPVFRhYmxlVmhlYSk6IE9wZW5UeXBlICd2aGVhJyB0YWJsZQorICAgICAgICAo
RW50cnkpOgorICAgICAgICAoT1RUYWJsZVZPUkcpOiBPcGVuVHlwZSAnVk9SRycgdGFibGUKKyAg
ICAgICAgKFZlcnRPcmlnaW5ZTWV0cmljcyk6CisgICAgICAgIChPVENvdmVyYWdlVGFibGUpOiBP
cGVuVHlwZSBjb3ZlcmFnZSB0YWJsZQorICAgICAgICAoT1RDb3ZlcmFnZTFUYWJsZSk6IE9wZW5U
eXBlIGNvdmVyYWdlIHRhYmxlIGZvcm1hdCAxCisgICAgICAgIChXZWJDb3JlOjpPVENvdmVyYWdl
MVRhYmxlOjpnbHlwaEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Ok9UQ292ZXJhZ2UxVGFibGU6
OmdseXBoRW5kKToKKyAgICAgICAgKE9UQ292ZXJhZ2UyVGFibGUpOiBPcGVuVHlwZSBjb3ZlcmFn
ZSB0YWJsZSBmb3JtYXQgMgorICAgICAgICAoUmFuZ2VSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6T1RDb3ZlcmFnZTJUYWJsZTo6cmFuZ2VCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpPVENv
dmVyYWdlMlRhYmxlOjpyYW5nZUVuZCk6CisgICAgICAgIChPVFN1YnN0aXR1dGlvblN1YlRhYmxl
KTogT3BlblR5cGUgc3Vic3RpdHV0aW9uIHN1YiB0YWJsZQorICAgICAgICAoT1RTaW5nbGVTdWJz
dGl0dXRpb24yU3ViVGFibGUpOiBPcGVuVHlwZSBzdWJzdGl0dXRpb24gc3ViIHRhYmxlIGZvcm1h
dCAyCisgICAgICAgIChPVExvb2t1cFRhYmxlKTogT3BlblR5cGUgbG9va3VwIHRhYmxlCisgICAg
ICAgIChXZWJDb3JlOjpPVExvb2t1cFRhYmxlOjpnZXRTdWJzdGl0dXRpb25zKToKKyAgICAgICAg
KE9UTG9va3VwTGlzdCk6IE9wZW5UeXBlIGxvb2t1cCBsaXN0IHRhYmxlCisgICAgICAgIChXZWJD
b3JlOjpPVExvb2t1cExpc3Q6Omxvb2t1cFRhYmxlKToKKyAgICAgICAgKE9URmVhdHVyZVRhYmxl
KTogT3BlblR5cGUgZmVhdHVyZSB0YWJsZQorICAgICAgICAoV2ViQ29yZTo6T1RGZWF0dXJlVGFi
bGU6Omxvb2t1cEluZGV4QmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6T1RGZWF0dXJlVGFibGU6
Omxvb2t1cEluZGV4RW5kKToKKyAgICAgICAgKE9UTGFuZ1N5c1RhYmxlKTogT3BlblR5cGUgTGFu
Z1N5cyB0YWJsZQorICAgICAgICAoV2ViQ29yZTo6T1RMYW5nU3lzVGFibGU6OmZlYXR1cmVJbmRl
eEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Ok9UTGFuZ1N5c1RhYmxlOjpmZWF0dXJlSW5kZXhF
bmQpOgorICAgICAgICAoT1RGZWF0dXJlTGlzdCk6IE9wZW5UeXBlIGZlYXR1cmUgbGlzdCB0YWJs
ZQorICAgICAgICAoRmVhdHVyZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpPVEZlYXR1cmVM
aXN0OjpmZWF0dXJlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9URmVhdHVyZUxpc3Q6OmZl
YXR1cmVUYWJsZSk6CisgICAgICAgIChPVFNjcmlwdFRhYmxlKTogT3BlblR5cGUgc2NyaXB0IHRh
YmxlCisgICAgICAgIChMYW5nU3lzUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9UU2NyaXB0
VGFibGU6OmRlZmF1bHRMYW5nU3lzVGFibGUpOgorICAgICAgICAoT1RTY3JpcHRMaXN0KTogT3Bl
blR5cGUgc2NyaXB0IGxpc3QgdGFibGUKKyAgICAgICAgKFNjcmlwdFJlY29yZCk6CisgICAgICAg
IChXZWJDb3JlOjpPVFNjcmlwdExpc3Q6OnNjcmlwdFRhYmxlRm9yVGFnKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9UU2NyaXB0TGlzdDo6ZGVmYXVsdFNjcmlwdFRhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9UU2NyaXB0TGlzdDo6ZGVmYXVsdExhbmdTeXNUYWJsZSk6CisgICAgICAgIChPVFRhYmxl
R1NVQik6IE9wZW5UeXBlICdHU1VCJyB0YWJsZQorICAgICAgICAoV2ViQ29yZTo6T1RUYWJsZUdT
VUI6OnNjcmlwdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6T1RUYWJsZUdTVUI6OmZlYXR1cmVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9UVGFibGVHU1VCOjpsb29rdXBMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9UVGFibGVHU1VCOjpkZWZhdWx0TGFuZ1N5c1RhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9UVGFibGVHU1VCOjpmZWF0dXJlVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
T1RUYWJsZUdTVUI6OmdldEdseXBoU3Vic3RpdHV0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpP
VFRhYmxlR1NVQjo6Z2V0VmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6Ok9wZW5UeXBlVmVydGljYWxEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wZW5UeXBlVmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KTogQWR2YW5j
ZSBoZWlnaHQgZm9yIGEgZ2x5cGgKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlVmVydGljYWxE
YXRhOjpnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyk6IFZlcnRpY2FsIG9yaWdpbgor
ICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OnN1YnN0aXR1dGVXaXRoVmVy
dGljYWxHbHlwaHMpOiBWZXJ0aWNhbCBhbHRlcm5hdGUgZ2x5cGggbWFwCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE9wZW5UeXBlVmVydGljYWxEYXRhKTogQSBuZXcg
Y2xhc3MgdG8gaGFuZGxlIHZlcnRpY2FsIGZsb3cgZGF0YSBpbiBPcGVuVHlwZQorICAgICAgICAo
V2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmlzT3BlblR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6Omhhc1ZlcnRpY2FsTWV0cmljcyk6CisgICAgICAg
IChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6aGFzVk9SRyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxl
KTogSW1wbGVtZW50IG9wZW5UeXBlVGFibGUoKQorCiAyMDEyLTAzLTEyICBEYW5hIEphbnNlbnMg
IDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVXNlIHByb2plY3RR
dWFkIHRvIGFwcGx5IGludmVyc2UgbWFwUmVjdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDhkMWMzNTAu
LmYxZGE2NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM3MDUsOCArMzcwNSwxMSBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlU2FuaXRpemVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVTYW5pdGl6ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVu
VkcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMRGlzcGxh
eU9wZW5WRy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvRUdMVXRp
bHMuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IDIxNmJmZjUuLmZkNjk3YTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCkBAIC0yOTA3Miw2ICsyOTA3MiwxMCBAQAogCQkJCQkJPgogCQkJCQk8
L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXG9wZW50eXBlXE9wZW5UeXBlVHlwZXMuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJ
CQk8RmlsZQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlw
ZVxPcGVuVHlwZVV0aWxpdGllcy5jcHAiCiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KQEAgLTI5MDgw
LDYgKzI5MDg0LDE0IEBACiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5cGVWZXJ0
aWNhbERhdGEuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBlVmVydGlj
YWxEYXRhLmgiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFJlZkNvdW50ZWRHRElIYW5kbGUuaCIK
IAkJCQkJCT4KIAkJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZ3lwL1dl
YkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDYxZmIzY2Mu
LjVkYTE1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2d5cC9XZWJDb3JlLmd5cAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9neXAvV2ViQ29yZS5neXAKQEAgLTk0LDcgKzk0LDkgQEAKICAgICAg
ICAgIyBGSVhNRTogQ29uc2lkZXIgZXhjbHVkaW5nIEdMIGFzIGEgc3VmZml4LgogICAgICAgICBb
J2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VcXC5jcHAkJ10sCiAgICAg
ICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdM
XFwuY3BwJCddLAorICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVUeXBlc1xcLmgkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllc1xcLihjcHB8aCkkJ10sCisgICAgICAg
IFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2Fs
RGF0YVxcLihjcHB8aCkkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9wb3NpeC9T
aGFyZWRCdWZmZXJQT1NJWFxcLmNwcCQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3Jt
L3RleHQvSHlwaGVuYXRpb25cXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9y
bS90ZXh0L0xvY2FsaXplZE51bWJlcklDVVxcLmNwcCQnXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA5NGM2YzAxLi5h
NDFlNWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFBsYXRmb3JtRGF0YS5oCkBAIC0yNzYsNiArMjc2LDIxIEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IH0KIAorI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQorICAgIHZvaWQqIG9wZW5UeXBlVGFi
bGUodWludDMyX3QgdGFibGUsIHNpemVfdCogPSAwKSBjb25zdDsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gUGFzc093blB0cjxUPiBvcGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxlLCBzaXpl
X3QqIHNpemUgPSAwKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemVUbXA7CisgICAg
ICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgIHNpemUgPSAmc2l6ZVRtcDsKKyAgICAgICAgT3du
UHRyPFQ+IGRhdGEgPSBhZG9wdFB0cihyZWludGVycHJldF9jYXN0PFQqPihvcGVuVHlwZVRhYmxl
KHRhYmxlLCBzaXplKSkpOworICAgICAgICBpZiAoZGF0YSAmJiAqc2l6ZSA8IHNpemVvZihUKSkg
eworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwgIkJyb2tlbiBmb250IHRh
YmxlIGlnbm9yZWQsIHNpemUgJWQgPCBtaW4gJWQiLCAqc2l6ZSwgc2l6ZW9mKFQpKTsKKyAgICAg
ICAgICAgIGRhdGEuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YS5yZWxl
YXNlKCk7CisgICAgfQorI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRlc2Ny
aXB0aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuaAppbmRleCBkZDg2ZjAwNC4uZmQyZmZjYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCkBAIC0xMTgsNiAr
MTE4LDcgQEAgcHVibGljOgogCiAgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1
cm4gbV9mb250TWV0cmljczsgfQogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgp
IGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVu
aXRzUGVyRW0oKSA/IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KICAgICAKICAg
ICBmbG9hdCBtYXhDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heENoYXJXaWR0aDsgfQog
ICAgIHZvaWQgc2V0TWF4Q2hhcldpZHRoKGZsb2F0IG1heENoYXJXaWR0aCkgeyBtX21heENoYXJX
aWR0aCA9IG1heENoYXJXaWR0aDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjdiOTJhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVR5cGVzLmgKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
S29qaSBJc2hpaSA8a29qaWlzaGlAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPcGVu
VHlwZVR5cGVzX2gKKyNkZWZpbmUgT3BlblR5cGVUeXBlc19oCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RydWN0IEJpZ0VuZGlhblNob3J0IHsKKyAgICBvcGVyYXRvciBzaG9ydCgpIGNvbnN0
IHsgcmV0dXJuICh2ICYgMHgwMGZmKSA8PCA4IHwgdiA+PiA4OyB9CisgICAgQmlnRW5kaWFuU2hv
cnQoc2hvcnQgdSkgOiB2KCh1ICYgMHgwMGZmKSA8PCA4IHwgdSA+PiA4KSB7IH0KKyAgICB1bnNp
Z25lZCBzaG9ydCB2OworfTsKKworc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7CisgICAgb3BlcmF0
b3IgdW5zaWduZWQgc2hvcnQoKSBjb25zdCB7IHJldHVybiAodiAmIDB4MDBmZikgPDwgOCB8IHYg
Pj4gODsgfQorICAgIEJpZ0VuZGlhblVTaG9ydCh1bnNpZ25lZCBzaG9ydCB1KSA6IHYoKHUgJiAw
eDAwZmYpIDw8IDggfCB1ID4+IDgpIHsgfQorICAgIHVuc2lnbmVkIHNob3J0IHY7Cit9OworCitz
dHJ1Y3QgQmlnRW5kaWFuTG9uZyB7CisgICAgb3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4g
KHYgJiAweGZmKSA8PCAyNCB8ICh2ICYgMHhmZjAwKSA8PCA4IHwgKHYgJiAweGZmMDAwMCkgPj4g
OCB8IHYgPj4gMjQ7IH0KKyAgICBCaWdFbmRpYW5Mb25nKGludCB1KSA6IHYoKHUgJiAweGZmKSA8
PCAyNCB8ICh1ICYgMHhmZjAwKSA8PCA4IHwgKHUgJiAweGZmMDAwMCkgPj4gOCB8IHUgPj4gMjQp
IHsgfQorICAgIHVuc2lnbmVkIHY7Cit9OworCitzdHJ1Y3QgQmlnRW5kaWFuVUxvbmcgeworICAg
IG9wZXJhdG9yIHVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gKHYgJiAweGZmKSA8PCAyNCB8ICh2
ICYgMHhmZjAwKSA8PCA4IHwgKHYgJiAweGZmMDAwMCkgPj4gOCB8IHYgPj4gMjQ7IH0KKyAgICBC
aWdFbmRpYW5VTG9uZyh1bnNpZ25lZCB1KSA6IHYoKHUgJiAweGZmKSA8PCAyNCB8ICh1ICYgMHhm
ZjAwKSA8PCA4IHwgKHUgJiAweGZmMDAwMCkgPj4gOCB8IHUgPj4gMjQpIHsgfQorICAgIHVuc2ln
bmVkIHY7Cit9OworCit0eXBlZGVmIEJpZ0VuZGlhblNob3J0IE9USW50MTY7Cit0eXBlZGVmIEJp
Z0VuZGlhblVTaG9ydCBPVFVJbnQxNjsKK3R5cGVkZWYgQmlnRW5kaWFuTG9uZyBPVEludDMyOwor
dHlwZWRlZiBCaWdFbmRpYW5VTG9uZyBPVFVJbnQzMjsKKwordHlwZWRlZiBPVFVJbnQzMiBPVEZp
eGVkOwordHlwZWRlZiBPVFVJbnQxNiBPVE9mZnNldDsKK3R5cGVkZWYgT1RVSW50MTYgT1RHbHlw
aElEOwordHlwZWRlZiB1aW50MzJfdCBPVFRhZzsKKyNkZWZpbmUgT1RfTUFLRV9UQUcoY2gxLCBj
aDIsIGNoMywgY2g0KSAoKCgodWludDMyX3QpKGNoNCkpIDw8IDI0KSB8ICgoKHVpbnQzMl90KShj
aDMpKSA8PCAxNikgfCAoKCh1aW50MzJfdCkoY2gyKSkgPDwgOCkgfCAoKHVpbnQzMl90KShjaDEp
KSkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gT3BlblR5cGVUeXBlc19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9P
cGVuVHlwZVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKaW5kZXggNmFmZTNkOS4uMzQyZGZmYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcApAQCAtMzEsMTggKzMxLDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgQmlnRW5kaWFuVVNob3J0IHsgCi0gICAgb3BlcmF0b3Ig
dW5zaWduZWQgc2hvcnQoKSBjb25zdCB7IHJldHVybiAodiAmIDB4MDBmZikgPDwgOCB8IHYgPj4g
ODsgfQotICAgIEJpZ0VuZGlhblVTaG9ydCh1bnNpZ25lZCBzaG9ydCB1KSA6IHYoKHUgJiAweDAw
ZmYpIDw8IDggfCB1ID4+IDgpIHsgfQotICAgIHVuc2lnbmVkIHNob3J0IHY7Ci19OwotCi1zdHJ1
Y3QgQmlnRW5kaWFuVUxvbmcgeyAKLSAgICBvcGVyYXRvciB1bnNpZ25lZCgpIGNvbnN0IHsgcmV0
dXJuICh2ICYgMHhmZikgPDwgMjQgfCAodiAmIDB4ZmYwMCkgPDwgOCB8ICh2ICYgMHhmZjAwMDAp
ID4+IDggfCB2ID4+IDI0OyB9Ci0gICAgQmlnRW5kaWFuVUxvbmcodW5zaWduZWQgdSkgOiB2KCh1
ICYgMHhmZikgPDwgMjQgfCAodSAmIDB4ZmYwMCkgPDwgOCB8ICh1ICYgMHhmZjAwMDApID4+IDgg
fCB1ID4+IDI0KSB7IH0KLSAgICB1bnNpZ25lZCB2OwotfTsKLQogI3ByYWdtYSBwYWNrKDEpCiAK
IHN0cnVjdCBFT1RQcmVmaXggewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmgKaW5kZXggZjhlODc4
Ny4uMGYyNjIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oCkBAIC0yNywxMyArMjcsMTMg
QEAKICNpZm5kZWYgT3BlblR5cGVVdGlsaXRpZXNfaAogI2RlZmluZSBPcGVuVHlwZVV0aWxpdGll
c19oCiAKKyNpbmNsdWRlICJPcGVuVHlwZVR5cGVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgQmlnRW5kaWFuVVNob3J0Owogc3RydWN0IEVP
VFByZWZpeDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNh
bERhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTcyM2QKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlw
ZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAKQEAgLTAsMCArMSw1ODAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEtvamkgSXNoaWkgPGtvamlpc2hp
QGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJP
cGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgorI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworZW51bSB7CisgICAgT1RUYWJsZVRhZ0dTVUIgPSBPVF9NQUtFX1RBRygnRycsICdT
JywgJ1UnLCAnQicpLAorICAgIE9UVGFibGVUYWdIaGVhID0gT1RfTUFLRV9UQUcoJ2gnLCAnaCcs
ICdlJywgJ2EnKSwKKyAgICBPVFRhYmxlVGFnSG10eCA9IE9UX01BS0VfVEFHKCdoJywgJ20nLCAn
dCcsICd4JyksCisgICAgT1RUYWJsZVRhZ1ZoZWEgPSBPVF9NQUtFX1RBRygndicsICdoJywgJ2Un
LCAnYScpLAorICAgIE9UVGFibGVUYWdWbXR4ID0gT1RfTUFLRV9UQUcoJ3YnLCAnbScsICd0Jywg
J3gnKSwKKyAgICBPVFRhYmxlVGFnVk9SRyA9IE9UX01BS0VfVEFHKCdWJywgJ08nLCAnUicsICdH
JyksCit9OworCitlbnVtIHsKKyAgICBPVFNjcmlwdFRhZ0RlZmF1bHQgPSBPVF9NQUtFX1RBRygn
RCcsICdGJywgJ0wnLCAnVCcpLAorfTsKKworZW51bSB7CisgICAgT1RGZWF0dXJlVGFnVmVydCA9
IE9UX01BS0VfVEFHKCd2JywgJ2UnLCAncicsICd0JyksCit9OworCitjbGFzcyBPVFB0clJhbmdl
IHsKK3B1YmxpYzoKKyAgICBPVFB0clJhbmdlKGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUp
CisgICAgICAgIDogbV9wdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocHRyKSkK
KyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
YXNzZXJ0SXNUcnVlKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKHZhbHVlLCAiSW52YWxpZCBPcGVuVHlwZSBkYXRhIGRldGVjdGVkIik7CisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBib29sIGlzVmFsaWRFbmQoY29uc3Qgdm9pZCogcCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihwKSAtIG1fcHRyOworICAgICAgICByZXR1cm4gYXNzZXJ0SXNUcnVlKG9m
ZnNldCA8PSBtX3NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCB1aW50OF90KiBt
X3B0cjsKKyAgICBzaXplX3QgbV9zaXplOworfTsKKworI3ByYWdtYSBwYWNrKDEpCisKK3N0cnVj
dCBPVFRhYmxlIHsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY29uc3QgVCogcHRyKHVpbnQx
Nl90IG9mZnNldCwgY29uc3QgT1RQdHJSYW5nZSogdmFsaWRhdG9yKSBjb25zdAorICAgIHsKKyAg
ICAgICAgY29uc3QgVCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBpbnQ4X3QqPih0aGlzKSArIG9mZnNldCk7CisgICAgICAgIGlmICh2YWxp
ZGF0b3IgJiYgIXZhbGlkYXRvci0+aXNWYWxpZEVuZChwdHIgKyAxKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KK307CisKK3N0cnVjdCBPVFRhYmxl
SGhlYSB7CisgICAgT1RGaXhlZCB2ZXJzaW9uOworICAgIE9USW50MTYgYXNjZW5kZXI7CisgICAg
T1RJbnQxNiBkZXNjZW5kZXI7CisgICAgT1RJbnQxNiBsaW5lR2FwOworICAgIE9USW50MTYgYWR2
YW5jZVdpZHRoTWF4OworICAgIE9USW50MTYgbWluTGVmdFNpZGVCZWFyaW5nOworICAgIE9USW50
MTYgbWluUmlnaHRTaWRlQmVhcmluZzsKKyAgICBPVEludDE2IHhNYXhFeHRlbnQ7CisgICAgT1RJ
bnQxNiBjYXJldFNsb3BlUmlzZTsKKyAgICBPVEludDE2IGNhcmV0U2xvcGVSdW47CisgICAgT1RJ
bnQxNiBjYXJldE9mZnNldDsKKyAgICBPVEludDE2IHJlc2VydmVkWzRdOworICAgIE9USW50MTYg
bWV0cmljRGF0YUZvcm1hdDsKKyAgICBPVFVJbnQxNiBudW1iZXJPZkhNZXRyaWNzOworfTsKKwor
c3RydWN0IE9UVGFibGVWaGVhIHsKKyAgICBPVEZpeGVkIHZlcnNpb247CisgICAgT1RJbnQxNiBh
c2NlbnQ7CisgICAgT1RJbnQxNiBkZXNjZW50OworICAgIE9USW50MTYgbGluZUdhcDsKKyAgICBP
VEludDE2IGFkdmFuY2VIZWlnaHRNYXg7CisgICAgT1RJbnQxNiBtaW5Ub3BTaWRlQmVhcmluZzsK
KyAgICBPVEludDE2IG1pbkJvdHRvbVNpZGVCZWFyaW5nOworICAgIE9USW50MTYgeU1heEV4dGVu
dDsKKyAgICBPVEludDE2IGNhcmV0U2xvcGVSaXNlOworICAgIE9USW50MTYgY2FyZXRTbG9wZVJ1
bjsKKyAgICBPVEludDE2IGNhcmV0T2Zmc2V0OworICAgIE9USW50MTYgcmVzZXJ2ZWRbNF07Cisg
ICAgT1RJbnQxNiBtZXRyaWNEYXRhRm9ybWF0OworICAgIE9UVUludDE2IG51bU9mTG9uZ1Zlck1l
dHJpY3M7Cit9OworCitzdHJ1Y3QgT1RUYWJsZUhtdHggeworICAgIHN0cnVjdCBFbnRyeSB7Cisg
ICAgICAgIE9UVUludDE2IGFkdmFuY2VXaWR0aDsKKyAgICAgICAgT1RJbnQxNiBsc2I7CisgICAg
fSBlbnRyaWVzWzFdOworfTsKKworc3RydWN0IE9UVGFibGVWbXR4IHsKKyAgICBzdHJ1Y3QgRW50
cnkgeworICAgICAgICBPVFVJbnQxNiBhZHZhbmNlSGVpZ2h0OworICAgICAgICBPVEludDE2IHRv
cFNpZGVCZWFyaW5nOworICAgIH0gZW50cmllc1sxXTsKK307CisKK3N0cnVjdCBPVFRhYmxlVk9S
RyB7CisgICAgT1RVSW50MTYgbWFqb3JWZXJzaW9uOworICAgIE9UVUludDE2IG1pbm9yVmVyc2lv
bjsKKyAgICBPVEludDE2IGRlZmF1bHRWZXJ0T3JpZ2luWTsKKyAgICBPVFVJbnQxNiBudW1WZXJ0
T3JpZ2luWU1ldHJpY3M7CisgICAgc3RydWN0IFZlcnRPcmlnaW5ZTWV0cmljcyB7CisgICAgICAg
IE9UVUludDE2IGdseXBoSW5kZXg7CisgICAgICAgIE9USW50MTYgdmVydE9yaWdpblk7CisgICAg
fSB2ZXJ0T3JpZ2luWU1ldHJpY3NbMV07Cit9OworCitzdHJ1Y3QgT1RDb3ZlcmFnZVRhYmxlIDog
T1RUYWJsZSB7CisgICAgT1RVSW50MTYgY292ZXJhZ2VGb3JtYXQ7Cit9OworCitzdHJ1Y3QgT1RD
b3ZlcmFnZTFUYWJsZSA6IE9UQ292ZXJhZ2VUYWJsZSB7CisgICAgT1RVSW50MTYgZ2x5cGhDb3Vu
dDsKKyAgICBPVEdseXBoSUQgZ2x5cGhBcnJheVsxXTsKKworICAgIGNvbnN0IE9UR2x5cGhJRCog
Z2x5cGhCZWdpbigpIGNvbnN0IHsgcmV0dXJuICZnbHlwaEFycmF5WzBdOyB9CisgICAgY29uc3Qg
T1RHbHlwaElEKiBnbHlwaEVuZCgpIGNvbnN0IHsgcmV0dXJuICZnbHlwaEFycmF5W2dseXBoQ291
bnRdOyB9Cit9OworCitzdHJ1Y3QgT1RDb3ZlcmFnZTJUYWJsZSA6IE9UQ292ZXJhZ2VUYWJsZSB7
CisgICAgT1RVSW50MTYgcmFuZ2VDb3VudDsKKyAgICBzdHJ1Y3QgUmFuZ2VSZWNvcmQgeworICAg
ICAgICBPVEdseXBoSUQgc3RhcnQ7CisgICAgICAgIE9UR2x5cGhJRCBlbmQ7CisgICAgICAgIE9U
VUludDE2IHN0YXJ0Q292ZXJhZ2VJbmRleDsKKyAgICB9IHJhbmdlc1sxXTsKKworICAgIGNvbnN0
IFJhbmdlUmVjb3JkKiByYW5nZUJlZ2luKCkgY29uc3QgeyByZXR1cm4gJnJhbmdlc1swXTsgfQor
ICAgIGNvbnN0IFJhbmdlUmVjb3JkKiByYW5nZUVuZCgpIGNvbnN0IHsgcmV0dXJuICZyYW5nZXNb
cmFuZ2VDb3VudF07IH0KK307CisKK3N0cnVjdCBPVFN1YnN0aXR1dGlvblN1YlRhYmxlIDogT1RU
YWJsZSB7CisgICAgT1RVSW50MTYgc3Vic3RGb3JtYXQ7CisgICAgT1RPZmZzZXQgY292ZXJhZ2VP
ZmZzZXQ7Cit9OworCitzdHJ1Y3QgT1RTaW5nbGVTdWJzdGl0dXRpb24yU3ViVGFibGUgOiBPVFN1
YnN0aXR1dGlvblN1YlRhYmxlIHsKKyAgICBPVFVJbnQxNiBnbHlwaENvdW50OworICAgIE9UR2x5
cGhJRCBzdWJzdGl0dXRlWzFdOworfTsKKworc3RydWN0IE9UTG9va3VwVGFibGUgOiBPVFRhYmxl
IHsKKyAgICBPVFVJbnQxNiBsb29rdXBUeXBlOworICAgIE9UVUludDE2IGxvb2t1cEZsYWc7Cisg
ICAgT1RVSW50MTYgc3ViVGFibGVDb3VudDsKKyAgICBPVE9mZnNldCBzdWJUYWJsZU9mZnNldHNb
MV07CisgICAgLy8gT1RVSW50MTYgbWFya0ZpbHRlcmluZ1NldDsgdGhpcyBmaWVsZCBjb21lcyBh
ZnRlciB2YXJpYWJsZSBsZW5ndGgsIHNvIG9mZnNldCBpcyBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5
LgorCisgICAgYm9vbCBnZXRTdWJzdGl0dXRpb25zKEhhc2hNYXA8R2x5cGgsIEdseXBoPiogbWFw
LCBjb25zdCBPVFB0clJhbmdlKiB2YWxpZGF0b3IpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0
Y2ggKGxvb2t1cFR5cGUpIHsKKyAgICAgICAgY2FzZSAxOiAvLyBTaW5nbGUgU3Vic3RpdHV0aW9u
IFN1YnRhYmxlCisgICAgICAgICAgICBmb3IgKGludCBpID0gMCwgYyA9IHN1YlRhYmxlQ291bnQ7
IGkgPCBjOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBPVFN1YnN0aXR1dGlvblN1YlRh
YmxlKiBzdWIgPSBwdHI8T1RTdWJzdGl0dXRpb25TdWJUYWJsZT4oc3ViVGFibGVPZmZzZXRzW2ld
LCB2YWxpZGF0b3IpOworICAgICAgICAgICAgICAgIGlmICghc3ViKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgT1RVSW50MTYqIGNvdmVy
YWdlID0gc3ViLT5wdHI8T1RVSW50MTY+KHN1Yi0+Y292ZXJhZ2VPZmZzZXQsIHZhbGlkYXRvcik7
CisgICAgICAgICAgICAgICAgaWYgKCFjb3ZlcmFnZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3ViLT5zdWJzdEZvcm1hdCkgewor
ICAgICAgICAgICAgICAgIGNhc2UgMjogeyAvLyBTaW5nbGUgU3Vic3RpdHV0aW9uIEZvcm1hdCAy
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9UU2luZ2xlU3Vic3RpdHV0aW9uMlN1YlRhYmxl
KiBzMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT1RTaW5nbGVTdWJzdGl0dXRpb24yU3ViVGFi
bGUqPihzdWIpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yICYmICF2YWxpZGF0
b3ItPmlzVmFsaWRFbmQoczIgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgT1RHbHlwaElEKiB0byA9ICZzMi0+c3Vi
c3RpdHV0ZVswXTsKKyAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgY291bnRUbyA9IHMyLT5n
bHlwaENvdW50OworICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yICYmICF2YWxpZGF0
b3ItPmlzVmFsaWRFbmQodG8gKyBjb3VudFRvKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgqY292ZXJhZ2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAxOiB7IC8vIENvdmVyYWdlIEZvcm1hdCAxIChlLmcuLCBN
UyBHb3RoaWMpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPVENvdmVyYWdlMVRhYmxl
KiBjMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT1RDb3ZlcmFnZTFUYWJsZSo+KGNvdmVyYWdl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsaWRhdG9yICYmICF2YWxpZGF0b3It
PmlzVmFsaWRFbmQoYzEgKyAxKSkgfHwgIU9UUHRyUmFuZ2U6OmFzc2VydElzVHJ1ZShjb3VudFRv
ID09IGMxLT5nbHlwaENvdW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPVEdseXBoSUQqIGZyb21FbmQg
PSBjMS0+Z2x5cGhFbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3Ig
JiYgIXZhbGlkYXRvci0+aXNWYWxpZEVuZChmcm9tRW5kKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0
IE9UR2x5cGhJRCogZnJvbSA9IGMxLT5nbHlwaEJlZ2luKCk7IGZyb20gIT0gZnJvbUVuZDsgKytm
cm9tLCArK3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC0+c2V0KCpmcm9tLCAq
dG8pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IH0KKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiB7IC8vIENvdmVyYWdlIEZvcm1hdCAyIChlLmcuLCBLb3p1a2EgR290aGljKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT1RDb3ZlcmFnZTJUYWJsZSogYzIgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IE9UQ292ZXJhZ2UyVGFibGUqPihjb3ZlcmFnZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yICYmICF2YWxpZGF0b3ItPmlzVmFsaWRFbmQo
YzIgKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBPVENvdmVyYWdlMlRhYmxlOjpSYW5nZVJlY29yZCog
cmFuZ2VFbmQgPSBjMi0+cmFuZ2VFbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
YWxpZGF0b3IgJiYgIXZhbGlkYXRvci0+aXNWYWxpZEVuZChyYW5nZUVuZCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBPVENvdmVyYWdlMlRhYmxlOjpSYW5nZVJlY29yZCogcmFuZ2UgPSBjMi0+cmFu
Z2VCZWdpbigpOyByYW5nZSAhPSByYW5nZUVuZDsgKytyYW5nZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQxNl90IGZyb20gPSByYW5nZS0+c3RhcnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDE2X3QgZnJvbUVuZCA9IHJhbmdlLT5lbmQgKyAxOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGNvdW50RnJvbSA9IGZyb21FbmQgLSBmcm9t
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT1RQdHJSYW5nZTo6YXNzZXJ0SXNU
cnVlKGNvdW50RnJvbSA8PSBjb3VudFRvKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50VG8gLT0g
Y291bnRGcm9tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBmcm9tICE9IGZy
b21FbmQ7ICsrZnJvbSwgKyt0bykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFw
LT5zZXQoZnJvbSwgKnRvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghT1RQdHJSYW5nZTo6YXNzZXJ0SXNUcnVlKCFjb3VudFRvKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsgfQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3ZlcmFnZUZvcm1hdCAlZCBub3Qgc3VwcG9ydGVk
IiwgKmNvdmVyYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyB9CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJTdWJzdEZvcm1hdCAl
ZCBub3Qgc3VwcG9ydGVkIiwgc3ViLT5zdWJzdEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HX0VSUk9SKCJMb29rdXBUeXBl
ICVkIG5vdCBzdXBwb3J0ZWQiLCBsb29rdXBUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3N0cnVjdCBPVExvb2t1
cExpc3QgOiBPVFRhYmxlIHsKKyAgICBPVFVJbnQxNiBsb29rdXBDb3VudDsKKyAgICBPVE9mZnNl
dCBsb29rdXBPZmZzZXRzWzFdOworCisgICAgY29uc3QgT1RMb29rdXBUYWJsZSogbG9va3VwVGFi
bGUodWludDE2X3QgaW5kZXgsIGNvbnN0IE9UUHRyUmFuZ2UqIHZhbGlkYXRvcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHVpbnQxNl90IGNvdW50ID0gbG9va3VwQ291bnQ7CisgICAgICAgIGlmICgh
T1RQdHJSYW5nZTo6YXNzZXJ0SXNUcnVlKGluZGV4IDwgY291bnQpIHx8ICh2YWxpZGF0b3IgJiYg
IXZhbGlkYXRvci0+aXNWYWxpZEVuZCgmbG9va3VwT2Zmc2V0c1tjb3VudF0pKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcHRyPE9UTG9va3VwVGFibGU+KGxvb2t1cE9m
ZnNldHNbaW5kZXhdLCB2YWxpZGF0b3IpOworICAgIH0KK307CisKK3N0cnVjdCBPVEZlYXR1cmVU
YWJsZSB7CisgICAgT1RPZmZzZXQgZmVhdHVyZVBhcmFtczsKKyAgICBPVFVJbnQxNiBsb29rdXBD
b3VudDsKKyAgICBPVFVJbnQxNiBsb29rdXBMaXN0SW5kZXhbMV07CisKKyAgICBjb25zdCBPVFVJ
bnQxNiogbG9va3VwSW5kZXhCZWdpbigpIGNvbnN0IHsgcmV0dXJuICZsb29rdXBMaXN0SW5kZXhb
MF07IH0KKyAgICBjb25zdCBPVFVJbnQxNiogbG9va3VwSW5kZXhFbmQoKSBjb25zdCB7IHJldHVy
biAmbG9va3VwTGlzdEluZGV4W2xvb2t1cENvdW50XTsgfQorfTsKKworc3RydWN0IE9UTGFuZ1N5
c1RhYmxlIHsKKyAgICBPVE9mZnNldCBsb29rdXBPcmRlcjsKKyAgICBPVFVJbnQxNiByZXFGZWF0
dXJlSW5kZXg7CisgICAgT1RVSW50MTYgZmVhdHVyZUNvdW50OworICAgIE9UVUludDE2IGZlYXR1
cmVJbmRleFsxXTsKKworICAgIGNvbnN0IE9UVUludDE2KiBmZWF0dXJlSW5kZXhCZWdpbigpIGNv
bnN0IHsgcmV0dXJuICZmZWF0dXJlSW5kZXhbMF07IH0KKyAgICBjb25zdCBPVFVJbnQxNiogZmVh
dHVyZUluZGV4RW5kKCkgY29uc3QgeyByZXR1cm4gJmZlYXR1cmVJbmRleFtmZWF0dXJlQ291bnRd
OyB9Cit9OworCitzdHJ1Y3QgT1RGZWF0dXJlTGlzdCA6IE9UVGFibGUgeworICAgIE9UVUludDE2
IGZlYXR1cmVDb3VudDsKKyAgICBzdHJ1Y3QgRmVhdHVyZVJlY29yZCB7CisgICAgICAgIE9UVGFn
IGZlYXR1cmVUYWc7CisgICAgICAgIE9UT2Zmc2V0IGZlYXR1cmVPZmZzZXQ7CisgICAgfSBmZWF0
dXJlc1sxXTsKKworICAgIGNvbnN0IE9URmVhdHVyZUxpc3Q6OkZlYXR1cmVSZWNvcmQqIGZlYXR1
cmVSZWNvcmQodWludDE2X3QgaW5kZXgsIGNvbnN0IE9UUHRyUmFuZ2UqIHZhbGlkYXRvcikgY29u
c3QKKyAgICB7CisgICAgICAgIHVpbnQxNl90IGNvdW50ID0gZmVhdHVyZUNvdW50OworICAgICAg
ICBpZiAoIU9UUHRyUmFuZ2U6OmFzc2VydElzVHJ1ZShpbmRleCA8IGNvdW50KSB8fCAodmFsaWRh
dG9yICYmICF2YWxpZGF0b3ItPmlzVmFsaWRFbmQoJmZlYXR1cmVzW2NvdW50XSkpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmKGZlYXR1cmVzW2luZGV4XSk7CisgICAg
fQorCisgICAgY29uc3QgT1RGZWF0dXJlVGFibGUqIGZlYXR1cmVUYWJsZShPVFRhZyBmZWF0dXJl
VGFnLCBjb25zdCBPVExhbmdTeXNUYWJsZSogbGFuZ1N5c1RhYmxlLCBjb25zdCBPVFB0clJhbmdl
KiB2YWxpZGF0b3IpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBPVFVJbnQxNiogZW5kID0g
bGFuZ1N5c1RhYmxlLT5mZWF0dXJlSW5kZXhFbmQoKTsKKyAgICAgICAgaWYgKHZhbGlkYXRvciAm
JiAhdmFsaWRhdG9yLT5pc1ZhbGlkRW5kKGVuZCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgZm9yIChjb25zdCBPVFVJbnQxNiogaW5kZXggPSBsYW5nU3lzVGFibGUtPmZlYXR1cmVJ
bmRleEJlZ2luKCk7IGluZGV4ICE9IGVuZDsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3Qg
T1RGZWF0dXJlTGlzdDo6RmVhdHVyZVJlY29yZCogZnIgPSBmZWF0dXJlUmVjb3JkKCppbmRleCwg
dmFsaWRhdG9yKTsKKyAgICAgICAgICAgIGlmIChmciAmJiBmci0+ZmVhdHVyZVRhZyA9PSBmZWF0
dXJlVGFnKQorICAgICAgICAgICAgICAgIHJldHVybiBwdHI8T1RGZWF0dXJlVGFibGU+KGZyLT5m
ZWF0dXJlT2Zmc2V0LCB2YWxpZGF0b3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK307CisKK3N0cnVjdCBPVFNjcmlwdFRhYmxlIDogT1RUYWJsZSB7CisgICAgT1RPZmZz
ZXQgZGVmYXVsdExhbmdTeXNPZmZzZXQ7CisgICAgT1RVSW50MTYgbGFuZ1N5c0NvdW50OworICAg
IHN0cnVjdCBMYW5nU3lzUmVjb3JkIHsKKyAgICAgICAgT1RUYWcgbGFuZ1N5c1RhZzsKKyAgICAg
ICAgT1RPZmZzZXQgbGFuZ1N5c09mZnNldDsKKyAgICB9IGxhbmdTeXNSZWNvcmRzWzFdOworCisg
ICAgY29uc3QgT1RMYW5nU3lzVGFibGUqIGRlZmF1bHRMYW5nU3lzVGFibGUoY29uc3QgT1RQdHJS
YW5nZSogdmFsaWRhdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgdWludDE2X3Qgb2Zmc2V0ID0g
ZGVmYXVsdExhbmdTeXNPZmZzZXQ7CisgICAgICAgIGlmIChvZmZzZXQpCisgICAgICAgICAgICBy
ZXR1cm4gcHRyPE9UTGFuZ1N5c1RhYmxlPihvZmZzZXQsIHZhbGlkYXRvcik7CisgICAgICAgIGlm
IChPVFB0clJhbmdlOjphc3NlcnRJc1RydWUobGFuZ1N5c0NvdW50KSkKKyAgICAgICAgICAgIHJl
dHVybiBwdHI8T1RMYW5nU3lzVGFibGU+KGxhbmdTeXNSZWNvcmRzWzBdLmxhbmdTeXNPZmZzZXQs
IHZhbGlkYXRvcik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK307CisKK3N0cnVjdCBPVFNj
cmlwdExpc3QgOiBPVFRhYmxlIHsKKyAgICBPVFVJbnQxNiBzY3JpcHRDb3VudDsKKyAgICBzdHJ1
Y3QgU2NyaXB0UmVjb3JkIHsKKyAgICAgICAgT1RUYWcgc2NyaXB0VGFnOworICAgICAgICBPVE9m
ZnNldCBzY3JpcHRPZmZzZXQ7CisgICAgfSBzY3JpcHRzWzFdOworCisgICAgY29uc3QgT1RTY3Jp
cHRUYWJsZSogc2NyaXB0VGFibGVGb3JUYWcoT1RUYWcgdGFnLCBjb25zdCBPVFB0clJhbmdlKiB2
YWxpZGF0b3IpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBTY3JpcHRSZWNvcmQqIGVuZCA9
ICYoc2NyaXB0c1tzY3JpcHRDb3VudF0pOworICAgICAgICBpZiAodmFsaWRhdG9yICYmICF2YWxp
ZGF0b3ItPmlzVmFsaWRFbmQoZW5kKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBm
b3IgKGNvbnN0IFNjcmlwdFJlY29yZCogc3IgPSBzY3JpcHRzOyBzciAhPSBlbmQ7ICsrc3IpCisg
ICAgICAgICAgICBpZiAoc3ItPnNjcmlwdFRhZyA9PSB0YWcpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHB0cjxPVFNjcmlwdFRhYmxlPihzci0+c2NyaXB0T2Zmc2V0LCB2YWxpZGF0b3IpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjb25zdCBPVFNjcmlwdFRhYmxlKiBkZWZhdWx0
U2NyaXB0VGFibGUoY29uc3QgT1RQdHJSYW5nZSogdmFsaWRhdG9yKSBjb25zdAorICAgIHsKKyAg
ICAgICAgY29uc3QgT1RTY3JpcHRUYWJsZSogdCA9IHNjcmlwdFRhYmxlRm9yVGFnKE9UU2NyaXB0
VGFnRGVmYXVsdCwgdmFsaWRhdG9yKTsKKyAgICAgICAgaWYgKCF0ICYmIHNjcmlwdENvdW50KQor
ICAgICAgICAgICAgdCA9IHB0cjxPVFNjcmlwdFRhYmxlPihzY3JpcHRzWzBdLnNjcmlwdE9mZnNl
dCwgdmFsaWRhdG9yKTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorCisgICAgY29uc3QgT1RM
YW5nU3lzVGFibGUqIGRlZmF1bHRMYW5nU3lzVGFibGUoY29uc3QgT1RQdHJSYW5nZSogdmFsaWRh
dG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgT1RTY3JpcHRUYWJsZSogc2NyaXB0VGFi
bGUgPSBkZWZhdWx0U2NyaXB0VGFibGUodmFsaWRhdG9yKTsKKyAgICAgICAgaWYgKCFzY3JpcHRU
YWJsZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc2NyaXB0VGFibGUt
PmRlZmF1bHRMYW5nU3lzVGFibGUodmFsaWRhdG9yKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgT1RU
YWJsZUdTVUIgOiBPVFRhYmxlIHsKKyAgICBPVEZpeGVkIHZlcnNpb247CisgICAgT1RPZmZzZXQg
c2NyaXB0TGlzdE9mZnNldDsKKyAgICBPVE9mZnNldCBmZWF0dXJlTGlzdE9mZnNldDsKKyAgICBP
VE9mZnNldCBsb29rdXBMaXN0T2Zmc2V0OworCisgICAgY29uc3QgT1RTY3JpcHRMaXN0KiBzY3Jp
cHRMaXN0KGNvbnN0IE9UUHRyUmFuZ2UqIHZhbGlkYXRvcikgY29uc3QgeyByZXR1cm4gcHRyPE9U
U2NyaXB0TGlzdD4oc2NyaXB0TGlzdE9mZnNldCwgdmFsaWRhdG9yKTsgfQorICAgIGNvbnN0IE9U
RmVhdHVyZUxpc3QqIGZlYXR1cmVMaXN0KGNvbnN0IE9UUHRyUmFuZ2UqIHZhbGlkYXRvcikgY29u
c3QgeyByZXR1cm4gcHRyPE9URmVhdHVyZUxpc3Q+KGZlYXR1cmVMaXN0T2Zmc2V0LCB2YWxpZGF0
b3IpOyB9CisgICAgY29uc3QgT1RMb29rdXBMaXN0KiBsb29rdXBMaXN0KGNvbnN0IE9UUHRyUmFu
Z2UqIHZhbGlkYXRvcikgY29uc3QgeyByZXR1cm4gcHRyPE9UTG9va3VwTGlzdD4obG9va3VwTGlz
dE9mZnNldCwgdmFsaWRhdG9yKTsgfQorICAgIGNvbnN0IE9UTGFuZ1N5c1RhYmxlKiBkZWZhdWx0
TGFuZ1N5c1RhYmxlKGNvbnN0IE9UUHRyUmFuZ2UqIHZhbGlkYXRvcikgY29uc3QgeyByZXR1cm4g
c2NyaXB0TGlzdCh2YWxpZGF0b3IpLT5kZWZhdWx0TGFuZ1N5c1RhYmxlKHZhbGlkYXRvcik7IH0K
KworICAgIGNvbnN0IE9URmVhdHVyZVRhYmxlKiBmZWF0dXJlVGFibGUoT1RUYWcgZmVhdHVyZVRh
ZywgY29uc3QgT1RQdHJSYW5nZSogdmFsaWRhdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgY29u
c3QgT1RMYW5nU3lzVGFibGUqIGxhbmdTeXNUYWJsZSA9IGRlZmF1bHRMYW5nU3lzVGFibGUodmFs
aWRhdG9yKTsKKyAgICAgICAgaWYgKCFsYW5nU3lzVGFibGUpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgY29uc3QgT1RGZWF0dXJlTGlzdCogZmVhdHVyZXMgPSBmZWF0dXJlTGlzdCh2
YWxpZGF0b3IpOworICAgICAgICBpZiAoIWZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBmZWF0dXJlcy0+ZmVhdHVyZVRhYmxlKGZlYXR1cmVUYWcsIGxhbmdT
eXNUYWJsZSwgdmFsaWRhdG9yKTsKKyAgICB9CisKKyAgICBib29sIGdldEdseXBoU3Vic3RpdHV0
aW9ucyhjb25zdCBPVEZlYXR1cmVUYWJsZSogZmVhdHVyZSwgSGFzaE1hcDxHbHlwaCwgR2x5cGg+
KiBtYXAsIGNvbnN0IE9UUHRyUmFuZ2UqIHZhbGlkYXRvcikgY29uc3QKKyAgICB7CisgICAgICAg
IGNvbnN0IE9UTG9va3VwTGlzdCogbG9va3VwcyA9IGxvb2t1cExpc3QodmFsaWRhdG9yKTsKKyAg
ICAgICAgaWYgKCFsb29rdXBzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBj
b25zdCBPVFVJbnQxNiogZW5kID0gZmVhdHVyZS0+bG9va3VwSW5kZXhFbmQoKTsKKyAgICAgICAg
aWYgKHZhbGlkYXRvciAmJiAhdmFsaWRhdG9yLT5pc1ZhbGlkRW5kKGVuZCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgT1RVSW50MTYqIGluZGV4ID0gZmVh
dHVyZS0+bG9va3VwSW5kZXhCZWdpbigpOyBpbmRleCAhPSBlbmQ7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IE9UTG9va3VwVGFibGUqIGxvb2t1cCA9IGxvb2t1cHMtPmxvb2t1cFRhYmxl
KCppbmRleCwgdmFsaWRhdG9yKTsKKyAgICAgICAgICAgIGlmICghbG9va3VwIHx8ICFsb29rdXAt
PmdldFN1YnN0aXR1dGlvbnMobWFwLCB2YWxpZGF0b3IpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBi
b29sIGdldFZlcnRpY2FsR2x5cGhTdWJzdGl0dXRpb25zKEhhc2hNYXA8R2x5cGgsIEdseXBoPiog
bWFwLCBjb25zdCBPVFB0clJhbmdlKiB2YWxpZGF0b3IpIGNvbnN0CisgICAgeworICAgICAgICBj
b25zdCBPVEZlYXR1cmVUYWJsZSogZmVhdHVyZSA9IGZlYXR1cmVUYWJsZShPVEZlYXR1cmVUYWdW
ZXJ0LCB2YWxpZGF0b3IpOworICAgICAgICByZXR1cm4gZmVhdHVyZSAmJiBnZXRHbHlwaFN1YnN0
aXR1dGlvbnMoZmVhdHVyZSwgbWFwLCB2YWxpZGF0b3IpOworICAgIH0KK307CisKKyNwcmFnbWEg
cGFjaygpCisKK09wZW5UeXBlVmVydGljYWxEYXRhOjpPcGVuVHlwZVZlcnRpY2FsRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCisgICAgOiBtX2RlZmF1bHRWZXJ0T3Jp
Z2luWSgwKQoreworICAgIC8vIExvYWQgaGhlYSBhbmQgaG10eCB0byBnZXQgeC1jb21wb25lbnQg
b2YgdmVydGljYWwgb3JpZ2lucy4KKyAgICAvLyBJZiB0aGVzZSB0YWJsZXMgYXJlIG1pc3Npbmcs
IGl0J3MgYW4gaW52YWxpZCBPcGVuVHlwZSBmb250LgorICAgIE93blB0cjxPVFRhYmxlSGhlYT4g
aGhlYShwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZTxPVFRhYmxlSGhlYT4oT1RUYWJsZVRhZ0ho
ZWEpKTsKKyAgICBpZiAoIWhoZWEpCisgICAgICAgIHJldHVybjsKKyAgICB1aW50MTZfdCBjSG10
eEVudHJpZXMgPSBoaGVhLT5udW1iZXJPZkhNZXRyaWNzOworICAgIGlmICghY0htdHhFbnRyaWVz
KQorICAgICAgICByZXR1cm47CisgICAgaGhlYS5jbGVhcigpOworCisgICAgT3duUHRyPE9UVGFi
bGVIbXR4PiBobXR4KHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlPE9UVGFibGVIbXR4PihPVFRh
YmxlVGFnSG10eCkpOworICAgIGlmICghaG10eCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYWR2
YW5jZVdpZHRocy5yZXNpemUoY0htdHhFbnRyaWVzKTsKKyAgICBmb3IgKHVpbnQxNl90IGkgPSAw
OyBpIDwgY0htdHhFbnRyaWVzOyArK2kpCisgICAgICAgIG1fYWR2YW5jZVdpZHRoc1tpXSA9IGht
dHgtPmVudHJpZXNbaV0uYWR2YW5jZVdpZHRoOworICAgIGhtdHguY2xlYXIoKTsKKworICAgIE93
blB0cjxPVFRhYmxlVmhlYT4gdmhlYShwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZTxPVFRhYmxl
VmhlYT4oT1RUYWJsZVRhZ1ZoZWEpKTsKKyAgICBpZiAodmhlYSkgeworICAgICAgICB1aW50MTZf
dCBjVm10eEVudHJpZXMgPSB2aGVhLT5udW1PZkxvbmdWZXJNZXRyaWNzOworICAgICAgICB2aGVh
LmNsZWFyKCk7CisKKyAgICAgICAgLy8gTG9hZCBWT1JHLiBUaGlzIHRhYmxlIGlzIG9wdGlvbmFs
LgorICAgICAgICBPd25QdHI8T1RUYWJsZVZPUkc+IHZvcmcocGxhdGZvcm1EYXRhLm9wZW5UeXBl
VGFibGU8T1RUYWJsZVZPUkc+KE9UVGFibGVUYWdWT1JHKSk7CisgICAgICAgIGlmICh2b3JnKSB7
CisgICAgICAgICAgICBtX2RlZmF1bHRWZXJ0T3JpZ2luWSA9IHZvcmctPmRlZmF1bHRWZXJ0T3Jp
Z2luWTsKKyAgICAgICAgICAgIHVpbnQxNl90IGNWZXJ0T3JpZ2luWU1ldHJpY3MgPSB2b3JnLT5u
dW1WZXJ0T3JpZ2luWU1ldHJpY3M7CisgICAgICAgICAgICBpZiAoIWNWZXJ0T3JpZ2luWU1ldHJp
Y3MpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGQgb25lIGVudHJ5IHNvIHRoYXQgIW1fdmVydE9y
aWdpblkuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgbV92ZXJ0T3JpZ2luWS5zZXQoMCwgbV9k
ZWZhdWx0VmVydE9yaWdpblkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgY1ZlcnRPcmlnaW5ZTWV0cmljczsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE9UVGFibGVWT1JHOjpWZXJ0T3JpZ2luWU1ldHJpY3Mm
IG1ldHJpY3MgPSB2b3JnLT52ZXJ0T3JpZ2luWU1ldHJpY3NbaV07CisgICAgICAgICAgICAgICAg
ICAgIG1fdmVydE9yaWdpblkuc2V0KG1ldHJpY3MuZ2x5cGhJbmRleCwgbWV0cmljcy52ZXJ0T3Jp
Z2luWSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9y
Zy5jbGVhcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNWbXR4RW50cmllcykgeworICAg
ICAgICAgICAgc2l6ZV90IHZtdHhTaXplOworICAgICAgICAgICAgT3duUHRyPE9UVGFibGVWbXR4
PiB2bXR4KHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlPE9UVGFibGVWbXR4PihPVFRhYmxlVGFn
Vm10eCwgJnZtdHhTaXplKSk7CisgICAgICAgICAgICBpZiAodm10eCkgeworICAgICAgICAgICAg
ICAgIG1fYWR2YW5jZUhlaWdodHMucmVzaXplKGNWbXR4RW50cmllcyk7CisgICAgICAgICAgICAg
ICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGNWbXR4RW50cmllczsgKytpKQorICAgICAgICAg
ICAgICAgICAgICBtX2FkdmFuY2VIZWlnaHRzW2ldID0gdm10eC0+ZW50cmllc1tpXS5hZHZhbmNl
SGVpZ2h0OworCisgICAgICAgICAgICAgICAgLy8gVk9SRyBpcyBwcmVmZXJyZWQgd2F5IHRvIGNh
bGN1bGF0ZSB2aXJ0aWNhbCBvcmlnaW4gdGhhbiB2bXR4LAorICAgICAgICAgICAgICAgIC8vIHNv
IGxvYWQgdG9wU2lkZUJlYXJpbmcgZnJvbSB2bXR4IG9ubHkgaWYgVk9SRyBpcyBtaXNzaW5nLgor
ICAgICAgICAgICAgICAgIGlmICghaGFzVk9SRygpKSB7CisgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBzaXplRXh0cmEgPSB2bXR4U2l6ZSAtIChzaXplb2YoT1RUYWJsZVZtdHg6OkVudHJ5KSAq
IGNWbXR4RW50cmllcyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghKHNpemVFeHRyYSAl
IHNpemVvZihPVEludDE2KSkpOworICAgICAgICAgICAgICAgICAgICBzaXplX3QgY1RvcFNpZGVC
ZWFyaW5ncyA9IGNWbXR4RW50cmllcyArIHNpemVFeHRyYSAvIHNpemVvZihPVEludDE2KTsKKyAg
ICAgICAgICAgICAgICAgICAgbV90b3BTaWRlQmVhcmluZ3MucmVzaXplKGNUb3BTaWRlQmVhcmlu
Z3MpOworICAgICAgICAgICAgICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoOyBpIDwgY1ZtdHhFbnRyaWVzOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3RvcFNpZGVCZWFyaW5nc1tpXSA9IHZtdHgtPmVudHJpZXNbaV0udG9wU2lkZUJlYXJpbmc7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgY1RvcFNpZGVCZWFyaW5ncykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgT1RJbnQxNiogcFRvcFNpZGVCZWFyaW5nc0V4dHJhID0gcmVpbnRl
cnByZXRfY2FzdDxPVEludDE2Kj4oJnZtdHgtPmVudHJpZXNbY1ZtdHhFbnRyaWVzXSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGNUb3BTaWRlQmVhcmluZ3M7ICsraSwgKytw
VG9wU2lkZUJlYXJpbmdzRXh0cmEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b3BT
aWRlQmVhcmluZ3NbaV0gPSAqcFRvcFNpZGVCZWFyaW5nc0V4dHJhOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZtdHguY2xlYXIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIExvYWQgdmVydGljYWwg
Z2x5cGggc3Vic3RpdHV0aW9ucy4KKyAgICBzaXplX3QgZ3N1YlNpemU7CisgICAgT3duUHRyPE9U
VGFibGVHU1VCPiBnc3ViKHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlPE9UVGFibGVHU1VCPihP
VFRhYmxlVGFnR1NVQiwgJmdzdWJTaXplKSk7CisgICAgaWYgKGdzdWIpIHsKKyAgICAgICAgT1RQ
dHJSYW5nZSBnc3ViVmFsaWRhdG9yKGdzdWIuZ2V0KCksIGdzdWJTaXplKTsKKyAgICAgICAgZ3N1
Yi0+Z2V0VmVydGljYWxHbHlwaFN1YnN0aXR1dGlvbnMoJm1fdmVydGljYWxHbHlwaE1hcCwgJmdz
dWJWYWxpZGF0b3IpOworICAgICAgICBnc3ViLmNsZWFyKCk7CisgICAgfQorfQorCitmbG9hdCBP
cGVuVHlwZVZlcnRpY2FsRGF0YTo6YWR2YW5jZUhlaWdodChjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCwgR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgZmxvYXQgc2l6ZVBlclVuaXQgPSBmb250
LT5zaXplUGVyVW5pdCgpOworICAgIHNpemVfdCBjb3VudEhlaWdodHMgPSBtX2FkdmFuY2VIZWln
aHRzLnNpemUoKTsKKyAgICBpZiAoY291bnRIZWlnaHRzKSB7CisgICAgICAgIHVpbnQxNl90IGFk
dmFuY2VGVW5pdCA9IG1fYWR2YW5jZUhlaWdodHNbZ2x5cGggPCBjb3VudEhlaWdodHMgPyBnbHlw
aCA6IGNvdW50SGVpZ2h0cyAtIDFdOworICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZUZV
bml0ICogc2l6ZVBlclVuaXQ7CisgICAgICAgIHJldHVybiBhZHZhbmNlOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBvdGhlcndpc2UsIHNob3VsZCB0aGlzIGJlIGFzY2VudCwgb3IgYm91bmRpbmdi
b3g/CisgICAgcmV0dXJuIGZvbnQtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Cit9CisKK3ZvaWQg
T3BlblR5cGVWZXJ0aWNhbERhdGE6OmdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaCogZ2x5cGhzLCBzaXplX3QgY291
bnQsIGZsb2F0KiBvdXRYWUFycmF5KSBjb25zdAoreworICAgIHNpemVfdCBjb3VudFdpZHRocyA9
IG1fYWR2YW5jZVdpZHRocy5zaXplKCk7CisgICAgQVNTRVJUKGNvdW50V2lkdGhzID4gMCk7Cisg
ICAgY29uc3QgRm9udE1ldHJpY3MmIG1ldHJpY3MgPSBmb250LT5mb250TWV0cmljcygpOworICAg
IGZsb2F0IHNpemVQZXJVbml0ID0gZm9udC0+c2l6ZVBlclVuaXQoKTsKKyAgICBmbG9hdCBhc2Nl
bnQgPSBtZXRyaWNzLmFzY2VudCgpOworICAgIGJvb2wgdXNlVk9SRyA9IGhhc1ZPUkcoKTsKKyAg
ICBzaXplX3QgY291bnRUb3BTaWRlQmVhcmluZ3MgPSBtX3RvcFNpZGVCZWFyaW5ncy5zaXplKCk7
CisgICAgZmxvYXQgZGVmYXVsdFZlcnRPcmlnaW5ZID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OnF1aWV0X05hTigpOworICAgIGZvciAoZmxvYXQqIGVuZCA9ICYob3V0WFlBcnJheVtjb3Vu
dCAqIDJdKTsgb3V0WFlBcnJheSAhPSBlbmQ7ICsrZ2x5cGhzLCBvdXRYWUFycmF5ICs9IDIpIHsK
KyAgICAgICAgR2x5cGggZ2x5cGggPSAqZ2x5cGhzOworICAgICAgICB1aW50MTZfdCB3aWR0aEZV
bml0ID0gbV9hZHZhbmNlV2lkdGhzW2dseXBoIDwgY291bnRXaWR0aHMgPyBnbHlwaCA6IGNvdW50
V2lkdGhzIC0gMV07CisgICAgICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGVW5pdCAqIHNpemVQZXJV
bml0OworICAgICAgICBvdXRYWUFycmF5WzBdID0gLXdpZHRoIC8gMjsKKworICAgICAgICAvLyBG
b3IgWSwgdHJ5IFZPUkcgZmlyc3QuCisgICAgICAgIGlmICh1c2VWT1JHKSB7CisgICAgICAgICAg
ICBpbnQxNl90IHZlcnRPcmlnaW5ZRlVuaXQgPSBtX3ZlcnRPcmlnaW5ZLmdldChnbHlwaCk7Cisg
ICAgICAgICAgICBpZiAodmVydE9yaWdpbllGVW5pdCkgeworICAgICAgICAgICAgICAgIG91dFhZ
QXJyYXlbMV0gPSAtdmVydE9yaWdpbllGVW5pdCAqIHNpemVQZXJVbml0OworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzbmFuKGRlZmF1
bHRWZXJ0T3JpZ2luWSkpCisgICAgICAgICAgICAgICAgZGVmYXVsdFZlcnRPcmlnaW5ZID0gLW1f
ZGVmYXVsdFZlcnRPcmlnaW5ZICogc2l6ZVBlclVuaXQ7CisgICAgICAgICAgICBvdXRYWUFycmF5
WzFdID0gZGVmYXVsdFZlcnRPcmlnaW5ZOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICAvLyBJZiBubyBWT1JHLCB2bXR4IG5leHQuCisgICAgICAgIGlmIChjb3Vu
dFRvcFNpZGVCZWFyaW5ncykgeworICAgICAgICAgICAgaW50MTZfdCB0b3BTaWRlQmVhcmluZ0ZV
bml0ID0gbV90b3BTaWRlQmVhcmluZ3NbZ2x5cGggPCBjb3VudFRvcFNpZGVCZWFyaW5ncyA/IGds
eXBoIDogY291bnRUb3BTaWRlQmVhcmluZ3MgLSAxXTsKKyAgICAgICAgICAgIGZsb2F0IHRvcFNp
ZGVCZWFyaW5nID0gdG9wU2lkZUJlYXJpbmdGVW5pdCAqIHNpemVQZXJVbml0OworICAgICAgICAg
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAg
ICAgICAgIG91dFhZQXJyYXlbMV0gPSBib3VuZHMueSgpIC0gdG9wU2lkZUJlYXJpbmc7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBvdGhlcndp
c2UsIHNob3VsZCB0aGlzIGJlIGFzY2VudCwgb3IgYm91bmRpbmdib3g/CisgICAgICAgIG91dFhZ
QXJyYXlbMV0gPSAtYXNjZW50OworICAgIH0KK30KKwordm9pZCBPcGVuVHlwZVZlcnRpY2FsRGF0
YTo6c3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dCwgR2x5cGhQYWdlKiBnbHlwaFBhZ2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KSBjb25zdAoreworICAgIGNvbnN0IEhhc2hNYXA8R2x5cGgsIEdseXBoPiYgbWFwID0gbV92ZXJ0
aWNhbEdseXBoTWFwOworICAgIGlmIChtYXAuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gb2Zmc2V0LCBlbmQgPSBvZmZzZXQgKyBsZW5ndGg7
IGluZGV4IDwgZW5kOyArK2luZGV4KSB7CisgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhQYWdl
LT5nbHlwaEF0KGluZGV4KTsKKyAgICAgICAgaWYgKGdseXBoKSB7CisgICAgICAgICAgICBBU1NF
UlQoZ2x5cGhQYWdlLT5nbHlwaERhdGFGb3JJbmRleChpbmRleCkuZm9udERhdGEgPT0gZm9udCk7
CisgICAgICAgICAgICBHbHlwaCB0byA9IG1hcC5nZXQoZ2x5cGgpOworICAgICAgICAgICAgaWYg
KHRvKQorICAgICAgICAgICAgICAgIGdseXBoUGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaW5k
ZXgsIHRvLCBmb250KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZWQ5MzgzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmgKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgS29qaSBJc2hpaSA8a29qaWlzaGlAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBP
cGVuVHlwZVZlcnRpY2FsRGF0YV9oCisjZGVmaW5lIE9wZW5UeXBlVmVydGljYWxEYXRhX2gKKwor
I2luY2x1ZGUgIkdseXBoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3Jt
RGF0YTsKK2NsYXNzIEdseXBoUGFnZTsKK2NsYXNzIFNpbXBsZUZvbnREYXRhOworCitjbGFzcyBP
cGVuVHlwZVZlcnRpY2FsRGF0YSB7CitwdWJsaWM6CisgICAgT3BlblR5cGVWZXJ0aWNhbERhdGEo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworCisgICAgYm9vbCBpc09wZW5UeXBlKCkgY29uc3Qg
eyByZXR1cm4gIW1fYWR2YW5jZVdpZHRocy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1ZlcnRp
Y2FsTWV0cmljcygpIGNvbnN0IHsgcmV0dXJuICFtX2FkdmFuY2VIZWlnaHRzLmlzRW1wdHkoKTsg
fQorICAgIGZsb2F0IGFkdmFuY2VIZWlnaHQoY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaCkg
Y29uc3Q7CisgICAgdm9pZCBzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiwgR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
IGNvbnN0OworICAgIHZvaWQgZ2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMoY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaCosIHNpemVfdCwgZmxvYXQqIG91dFhZQXJyYXkp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaGFzVk9SRygpIGNvbnN0IHsgcmV0dXJuICFt
X3ZlcnRPcmlnaW5ZLmlzRW1wdHkoKTsgfQorCitwcml2YXRlOgorICAgIFZlY3Rvcjx1aW50MTZf
dD4gbV9hZHZhbmNlV2lkdGhzOworICAgIFZlY3Rvcjx1aW50MTZfdD4gbV9hZHZhbmNlSGVpZ2h0
czsKKyAgICBWZWN0b3I8aW50MTZfdD4gbV90b3BTaWRlQmVhcmluZ3M7CisgICAgaW50MTZfdCBt
X2RlZmF1bHRWZXJ0T3JpZ2luWTsKKyAgICBIYXNoTWFwPEdseXBoLCBpbnQxNl90PiBtX3ZlcnRP
cmlnaW5ZOworICAgIEhhc2hNYXA8R2x5cGgsIEdseXBoPiBtX3ZlcnRpY2FsR2x5cGhNYXA7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBPcGVuVHlwZVZlcnRpY2Fs
RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKaW5kZXggOTg2MGRmNi4uMzI2NzdmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtNzQsNiArNzQsMjkgQEAgRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJv
b2wgb2JsaXEKICAgICBSZXN0b3JlREMoaGRjLCAtMSk7CiB9CiAKKyNpZiBVU0UoQ0cpCit2b2lk
KiBGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxlLCBzaXplX3Qq
IHNpemUpIGNvbnN0Cit7CisgICAgSFduZERDIGhkYygwKTsKKyAgICBIR0RJT0JKIG9sZEZvbnQg
PSBTZWxlY3RPYmplY3QoaGRjLCBoZm9udCgpKTsKKworICAgIERXT1JEIGNiID0gR2V0Rm9udERh
dGEoaGRjLCB0YWJsZSwgMCwgMCwgMCk7CisgICAgdm9pZCogZGF0YTsKKyAgICBpZiAoY2IgPT0g
R0RJX0VSUk9SKQorICAgICAgICBkYXRhID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgZGF0YSA9
IG5ldyB1aW50OF90W2NiXTsKKyAgICAgICAgRFdPUkQgcmVzdWx0ID0gR2V0Rm9udERhdGEoaGRj
LCB0YWJsZSwgMCwgZGF0YSwgY2IpOworICAgICAgICBBU1NFUlQocmVzdWx0ID09IGNiKTsKKyAg
ICAgICAgaWYgKHNpemUpCisgICAgICAgICAgICAqc2l6ZSA9IHJlc3VsdDsKKyAgICB9CisKKyAg
ICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICByZXR1cm4gZGF0YTsKK30KKyNlbmRp
ZgorCiAjaWZuZGVmIE5ERUJVRwogU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9u
KCkgY29uc3QKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132350</attachid>
            <date>2012-03-16 12:32:34 -0700</date>
            <delta_ts>2012-03-17 00:08:19 -0700</delta_ts>
            <desc>OpenTypeVerticalData class and its related changes</desc>
            <filename>81326-2.patch</filename>
            <type>text/plain</type>
            <size>26884</size>
            <attacher name="Koji Ishii">kojii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYzY2MzkxLi4yZGVkMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUg
QEAKKzIwMTItMDMtMTYgIEtvamkgSXNoaWkgIDxrb2ppaXNoaUBnbWFpbC5jb20+CisKKyAgICAg
ICAgVmVydGljYWwgZmxvdyBzdXBwb3J0IGZvciBPcGVuVHlwZSBmb250cyB3aXRoIHRoZSBsZWFz
dCBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxMzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIE9wZW5UeXBl
VmVydGljYWxEYXRhIHRvIHJlYWQKKyAgICAgICAgdmVydGljYWwgZm9udCBtZXRyaWNzIGFuZCB2
ZXJ0aWNhbCBhbHRlcm5hdGUgZ2x5cGggbWFwLCBib3RoIG9mIHdoaWNoCisgICAgICAgIGFyZSBy
ZXF1aXJlZCBpbmZvcm1hdGlvbiB0byByZW5kZXIgdmVydGljYWwgZmxvdy4KKworICAgICAgICBD
dXJyZW50bHksIFdlYktpdCByZWxpZXMgb24gcGxhdG9ybSBBUElzIHRvIGRvIHRoZXNlIHdvcmsu
IEhvd2V2ZXIsCisgICAgICAgIHNvbWUgcGxhdGZvcm1zIHN1Y2ggYXMgV2luZG93cyBsYWNrIHN1
cHBvcnQgZm9yIGFsbCB0aGUgY2FwYWJpbGl0aWVzCisgICAgICAgIFdlYktpdCByZXF1aXJlcyBm
b3IgdmVydGljYWwgZmxvdyBhbmQgdGhlIHRleHQtb3JpZW50YXRpb24gcHJvcGVydHkKKyAgICAg
ICAgdG8gd29yayBjb3JyZWN0bHkuIFJlYWRpbmcgT3BlblR5cGUgdGFibGVzIGRpcmVjdGx5IGFs
c28gZ2l2ZXMKKyAgICAgICAgYmVuZWZpdHMgaW4gY29uc2lzdGVudCBiZWhhdmlvciBhbW9uZyB0
aGUgV2ViS2l0IHBsYXRmb3Jtcy4KKworICAgICAgICBUaGlzIGNvZGUgaXMgY3VycmVudGx5IGlu
Y2x1ZGVkIG9ubHkgaW4gQ0dXaW4sIGFuZCBpc24ndCBvbiBhbnkgY29kZQorICAgICAgICBwYXRo
IGV2ZW4gb24gQ0dXaW4geWV0LiBDYWxsZXIncyBzaWRlIGNoYW5nZSBmb3IgQ0dXaW4gYW5kIHN1
cHBvcnQgZm9yCisgICAgICAgIG90aGVyIHBsYXRmcm9tcyB3aWxsIGJlIGluIHNlcGFyYXRlIGJ1
Z3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSByZXF1aXJlZC4gTm8gYmVoYXZpb3IgY2hh
bmdlcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkIE9wZW5UeXBlVHlwZXMuaCBhbmQg
T3BlblR5cGVWZXJ0aWNhbERhdGEuaC9jcHAKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajogQWRkIE9wZW5UeXBlVHlwZXMuaCBhbmQgT3BlblR5cGVWZXJ0aWNhbERhdGEu
aC9jcHAKKyAgICAgICAgKiBneXAvV2ViQ29yZS5neXA6IEV4Y2x1ZGUgT3BlblR5cGVUeXBlcy5o
IGFuZCBPcGVuVHlwZVZlcnRpY2FsRGF0YS5oL2NwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkIG9wZW5UeXBlVGFibGUoKQorICAgICAgICAoRm9u
dFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVu
VHlwZVRhYmxlKTogcGxhdGZvcm0gQVBJIHRvIHJlYWQgT3BlblR5cGUgdGFibGVzCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDogQWRkIHNpemVQZXJVbml0KCkK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzaXplUGVyVW5pdCk6IHNpemUoKSAv
IHVuaXRzUGVyRW0oKSBmb3IgbGVzcyBtdWx0aXBsaWNhdGlvbgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaDogU3BsaXQgZnJvbSBPcGVuVHlwZVV0
aWxpdGllcyB3aXRoIHNvbWUgYWRkaXRpb25zCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZ0VuZGlhblNob3J0OjpvcGVyYXRvciBzaG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpCaWdFbmRpYW5TaG9ydDo6QmlnRW5kaWFuU2hvcnQpOgorICAgICAgICAoQmlnRW5kaWFu
U2hvcnQpOgorICAgICAgICAoV2ViQ29yZTo6QmlnRW5kaWFuVVNob3J0OjpvcGVyYXRvciB1bnNp
Z25lZCBzaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpCaWdFbmRpYW5VU2hvcnQ6OkJpZ0VuZGlh
blVTaG9ydCk6CisgICAgICAgIChCaWdFbmRpYW5VU2hvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
QmlnRW5kaWFuTG9uZzo6b3BlcmF0b3IgaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZ0VuZGlh
bkxvbmc6OkJpZ0VuZGlhbkxvbmcpOgorICAgICAgICAoQmlnRW5kaWFuTG9uZyk6CisgICAgICAg
IChXZWJDb3JlOjpCaWdFbmRpYW5VTG9uZzo6b3BlcmF0b3IgdW5zaWduZWQpOgorICAgICAgICAo
V2ViQ29yZTo6QmlnRW5kaWFuVUxvbmc6OkJpZ0VuZGlhblVMb25nKToKKyAgICAgICAgKEJpZ0Vu
ZGlhblVMb25nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVV0aWxpdGllcy5jcHA6IFNwbGl0IHRvIE9wZW5UeXBlVHlwZXMuaAorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmg6IFNwbGl0IHRvIE9wZW5U
eXBlVHlwZXMuaAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VmVydGljYWxEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE9U
UHRyUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6T1RQdHJSYW5nZTo6T1RQdHJSYW5nZSk6IFZh
bGlkYXRlcyBvZmZzZXQgdG8gcHJvdGVjdCBmcm9tIGJ1ZmZlciBvdmVycnVuIGluIGJhZCBmb250
cworICAgICAgICAoV2ViQ29yZTo6T1RQdHJSYW5nZTo6YXNzZXJ0SXNUcnVlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9UUHRyUmFuZ2U6OmlzVmFsaWRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6T1RU
YWJsZTo6cHRyKToKKyAgICAgICAgKE9UVGFibGVIaGVhKTogT3BlblR5cGUgJ2hoZWEnIHRhYmxl
CisgICAgICAgIChPVFRhYmxlVmhlYSk6IE9wZW5UeXBlICd2aGVhJyB0YWJsZQorICAgICAgICAo
RW50cnkpOgorICAgICAgICAoT1RUYWJsZVZPUkcpOiBPcGVuVHlwZSAnVk9SRycgdGFibGUKKyAg
ICAgICAgKFZlcnRPcmlnaW5ZTWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZVZl
cnRpY2FsRGF0YTo6T3BlblR5cGVWZXJ0aWNhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6T3Bl
blR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VIZWlnaHQpOiBBZHZhbmNlIGhlaWdodCBmb3IgYSBn
bHlwaAorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmdldFZlcnRpY2Fs
VHJhbnNsYXRpb25zRm9yR2x5cGhzKTogVmVydGljYWwgb3JpZ2luCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKE9wZW5UeXBlVmVydGljYWxEYXRhKTogQSBuZXcgY2xh
c3MgdG8gaGFuZGxlIHZlcnRpY2FsIGZsb3cgZGF0YSBpbiBPcGVuVHlwZQorICAgICAgICAoV2Vi
Q29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmlzT3BlblR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6Omhhc1ZlcnRpY2FsTWV0cmljcyk6CisgICAgICAgIChX
ZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6aGFzVk9SRyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlKTog
SW1wbGVtZW50cyBvcGVuVHlwZVRhYmxlKCkKKwogMjAxMi0wMy0xMiAgRGFuYSBKYW5zZW5zICA8
ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSBwcm9qZWN0UXVh
ZCB0byBhcHBseSBpbnZlcnNlIG1hcFJlY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4ZDFjMzUwLi5m
MWRhNjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNzA1LDggKzM3MDUsMTEgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlw
ZVNhbml0aXplci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlU2FuaXRpemVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlVHlwZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZH
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlP
cGVuVkcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTFV0aWxz
LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRl
eCAyMTZiZmY1Li5mZDY5N2E5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagpAQCAtMjkwNzIsNiArMjkwNzIsMTAgQEAKIAkJCQkJCT4KIAkJCQkJPC9G
aWxlPgogCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1xvcGVudHlwZVxPcGVuVHlwZVR5cGVzLmgiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJ
PEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVc
T3BlblR5cGVVdGlsaXRpZXMuY3BwIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CkBAIC0yOTA4MCw2
ICsyOTA4NCwxNCBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBlVmVydGlj
YWxEYXRhLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQorCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVZlcnRpY2Fs
RGF0YS5oIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxSZWZDb3VudGVkR0RJSGFuZGxlLmgiCiAJ
CQkJCQk+CiAJCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2d5cC9XZWJD
b3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL2d5cC9XZWJDb3JlLmd5cAppbmRleCA2MWZiM2NjLi41
ZGExNTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9neXAvV2ViQ29yZS5neXAKKysrIGIv
U291cmNlL1dlYkNvcmUvZ3lwL1dlYkNvcmUuZ3lwCkBAIC05NCw3ICs5NCw5IEBACiAgICAgICAg
ICMgRklYTUU6IENvbnNpZGVyIGV4Y2x1ZGluZyBHTCBhcyBhIHN1ZmZpeC4KICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAogICAgICAg
ICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTFxc
LmNwcCQnXSwKKyAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVHlwZXNcXC5oJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXNcXC4oY3BwfGgpJCddLAorICAgICAgICBb
J2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERh
dGFcXC4oY3BwfGgpJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vcG9zaXgvU2hh
cmVkQnVmZmVyUE9TSVhcXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS90
ZXh0L0h5cGhlbmF0aW9uXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0v
dGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1VcXC5jcHAkJ10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggOTRjNmMwMS4uYTQx
ZTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBs
YXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQ
bGF0Zm9ybURhdGEuaApAQCAtMjc2LDYgKzI3NiwyMSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAKKyNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKKyAgICB2b2lkKiBvcGVuVHlwZVRhYmxl
KHVpbnQzMl90IHRhYmxlLCBzaXplX3QqID0gMCkgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IFBhc3NPd25QdHI8VD4gb3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSwgc2l6ZV90
KiBzaXplID0gMCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBzaXplVG1wOworICAgICAg
ICBpZiAoIXNpemUpCisgICAgICAgICAgICBzaXplID0gJnNpemVUbXA7CisgICAgICAgIE93blB0
cjxUPiBkYXRhID0gYWRvcHRQdHIocmVpbnRlcnByZXRfY2FzdDxUKj4ob3BlblR5cGVUYWJsZSh0
YWJsZSwgc2l6ZSkpKTsKKyAgICAgICAgaWYgKGRhdGEgJiYgKnNpemUgPCBzaXplb2YoVCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICJCcm9rZW4gZm9udCB0YWJs
ZSBpZ25vcmVkLCBzaXplICVkIDwgbWluICVkIiwgKnNpemUsIHNpemVvZihUKSk7CisgICAgICAg
ICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRhdGEucmVsZWFz
ZSgpOworICAgIH0KKyNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwogICAgIFN0cmluZyBkZXNjcmlw
dGlvbigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmgKaW5kZXggZGQ4NmYwMDQuLmZkMmZmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtMTE4LDYgKzEx
OCw3IEBAIHB1YmxpYzoKIAogICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIHsgcmV0dXJu
IG1fZm9udE1ldHJpY3M7IH0KICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnRNZXRyaWNzOyB9CisgICAgZmxvYXQgc2l6ZVBlclVuaXQoKSBj
b25zdCB7IHJldHVybiBwbGF0Zm9ybURhdGEoKS5zaXplKCkgLyAoZm9udE1ldHJpY3MoKS51bml0
c1BlckVtKCkgPyBmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA6IDEpOyB9CiAgICAgCiAgICAg
ZmxvYXQgbWF4Q2hhcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhDaGFyV2lkdGg7IH0KICAg
ICB2b2lkIHNldE1heENoYXJXaWR0aChmbG9hdCBtYXhDaGFyV2lkdGgpIHsgbV9tYXhDaGFyV2lk
dGggPSBtYXhDaGFyV2lkdGg7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YjkyYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oCkBAIC0wLDAgKzEs
NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEtv
amkgSXNoaWkgPGtvamlpc2hpQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT3BlblR5
cGVUeXBlc19oCisjZGVmaW5lIE9wZW5UeXBlVHlwZXNfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0cnVjdCBCaWdFbmRpYW5TaG9ydCB7CisgICAgb3BlcmF0b3Igc2hvcnQoKSBjb25zdCB7
IHJldHVybiAodiAmIDB4MDBmZikgPDwgOCB8IHYgPj4gODsgfQorICAgIEJpZ0VuZGlhblNob3J0
KHNob3J0IHUpIDogdigodSAmIDB4MDBmZikgPDwgOCB8IHUgPj4gOCkgeyB9CisgICAgdW5zaWdu
ZWQgc2hvcnQgdjsKK307CisKK3N0cnVjdCBCaWdFbmRpYW5VU2hvcnQgeworICAgIG9wZXJhdG9y
IHVuc2lnbmVkIHNob3J0KCkgY29uc3QgeyByZXR1cm4gKHYgJiAweDAwZmYpIDw8IDggfCB2ID4+
IDg7IH0KKyAgICBCaWdFbmRpYW5VU2hvcnQodW5zaWduZWQgc2hvcnQgdSkgOiB2KCh1ICYgMHgw
MGZmKSA8PCA4IHwgdSA+PiA4KSB7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCB2OworfTsKKworc3Ry
dWN0IEJpZ0VuZGlhbkxvbmcgeworICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuICh2
ICYgMHhmZikgPDwgMjQgfCAodiAmIDB4ZmYwMCkgPDwgOCB8ICh2ICYgMHhmZjAwMDApID4+IDgg
fCB2ID4+IDI0OyB9CisgICAgQmlnRW5kaWFuTG9uZyhpbnQgdSkgOiB2KCh1ICYgMHhmZikgPDwg
MjQgfCAodSAmIDB4ZmYwMCkgPDwgOCB8ICh1ICYgMHhmZjAwMDApID4+IDggfCB1ID4+IDI0KSB7
IH0KKyAgICB1bnNpZ25lZCB2OworfTsKKworc3RydWN0IEJpZ0VuZGlhblVMb25nIHsKKyAgICBv
cGVyYXRvciB1bnNpZ25lZCgpIGNvbnN0IHsgcmV0dXJuICh2ICYgMHhmZikgPDwgMjQgfCAodiAm
IDB4ZmYwMCkgPDwgOCB8ICh2ICYgMHhmZjAwMDApID4+IDggfCB2ID4+IDI0OyB9CisgICAgQmln
RW5kaWFuVUxvbmcodW5zaWduZWQgdSkgOiB2KCh1ICYgMHhmZikgPDwgMjQgfCAodSAmIDB4ZmYw
MCkgPDwgOCB8ICh1ICYgMHhmZjAwMDApID4+IDggfCB1ID4+IDI0KSB7IH0KKyAgICB1bnNpZ25l
ZCB2OworfTsKKwordHlwZWRlZiBCaWdFbmRpYW5TaG9ydCBPVEludDE2OwordHlwZWRlZiBCaWdF
bmRpYW5VU2hvcnQgT1RVSW50MTY7Cit0eXBlZGVmIEJpZ0VuZGlhbkxvbmcgT1RJbnQzMjsKK3R5
cGVkZWYgQmlnRW5kaWFuVUxvbmcgT1RVSW50MzI7CisKK3R5cGVkZWYgT1RVSW50MzIgT1RGaXhl
ZDsKK3R5cGVkZWYgT1RVSW50MTYgT1RPZmZzZXQ7Cit0eXBlZGVmIE9UVUludDE2IE9UR2x5cGhJ
RDsKK3R5cGVkZWYgdWludDMyX3QgT1RUYWc7CisjZGVmaW5lIE9UX01BS0VfVEFHKGNoMSwgY2gy
LCBjaDMsIGNoNCkgKCgoKHVpbnQzMl90KShjaDQpKSA8PCAyNCkgfCAoKCh1aW50MzJfdCkoY2gz
KSkgPDwgMTYpIHwgKCgodWludDMyX3QpKGNoMikpIDw8IDgpIHwgKCh1aW50MzJfdCkoY2gxKSkp
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE9wZW5UeXBlVHlwZXNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3Bl
blR5cGVVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCmluZGV4IDZhZmUzZDkuLjM0MmRmZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKQEAgLTMxLDE4ICszMSw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7IAotICAgIG9wZXJhdG9yIHVu
c2lnbmVkIHNob3J0KCkgY29uc3QgeyByZXR1cm4gKHYgJiAweDAwZmYpIDw8IDggfCB2ID4+IDg7
IH0KLSAgICBCaWdFbmRpYW5VU2hvcnQodW5zaWduZWQgc2hvcnQgdSkgOiB2KCh1ICYgMHgwMGZm
KSA8PCA4IHwgdSA+PiA4KSB7IH0KLSAgICB1bnNpZ25lZCBzaG9ydCB2OwotfTsKLQotc3RydWN0
IEJpZ0VuZGlhblVMb25nIHsgCi0gICAgb3BlcmF0b3IgdW5zaWduZWQoKSBjb25zdCB7IHJldHVy
biAodiAmIDB4ZmYpIDw8IDI0IHwgKHYgJiAweGZmMDApIDw8IDggfCAodiAmIDB4ZmYwMDAwKSA+
PiA4IHwgdiA+PiAyNDsgfQotICAgIEJpZ0VuZGlhblVMb25nKHVuc2lnbmVkIHUpIDogdigodSAm
IDB4ZmYpIDw8IDI0IHwgKHUgJiAweGZmMDApIDw8IDggfCAodSAmIDB4ZmYwMDAwKSA+PiA4IHwg
dSA+PiAyNCkgeyB9Ci0gICAgdW5zaWduZWQgdjsKLX07Ci0KICNwcmFnbWEgcGFjaygxKQogCiBz
dHJ1Y3QgRU9UUHJlZml4IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oCmluZGV4IGY4ZTg3ODcu
LjBmMjYyMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuaApAQCAtMjcsMTMgKzI3LDEzIEBA
CiAjaWZuZGVmIE9wZW5UeXBlVXRpbGl0aWVzX2gKICNkZWZpbmUgT3BlblR5cGVVdGlsaXRpZXNf
aAogCisjaW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEJpZ0VuZGlhblVTaG9ydDsKIHN0cnVjdCBFT1RQ
cmVmaXg7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxE
YXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNmYTZjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBLb2ppIElzaGlpIDxrb2ppaXNoaUBn
bWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3Bl
blR5cGVWZXJ0aWNhbERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdseXBoUGFnZS5oIgorI2luY2x1ZGUgIk9wZW5UeXBlVHlwZXMuaCIKKyNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2VudW0geworICAgIE9UVGFibGVUYWdIaGVhID0gT1RfTUFLRV9UQUcoJ2gnLCAnaCcs
ICdlJywgJ2EnKSwKKyAgICBPVFRhYmxlVGFnSG10eCA9IE9UX01BS0VfVEFHKCdoJywgJ20nLCAn
dCcsICd4JyksCisgICAgT1RUYWJsZVRhZ1ZoZWEgPSBPVF9NQUtFX1RBRygndicsICdoJywgJ2Un
LCAnYScpLAorICAgIE9UVGFibGVUYWdWbXR4ID0gT1RfTUFLRV9UQUcoJ3YnLCAnbScsICd0Jywg
J3gnKSwKKyAgICBPVFRhYmxlVGFnVk9SRyA9IE9UX01BS0VfVEFHKCdWJywgJ08nLCAnUicsICdH
JyksCit9OworCitjbGFzcyBPVFB0clJhbmdlIHsKK3B1YmxpYzoKKyAgICBPVFB0clJhbmdlKGNv
bnN0IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpCisgICAgICAgIDogbV9wdHIocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4ocHRyKSkKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICB7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgYXNzZXJ0SXNUcnVlKGJvb2wgdmFsdWUpCisgICAg
eworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHZhbHVlLCAiSW52YWxpZCBPcGVuVHlwZSBk
YXRhIGRldGVjdGVkIik7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBib29s
IGlzVmFsaWRFbmQoY29uc3Qgdm9pZCogcCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBv
ZmZzZXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwKSAtIG1fcHRyOworICAg
ICAgICByZXR1cm4gYXNzZXJ0SXNUcnVlKG9mZnNldCA8PSBtX3NpemUpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBjb25zdCB1aW50OF90KiBtX3B0cjsKKyAgICBzaXplX3QgbV9zaXplOworfTsK
KworI3ByYWdtYSBwYWNrKDEpCisKK3N0cnVjdCBPVFRhYmxlIHsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gY29uc3QgVCogcHRyKHVpbnQxNl90IG9mZnNldCwgY29uc3QgT1RQdHJSYW5nZSog
dmFsaWRhdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgVCogcHRyID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPih0aGlzKSAr
IG9mZnNldCk7CisgICAgICAgIGlmICh2YWxpZGF0b3IgJiYgIXZhbGlkYXRvci0+aXNWYWxpZEVu
ZChwdHIgKyAxKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcHRyOwor
ICAgIH0KK307CisKK3N0cnVjdCBPVFRhYmxlSGhlYSB7CisgICAgT1RGaXhlZCB2ZXJzaW9uOwor
ICAgIE9USW50MTYgYXNjZW5kZXI7CisgICAgT1RJbnQxNiBkZXNjZW5kZXI7CisgICAgT1RJbnQx
NiBsaW5lR2FwOworICAgIE9USW50MTYgYWR2YW5jZVdpZHRoTWF4OworICAgIE9USW50MTYgbWlu
TGVmdFNpZGVCZWFyaW5nOworICAgIE9USW50MTYgbWluUmlnaHRTaWRlQmVhcmluZzsKKyAgICBP
VEludDE2IHhNYXhFeHRlbnQ7CisgICAgT1RJbnQxNiBjYXJldFNsb3BlUmlzZTsKKyAgICBPVElu
dDE2IGNhcmV0U2xvcGVSdW47CisgICAgT1RJbnQxNiBjYXJldE9mZnNldDsKKyAgICBPVEludDE2
IHJlc2VydmVkWzRdOworICAgIE9USW50MTYgbWV0cmljRGF0YUZvcm1hdDsKKyAgICBPVFVJbnQx
NiBudW1iZXJPZkhNZXRyaWNzOworfTsKKworc3RydWN0IE9UVGFibGVWaGVhIHsKKyAgICBPVEZp
eGVkIHZlcnNpb247CisgICAgT1RJbnQxNiBhc2NlbnQ7CisgICAgT1RJbnQxNiBkZXNjZW50Owor
ICAgIE9USW50MTYgbGluZUdhcDsKKyAgICBPVEludDE2IGFkdmFuY2VIZWlnaHRNYXg7CisgICAg
T1RJbnQxNiBtaW5Ub3BTaWRlQmVhcmluZzsKKyAgICBPVEludDE2IG1pbkJvdHRvbVNpZGVCZWFy
aW5nOworICAgIE9USW50MTYgeU1heEV4dGVudDsKKyAgICBPVEludDE2IGNhcmV0U2xvcGVSaXNl
OworICAgIE9USW50MTYgY2FyZXRTbG9wZVJ1bjsKKyAgICBPVEludDE2IGNhcmV0T2Zmc2V0Owor
ICAgIE9USW50MTYgcmVzZXJ2ZWRbNF07CisgICAgT1RJbnQxNiBtZXRyaWNEYXRhRm9ybWF0Owor
ICAgIE9UVUludDE2IG51bU9mTG9uZ1Zlck1ldHJpY3M7Cit9OworCitzdHJ1Y3QgT1RUYWJsZUht
dHggeworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIE9UVUludDE2IGFkdmFuY2VXaWR0aDsK
KyAgICAgICAgT1RJbnQxNiBsc2I7CisgICAgfSBlbnRyaWVzWzFdOworfTsKKworc3RydWN0IE9U
VGFibGVWbXR4IHsKKyAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBPVFVJbnQxNiBhZHZhbmNl
SGVpZ2h0OworICAgICAgICBPVEludDE2IHRvcFNpZGVCZWFyaW5nOworICAgIH0gZW50cmllc1sx
XTsKK307CisKK3N0cnVjdCBPVFRhYmxlVk9SRyB7CisgICAgT1RVSW50MTYgbWFqb3JWZXJzaW9u
OworICAgIE9UVUludDE2IG1pbm9yVmVyc2lvbjsKKyAgICBPVEludDE2IGRlZmF1bHRWZXJ0T3Jp
Z2luWTsKKyAgICBPVFVJbnQxNiBudW1WZXJ0T3JpZ2luWU1ldHJpY3M7CisgICAgc3RydWN0IFZl
cnRPcmlnaW5ZTWV0cmljcyB7CisgICAgICAgIE9UVUludDE2IGdseXBoSW5kZXg7CisgICAgICAg
IE9USW50MTYgdmVydE9yaWdpblk7CisgICAgfSB2ZXJ0T3JpZ2luWU1ldHJpY3NbMV07Cit9Owor
CisjcHJhZ21hIHBhY2soKQorCitPcGVuVHlwZVZlcnRpY2FsRGF0YTo6T3BlblR5cGVWZXJ0aWNh
bERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQorICAgIDogbV9kZWZh
dWx0VmVydE9yaWdpblkoMCkKK3sKKyAgICAvLyBMb2FkIGhoZWEgYW5kIGhtdHggdG8gZ2V0IHgt
Y29tcG9uZW50IG9mIHZlcnRpY2FsIG9yaWdpbnMuCisgICAgLy8gSWYgdGhlc2UgdGFibGVzIGFy
ZSBtaXNzaW5nLCBpdCdzIG5vdCBhbiBPcGVuVHlwZSBmb250LgorICAgIE93blB0cjxPVFRhYmxl
SGhlYT4gaGhlYShwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZTxPVFRhYmxlSGhlYT4oT1RUYWJs
ZVRhZ0hoZWEpKTsKKyAgICBpZiAoIWhoZWEpCisgICAgICAgIHJldHVybjsKKyAgICB1aW50MTZf
dCBjSG10eEVudHJpZXMgPSBoaGVhLT5udW1iZXJPZkhNZXRyaWNzOworICAgIGlmICghY0htdHhF
bnRyaWVzKQorICAgICAgICByZXR1cm47CisgICAgaGhlYS5jbGVhcigpOworCisgICAgT3duUHRy
PE9UVGFibGVIbXR4PiBobXR4KHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlPE9UVGFibGVIbXR4
PihPVFRhYmxlVGFnSG10eCkpOworICAgIGlmICghaG10eCkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fYWR2YW5jZVdpZHRocy5yZXNpemUoY0htdHhFbnRyaWVzKTsKKyAgICBmb3IgKHVpbnQxNl90
IGkgPSAwOyBpIDwgY0htdHhFbnRyaWVzOyArK2kpCisgICAgICAgIG1fYWR2YW5jZVdpZHRoc1tp
XSA9IGhtdHgtPmVudHJpZXNbaV0uYWR2YW5jZVdpZHRoOworICAgIGhtdHguY2xlYXIoKTsKKwor
ICAgIE93blB0cjxPVFRhYmxlVmhlYT4gdmhlYShwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZTxP
VFRhYmxlVmhlYT4oT1RUYWJsZVRhZ1ZoZWEpKTsKKyAgICBpZiAodmhlYSkgeworICAgICAgICB1
aW50MTZfdCBjVm10eEVudHJpZXMgPSB2aGVhLT5udW1PZkxvbmdWZXJNZXRyaWNzOworICAgICAg
ICB2aGVhLmNsZWFyKCk7CisKKyAgICAgICAgLy8gTG9hZCBWT1JHLiBUaGlzIHRhYmxlIGlzIG9w
dGlvbmFsLgorICAgICAgICBPd25QdHI8T1RUYWJsZVZPUkc+IHZvcmcocGxhdGZvcm1EYXRhLm9w
ZW5UeXBlVGFibGU8T1RUYWJsZVZPUkc+KE9UVGFibGVUYWdWT1JHKSk7CisgICAgICAgIGlmICh2
b3JnKSB7CisgICAgICAgICAgICBtX2RlZmF1bHRWZXJ0T3JpZ2luWSA9IHZvcmctPmRlZmF1bHRW
ZXJ0T3JpZ2luWTsKKyAgICAgICAgICAgIHVpbnQxNl90IGNWZXJ0T3JpZ2luWU1ldHJpY3MgPSB2
b3JnLT5udW1WZXJ0T3JpZ2luWU1ldHJpY3M7CisgICAgICAgICAgICBpZiAoIWNWZXJ0T3JpZ2lu
WU1ldHJpY3MpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGQgb25lIGVudHJ5IHNvIHRoYXQgaGFz
Vk9SRygpIGJlY29tZXMgdHJ1ZQorICAgICAgICAgICAgICAgIG1fdmVydE9yaWdpblkuc2V0KDAs
IG1fZGVmYXVsdFZlcnRPcmlnaW5ZKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGNWZXJ0T3JpZ2luWU1ldHJpY3M7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBPVFRhYmxlVk9SRzo6VmVydE9yaWdpbllNZXRy
aWNzJiBtZXRyaWNzID0gdm9yZy0+dmVydE9yaWdpbllNZXRyaWNzW2ldOworICAgICAgICAgICAg
ICAgICAgICBtX3ZlcnRPcmlnaW5ZLnNldChtZXRyaWNzLmdseXBoSW5kZXgsIG1ldHJpY3MudmVy
dE9yaWdpblkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZvcmcuY2xlYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjVm10eEVudHJpZXMpIHsK
KyAgICAgICAgICAgIHNpemVfdCB2bXR4U2l6ZTsKKyAgICAgICAgICAgIE93blB0cjxPVFRhYmxl
Vm10eD4gdm10eChwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZTxPVFRhYmxlVm10eD4oT1RUYWJs
ZVRhZ1ZtdHgsICZ2bXR4U2l6ZSkpOworICAgICAgICAgICAgaWYgKHZtdHgpIHsKKyAgICAgICAg
ICAgICAgICBtX2FkdmFuY2VIZWlnaHRzLnJlc2l6ZShjVm10eEVudHJpZXMpOworICAgICAgICAg
ICAgICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBjVm10eEVudHJpZXM7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9hZHZhbmNlSGVpZ2h0c1tpXSA9IHZtdHgtPmVudHJpZXNbaV0uYWR2
YW5jZUhlaWdodDsKKworICAgICAgICAgICAgICAgIC8vIFZPUkcgaXMgcHJlZmVycmVkIHdheSB0
byBjYWxjdWxhdGUgdmlydGljYWwgb3JpZ2luIHRoYW4gdm10eCwKKyAgICAgICAgICAgICAgICAv
LyBzbyBsb2FkIHRvcFNpZGVCZWFyaW5nIGZyb20gdm10eCBvbmx5IGlmIFZPUkcgaXMgbWlzc2lu
Zy4KKyAgICAgICAgICAgICAgICBpZiAoIWhhc1ZPUkcoKSkgeworICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZUV4dHJhID0gdm10eFNpemUgLSAoc2l6ZW9mKE9UVGFibGVWbXR4OjpFbnRy
eSkgKiBjVm10eEVudHJpZXMpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIShzaXplRXh0
cmEgJSBzaXplb2YoT1RJbnQxNikpKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNUb3BT
aWRlQmVhcmluZ3MgPSBjVm10eEVudHJpZXMgKyBzaXplRXh0cmEgLyBzaXplb2YoT1RJbnQxNik7
CisgICAgICAgICAgICAgICAgICAgIG1fdG9wU2lkZUJlYXJpbmdzLnJlc2l6ZShjVG9wU2lkZUJl
YXJpbmdzKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGkgPSAwOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKDsgaSA8IGNWbXR4RW50cmllczsgKytpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV90b3BTaWRlQmVhcmluZ3NbaV0gPSB2bXR4LT5lbnRyaWVzW2ldLnRvcFNpZGVCZWFy
aW5nOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGNUb3BTaWRlQmVhcmluZ3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE9USW50MTYqIHBUb3BTaWRlQmVhcmluZ3NFeHRyYSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8T1RJbnQxNio+KCZ2bXR4LT5lbnRyaWVzW2NWbXR4RW50cmllc10pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBjVG9wU2lkZUJlYXJpbmdzOyArK2ks
ICsrcFRvcFNpZGVCZWFyaW5nc0V4dHJhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dG9wU2lkZUJlYXJpbmdzW2ldID0gKnBUb3BTaWRlQmVhcmluZ3NFeHRyYTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2bXR4LmNsZWFy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Zsb2F0IE9wZW5UeXBl
VmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBH
bHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBzaXplX3QgY291bnRIZWlnaHRzID0gbV9hZHZhbmNl
SGVpZ2h0cy5zaXplKCk7CisgICAgaWYgKGNvdW50SGVpZ2h0cykgeworICAgICAgICB1aW50MTZf
dCBhZHZhbmNlRlVuaXQgPSBtX2FkdmFuY2VIZWlnaHRzW2dseXBoIDwgY291bnRIZWlnaHRzID8g
Z2x5cGggOiBjb3VudEhlaWdodHMgLSAxXTsKKyAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGFkdmFu
Y2VGVW5pdCAqIGZvbnQtPnNpemVQZXJVbml0KCk7CisgICAgICAgIHJldHVybiBhZHZhbmNlOwor
ICAgIH0KKworICAgIC8vIE5vIHZlcnRpY2FsIGluZm8gaW4gdGhlIGZvbnQgZmlsZTsgdXNlIGhl
aWdodCBhcyBhZHZhbmNlLgorICAgIHJldHVybiBmb250LT5mb250TWV0cmljcygpLmhlaWdodCgp
OworfQorCit2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRyYW5zbGF0aW9u
c0ZvckdseXBocyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGgqIGdseXBo
cywgc2l6ZV90IGNvdW50LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3QKK3sKKyAgICBzaXplX3Qg
Y291bnRXaWR0aHMgPSBtX2FkdmFuY2VXaWR0aHMuc2l6ZSgpOworICAgIEFTU0VSVChjb3VudFdp
ZHRocyA+IDApOworICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBtZXRyaWNzID0gZm9udC0+Zm9udE1l
dHJpY3MoKTsKKyAgICBmbG9hdCBzaXplUGVyVW5pdCA9IGZvbnQtPnNpemVQZXJVbml0KCk7Cisg
ICAgZmxvYXQgYXNjZW50ID0gbWV0cmljcy5hc2NlbnQoKTsKKyAgICBib29sIHVzZVZPUkcgPSBo
YXNWT1JHKCk7CisgICAgc2l6ZV90IGNvdW50VG9wU2lkZUJlYXJpbmdzID0gbV90b3BTaWRlQmVh
cmluZ3Muc2l6ZSgpOworICAgIGZsb2F0IGRlZmF1bHRWZXJ0T3JpZ2luWSA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICBmb3IgKGZsb2F0KiBlbmQgPSAmKG91
dFhZQXJyYXlbY291bnQgKiAyXSk7IG91dFhZQXJyYXkgIT0gZW5kOyArK2dseXBocywgb3V0WFlB
cnJheSArPSAyKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gKmdseXBoczsKKyAgICAgICAgdWlu
dDE2X3Qgd2lkdGhGVW5pdCA9IG1fYWR2YW5jZVdpZHRoc1tnbHlwaCA8IGNvdW50V2lkdGhzID8g
Z2x5cGggOiBjb3VudFdpZHRocyAtIDFdOworICAgICAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRlVu
aXQgKiBzaXplUGVyVW5pdDsKKyAgICAgICAgb3V0WFlBcnJheVswXSA9IC13aWR0aCAvIDI7CisK
KyAgICAgICAgLy8gRm9yIFksIHRyeSBWT1JHIGZpcnN0LgorICAgICAgICBpZiAodXNlVk9SRykg
eworICAgICAgICAgICAgaW50MTZfdCB2ZXJ0T3JpZ2luWUZVbml0ID0gbV92ZXJ0T3JpZ2luWS5n
ZXQoZ2x5cGgpOworICAgICAgICAgICAgaWYgKHZlcnRPcmlnaW5ZRlVuaXQpIHsKKyAgICAgICAg
ICAgICAgICBvdXRYWUFycmF5WzFdID0gLXZlcnRPcmlnaW5ZRlVuaXQgKiBzaXplUGVyVW5pdDsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChpc25hbihkZWZhdWx0VmVydE9yaWdpblkpKQorICAgICAgICAgICAgICAgIGRlZmF1bHRWZXJ0
T3JpZ2luWSA9IC1tX2RlZmF1bHRWZXJ0T3JpZ2luWSAqIHNpemVQZXJVbml0OworICAgICAgICAg
ICAgb3V0WFlBcnJheVsxXSA9IGRlZmF1bHRWZXJ0T3JpZ2luWTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgbm8gVk9SRywgdm10eCBuZXh0LgorICAg
ICAgICBpZiAoY291bnRUb3BTaWRlQmVhcmluZ3MpIHsKKyAgICAgICAgICAgIGludDE2X3QgdG9w
U2lkZUJlYXJpbmdGVW5pdCA9IG1fdG9wU2lkZUJlYXJpbmdzW2dseXBoIDwgY291bnRUb3BTaWRl
QmVhcmluZ3MgPyBnbHlwaCA6IGNvdW50VG9wU2lkZUJlYXJpbmdzIC0gMV07CisgICAgICAgICAg
ICBmbG9hdCB0b3BTaWRlQmVhcmluZyA9IHRvcFNpZGVCZWFyaW5nRlVuaXQgKiBzaXplUGVyVW5p
dDsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSBmb250LT5ib3VuZHNGb3JHbHlwaChn
bHlwaCk7CisgICAgICAgICAgICBvdXRYWUFycmF5WzFdID0gYm91bmRzLnkoKSAtIHRvcFNpZGVC
ZWFyaW5nOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBO
byB2ZXJ0aWNhbCBpbmZvIGluIHRoZSBmb250IGZpbGU7IHVzZSBhc2NlbnQgYXMgdmVydGljYWwg
b3JpZ2luLgorICAgICAgICBvdXRYWUFycmF5WzFdID0gLWFzY2VudDsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2N2IzZWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRp
Y2FsRGF0YS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEtvamkgSXNoaWkgPGtvamlpc2hpQGdtYWlsLmNvbT4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgT3BlblR5cGVWZXJ0aWNhbERhdGFfaAorI2RlZmluZSBPcGVuVHlwZVZl
cnRpY2FsRGF0YV9oCisKKyNpbmNsdWRlICJHbHlwaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZvbnRQbGF0Zm9ybURhdGE7CitjbGFzcyBHbHlwaFBhZ2U7CitjbGFzcyBTaW1wbGVGb250
RGF0YTsKKworY2xhc3MgT3BlblR5cGVWZXJ0aWNhbERhdGEgeworcHVibGljOgorICAgIE9wZW5U
eXBlVmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKworICAgIGJvb2wgaXNP
cGVuVHlwZSgpIGNvbnN0IHsgcmV0dXJuICFtX2FkdmFuY2VXaWR0aHMuaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBoYXNWZXJ0aWNhbE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiAhbV9hZHZhbmNlSGVp
Z2h0cy5pc0VtcHR5KCk7IH0KKyAgICBmbG9hdCBhZHZhbmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZv
bnREYXRhKiwgR2x5cGgpIGNvbnN0OworICAgIHZvaWQgZ2V0VmVydGljYWxUcmFuc2xhdGlvbnNG
b3JHbHlwaHMoY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaCosIHNpemVfdCwgZmxv
YXQqIG91dFhZQXJyYXkpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaGFzVk9SRygpIGNv
bnN0IHsgcmV0dXJuICFtX3ZlcnRPcmlnaW5ZLmlzRW1wdHkoKTsgfQorCitwcml2YXRlOgorICAg
IFZlY3Rvcjx1aW50MTZfdD4gbV9hZHZhbmNlV2lkdGhzOworICAgIFZlY3Rvcjx1aW50MTZfdD4g
bV9hZHZhbmNlSGVpZ2h0czsKKyAgICBWZWN0b3I8aW50MTZfdD4gbV90b3BTaWRlQmVhcmluZ3M7
CisgICAgaW50MTZfdCBtX2RlZmF1bHRWZXJ0T3JpZ2luWTsKKyAgICBIYXNoTWFwPEdseXBoLCBp
bnQxNl90PiBtX3ZlcnRPcmlnaW5ZOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gT3BlblR5cGVWZXJ0aWNhbERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCmlu
ZGV4IDk4NjBkZjYuLjMyNjc3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKQEAgLTc0LDYg
Kzc0LDI5IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQgZm9udCwg
ZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxCiAgICAgUmVzdG9yZURDKGhkYywgLTEp
OwogfQogCisjaWYgVVNFKENHKQordm9pZCogRm9udFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJs
ZSh1aW50MzJfdCB0YWJsZSwgc2l6ZV90KiBzaXplKSBjb25zdAoreworICAgIEhXbmREQyBoZGMo
MCk7CisgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQoKSk7CisK
KyAgICBEV09SRCBjYiA9IEdldEZvbnREYXRhKGhkYywgdGFibGUsIDAsIDAsIDApOworICAgIHZv
aWQqIGRhdGE7CisgICAgaWYgKGNiID09IEdESV9FUlJPUikKKyAgICAgICAgZGF0YSA9IDA7Cisg
ICAgZWxzZSB7CisgICAgICAgIGRhdGEgPSBuZXcgdWludDhfdFtjYl07CisgICAgICAgIERXT1JE
IHJlc3VsdCA9IEdldEZvbnREYXRhKGhkYywgdGFibGUsIDAsIGRhdGEsIGNiKTsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBjYik7CisgICAgICAgIGlmIChzaXplKQorICAgICAgICAgICAgKnNp
emUgPSByZXN1bHQ7CisgICAgfQorCisgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Cisg
ICAgcmV0dXJuIGRhdGE7Cit9CisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcKIFN0cmluZyBGb250
UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132451</attachid>
            <date>2012-03-17 00:08:19 -0700</date>
            <delta_ts>2012-03-17 13:00:27 -0700</delta_ts>
            <desc>OpenTypeVerticalData class and its related changes</desc>
            <filename>81326-3.patch</filename>
            <type>text/plain</type>
            <size>25937</size>
            <attacher name="Koji Ishii">kojii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYzY2MzkxLi4xYjMxN2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUg
QEAKKzIwMTItMDMtMTYgIEtvamkgSXNoaWkgIDxrb2ppaXNoaUBnbWFpbC5jb20+CisKKyAgICAg
ICAgVmVydGljYWwgZmxvdyBzdXBwb3J0IGZvciBPcGVuVHlwZSBmb250cyB3aXRoIHRoZSBsZWFz
dCBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxMzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIE9wZW5UeXBl
VmVydGljYWxEYXRhIHRvIHJlYWQKKyAgICAgICAgdmVydGljYWwgZm9udCBtZXRyaWNzIGZyb20g
T3BlblR5cGUgZm9udHMuCisKKyAgICAgICAgQ3VycmVudGx5LCBXZWJLaXQgcmVsaWVzIG9uIHBs
YXRvcm0gQVBJcyB0byBkbyB0aGUgd29yay4gSG93ZXZlciwKKyAgICAgICAgc29tZSBwbGF0Zm9y
bXMgc3VjaCBhcyBXaW5kb3dzIGxhY2sgc3VwcG9ydCBmb3IgYWxsIHRoZSBjYXBhYmlsaXRpZXMK
KyAgICAgICAgV2ViS2l0IHJlcXVpcmVzIGZvciB2ZXJ0aWNhbCBmbG93IGFuZCB0aGUgdGV4dC1v
cmllbnRhdGlvbiBwcm9wZXJ0eQorICAgICAgICB0byB3b3JrIGNvcnJlY3RseS4gUmVhZGluZyBP
cGVuVHlwZSB0YWJsZXMgZGlyZWN0bHkgYWxzbyBnaXZlcworICAgICAgICBiZW5lZml0cyBpbiBj
b25zaXN0ZW50IGJlaGF2aW9yIGFtb25nIHRoZSBXZWJLaXQgcGxhdGZvcm1zLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaXMgZm9yIGFueSBwbGF0Zm9ybXMgdGhhdCB3YW50cyB0byBwYXJzZSBPcGVu
VHlwZSB0YWJsZXMKKyAgICAgICAgZGlyZWN0bHksIGJ1dCBpdCdzIGN1cnJlbnRseSBpbmNsdWRl
ZCBvbmx5IGluIENHV2luIGFuZCBpc24ndCBvbiBhbnkKKyAgICAgICAgY29kZSBwYXRoIGV2ZW4g
b24gQ0dXaW4geWV0LiBDYWxsZXIncyBzaWRlIGNoYW5nZSBmb3IgQ0dXaW4gYW5kCisgICAgICAg
IHN1cHBvcnQgZm9yIG90aGVyIHBsYXRmcm9tcyB3aWxsIGJlIGluIHNlcGFyYXRlIGJ1Z3MuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSByZXF1aXJlZC4gTm8gYmVoYXZpb3IgY2hhbmdlcy4K
KworICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkIE9wZW5UeXBlVHlwZXMuaCBhbmQgT3BlblR5
cGVWZXJ0aWNhbERhdGEuaC9jcHAKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajogQWRkIE9wZW5UeXBlVHlwZXMuaCBhbmQgT3BlblR5cGVWZXJ0aWNhbERhdGEuaC9jcHAK
KyAgICAgICAgKiBneXAvV2ViQ29yZS5neXA6IEV4Y2x1ZGUgT3BlblR5cGVUeXBlcy5oIGFuZCBP
cGVuVHlwZVZlcnRpY2FsRGF0YS5oL2NwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuaDogQWRkIG9wZW5UeXBlVGFibGUoKQorICAgICAgICAoRm9udFBsYXRm
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRh
YmxlKTogcGxhdGZvcm0gQVBJIHRvIHJlYWQgT3BlblR5cGUgdGFibGVzCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDogQWRkIHNpemVQZXJVbml0KCkKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzaXplUGVyVW5pdCk6IHNpemUoKSAvIHVuaXRz
UGVyRW0oKSBmb3IgbGVzcyBtdWx0aXBsaWNhdGlvbgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaDogU3BsaXQgZnJvbSBPcGVuVHlwZVV0aWxpdGll
cyB3aXRoIHNvbWUgYWRkaXRpb25zCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZ0VuZGlhblNob3J0OjpvcGVyYXRvciBzaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWdFbmRpYW5TaG9ydDo6QmlnRW5kaWFuU2hvcnQpOgorICAgICAgICAoQmlnRW5kaWFuU2hvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6QmlnRW5kaWFuVVNob3J0OjpvcGVyYXRvciB1bnNpZ25lZCBz
aG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpCaWdFbmRpYW5VU2hvcnQ6OkJpZ0VuZGlhblVTaG9y
dCk6CisgICAgICAgIChCaWdFbmRpYW5VU2hvcnQpOgorICAgICAgICAoV2ViQ29yZTo6QmlnRW5k
aWFuTG9uZzo6b3BlcmF0b3IgaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZ0VuZGlhbkxvbmc6
OkJpZ0VuZGlhbkxvbmcpOgorICAgICAgICAoQmlnRW5kaWFuTG9uZyk6CisgICAgICAgIChXZWJD
b3JlOjpCaWdFbmRpYW5VTG9uZzo6b3BlcmF0b3IgdW5zaWduZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlnRW5kaWFuVUxvbmc6OkJpZ0VuZGlhblVMb25nKToKKyAgICAgICAgKEJpZ0VuZGlhblVM
b25nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxp
dGllcy5jcHA6IFNwbGl0IHRvIE9wZW5UeXBlVHlwZXMuaAorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmg6IFNwbGl0IHRvIE9wZW5UeXBlVHlw
ZXMuaAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGlj
YWxEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE9UUHRyUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6T1RQdHJSYW5nZTo6T1RQdHJSYW5nZSk6IFZhbGlkYXRl
cyBvZmZzZXQgdG8gcHJvdGVjdCBmcm9tIGJ1ZmZlciBvdmVycnVuIGluIGJhZCBmb250cworICAg
ICAgICAoV2ViQ29yZTo6T1RQdHJSYW5nZTo6YXNzZXJ0SXNUcnVlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9UUHRyUmFuZ2U6OmlzVmFsaWRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6T1RUYWJsZTo6
cHRyKToKKyAgICAgICAgKE9USGhlYVRhYmxlKTogT3BlblR5cGUgJ2hoZWEnIHRhYmxlCisgICAg
ICAgIChPVFZoZWFUYWJsZSk6IE9wZW5UeXBlICd2aGVhJyB0YWJsZQorICAgICAgICAoRW50cnkp
OgorICAgICAgICAoT1RWT1JHVGFibGUpOiBPcGVuVHlwZSAnVk9SRycgdGFibGUKKyAgICAgICAg
KFZlcnRPcmlnaW5ZTWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2Fs
RGF0YTo6T3BlblR5cGVWZXJ0aWNhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVW
ZXJ0aWNhbERhdGE6OmFkdmFuY2VIZWlnaHQpOiBBZHZhbmNlIGhlaWdodCBmb3IgYSBnbHlwaAor
ICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmdldFZlcnRpY2FsVHJhbnNs
YXRpb25zRm9yR2x5cGhzKTogVmVydGljYWwgb3JpZ2luCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKE9wZW5UeXBlVmVydGljYWxEYXRhKTogQSBuZXcgY2xhc3MgdG8g
aGFuZGxlIHZlcnRpY2FsIGZsb3cgZGF0YSBpbiBPcGVuVHlwZQorICAgICAgICAoV2ViQ29yZTo6
T3BlblR5cGVWZXJ0aWNhbERhdGE6OmlzT3BlblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6T3Bl
blR5cGVWZXJ0aWNhbERhdGE6Omhhc1ZlcnRpY2FsTWV0cmljcyk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6aGFzVk9SRyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlKTogSW1wbGVt
ZW50cyBvcGVuVHlwZVRhYmxlKCkKKwogMjAxMi0wMy0xMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtq
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSBwcm9qZWN0UXVhZCB0byBh
cHBseSBpbnZlcnNlIG1hcFJlY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4ZDFjMzUwLi5mMWRhNjc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNzA1LDggKzM3MDUsMTEgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVNhbml0
aXplci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlU2FuaXRpemVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVHlwZXMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9FR0xEaXNwbGF5T3BlblZHLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTERpc3BsYXlPcGVuVkcu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0VHTFV0aWxzLmgnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAyMTZi
ZmY1Li5mZDY5N2E5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtMjkwNzIsNiArMjkwNzIsMTAgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgog
CQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVu
dHlwZVxPcGVuVHlwZVR5cGVzLmgiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUK
IAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5
cGVVdGlsaXRpZXMuY3BwIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CkBAIC0yOTA4MCw2ICsyOTA4
NCwxNCBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBlVmVydGljYWxEYXRh
LmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVZlcnRpY2FsRGF0YS5o
IgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxSZWZDb3VudGVkR0RJSGFuZGxlLmgiCiAJCQkJCQk+
CiAJCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2d5cC9XZWJDb3JlLmd5
cCBiL1NvdXJjZS9XZWJDb3JlL2d5cC9XZWJDb3JlLmd5cAppbmRleCA2MWZiM2NjLi41ZGExNTM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNl
L1dlYkNvcmUvZ3lwL1dlYkNvcmUuZ3lwCkBAIC05NCw3ICs5NCw5IEBACiAgICAgICAgICMgRklY
TUU6IENvbnNpZGVyIGV4Y2x1ZGluZyBHTCBhcyBhIHN1ZmZpeC4KICAgICAgICAgWydleGNsdWRl
JywgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlXFwuY3BwJCddLAogICAgICAgICBbJ2V4
Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTFxcLmNwcCQn
XSwKKyAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlVHlwZXNcXC5oJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXNcXC4oY3BwfGgpJCddLAorICAgICAgICBbJ2V4Y2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGFcXC4o
Y3BwfGgpJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vcG9zaXgvU2hhcmVkQnVm
ZmVyUE9TSVhcXC5jcHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS90ZXh0L0h5
cGhlbmF0aW9uXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9M
b2NhbGl6ZWROdW1iZXJJQ1VcXC5jcHAkJ10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggOTRjNmMwMS4uYTQxZTVmZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3Jt
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaApAQCAtMjc2LDYgKzI3NiwyMSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyNp
ZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKKyAgICB2b2lkKiBvcGVuVHlwZVRhYmxlKHVpbnQz
Ml90IHRhYmxlLCBzaXplX3QqID0gMCkgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IFBhc3NPd25QdHI8VD4gb3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSwgc2l6ZV90KiBzaXpl
ID0gMCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBzaXplVG1wOworICAgICAgICBpZiAo
IXNpemUpCisgICAgICAgICAgICBzaXplID0gJnNpemVUbXA7CisgICAgICAgIE93blB0cjxUPiBk
YXRhID0gYWRvcHRQdHIocmVpbnRlcnByZXRfY2FzdDxUKj4ob3BlblR5cGVUYWJsZSh0YWJsZSwg
c2l6ZSkpKTsKKyAgICAgICAgaWYgKGRhdGEgJiYgKnNpemUgPCBzaXplb2YoVCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICJCcm9rZW4gZm9udCB0YWJsZSBpZ25v
cmVkLCBzaXplICVkIDwgbWluICVkIiwgKnNpemUsIHNpemVvZihUKSk7CisgICAgICAgICAgICBk
YXRhLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwor
ICAgIH0KKyNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwogICAgIFN0cmluZyBkZXNjcmlwdGlvbigp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmgKaW5kZXggZGQ4NmYwMDQuLmZkMmZmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtMTE4LDYgKzExOCw3IEBA
IHB1YmxpYzoKIAogICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIHsgcmV0dXJuIG1fZm9u
dE1ldHJpY3M7IH0KICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnRNZXRyaWNzOyB9CisgICAgZmxvYXQgc2l6ZVBlclVuaXQoKSBjb25zdCB7
IHJldHVybiBwbGF0Zm9ybURhdGEoKS5zaXplKCkgLyAoZm9udE1ldHJpY3MoKS51bml0c1BlckVt
KCkgPyBmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA6IDEpOyB9CiAgICAgCiAgICAgZmxvYXQg
bWF4Q2hhcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhDaGFyV2lkdGg7IH0KICAgICB2b2lk
IHNldE1heENoYXJXaWR0aChmbG9hdCBtYXhDaGFyV2lkdGgpIHsgbV9tYXhDaGFyV2lkdGggPSBt
YXhDaGFyV2lkdGg7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43YjkyYWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oCkBAIC0wLDAgKzEsNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEtvamkgSXNo
aWkgPGtvamlpc2hpQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT3BlblR5cGVUeXBl
c19oCisjZGVmaW5lIE9wZW5UeXBlVHlwZXNfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
cnVjdCBCaWdFbmRpYW5TaG9ydCB7CisgICAgb3BlcmF0b3Igc2hvcnQoKSBjb25zdCB7IHJldHVy
biAodiAmIDB4MDBmZikgPDwgOCB8IHYgPj4gODsgfQorICAgIEJpZ0VuZGlhblNob3J0KHNob3J0
IHUpIDogdigodSAmIDB4MDBmZikgPDwgOCB8IHUgPj4gOCkgeyB9CisgICAgdW5zaWduZWQgc2hv
cnQgdjsKK307CisKK3N0cnVjdCBCaWdFbmRpYW5VU2hvcnQgeworICAgIG9wZXJhdG9yIHVuc2ln
bmVkIHNob3J0KCkgY29uc3QgeyByZXR1cm4gKHYgJiAweDAwZmYpIDw8IDggfCB2ID4+IDg7IH0K
KyAgICBCaWdFbmRpYW5VU2hvcnQodW5zaWduZWQgc2hvcnQgdSkgOiB2KCh1ICYgMHgwMGZmKSA8
PCA4IHwgdSA+PiA4KSB7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCB2OworfTsKKworc3RydWN0IEJp
Z0VuZGlhbkxvbmcgeworICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuICh2ICYgMHhm
ZikgPDwgMjQgfCAodiAmIDB4ZmYwMCkgPDwgOCB8ICh2ICYgMHhmZjAwMDApID4+IDggfCB2ID4+
IDI0OyB9CisgICAgQmlnRW5kaWFuTG9uZyhpbnQgdSkgOiB2KCh1ICYgMHhmZikgPDwgMjQgfCAo
dSAmIDB4ZmYwMCkgPDwgOCB8ICh1ICYgMHhmZjAwMDApID4+IDggfCB1ID4+IDI0KSB7IH0KKyAg
ICB1bnNpZ25lZCB2OworfTsKKworc3RydWN0IEJpZ0VuZGlhblVMb25nIHsKKyAgICBvcGVyYXRv
ciB1bnNpZ25lZCgpIGNvbnN0IHsgcmV0dXJuICh2ICYgMHhmZikgPDwgMjQgfCAodiAmIDB4ZmYw
MCkgPDwgOCB8ICh2ICYgMHhmZjAwMDApID4+IDggfCB2ID4+IDI0OyB9CisgICAgQmlnRW5kaWFu
VUxvbmcodW5zaWduZWQgdSkgOiB2KCh1ICYgMHhmZikgPDwgMjQgfCAodSAmIDB4ZmYwMCkgPDwg
OCB8ICh1ICYgMHhmZjAwMDApID4+IDggfCB1ID4+IDI0KSB7IH0KKyAgICB1bnNpZ25lZCB2Owor
fTsKKwordHlwZWRlZiBCaWdFbmRpYW5TaG9ydCBPVEludDE2OwordHlwZWRlZiBCaWdFbmRpYW5V
U2hvcnQgT1RVSW50MTY7Cit0eXBlZGVmIEJpZ0VuZGlhbkxvbmcgT1RJbnQzMjsKK3R5cGVkZWYg
QmlnRW5kaWFuVUxvbmcgT1RVSW50MzI7CisKK3R5cGVkZWYgT1RVSW50MzIgT1RGaXhlZDsKK3R5
cGVkZWYgT1RVSW50MTYgT1RPZmZzZXQ7Cit0eXBlZGVmIE9UVUludDE2IE9UR2x5cGhJRDsKK3R5
cGVkZWYgdWludDMyX3QgT1RUYWc7CisjZGVmaW5lIE9UX01BS0VfVEFHKGNoMSwgY2gyLCBjaDMs
IGNoNCkgKCgoKHVpbnQzMl90KShjaDQpKSA8PCAyNCkgfCAoKCh1aW50MzJfdCkoY2gzKSkgPDwg
MTYpIHwgKCgodWludDMyX3QpKGNoMikpIDw8IDgpIHwgKCh1aW50MzJfdCkoY2gxKSkpCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE9wZW5UeXBlVHlwZXNfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVVdGlsaXRpZXMuY3BwCmluZGV4IDZhZmUzZDkuLjM0MmRmZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVXRpbGl0
aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9P
cGVuVHlwZVV0aWxpdGllcy5jcHAKQEAgLTMxLDE4ICszMSw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7IAotICAgIG9wZXJhdG9yIHVuc2lnbmVk
IHNob3J0KCkgY29uc3QgeyByZXR1cm4gKHYgJiAweDAwZmYpIDw8IDggfCB2ID4+IDg7IH0KLSAg
ICBCaWdFbmRpYW5VU2hvcnQodW5zaWduZWQgc2hvcnQgdSkgOiB2KCh1ICYgMHgwMGZmKSA8PCA4
IHwgdSA+PiA4KSB7IH0KLSAgICB1bnNpZ25lZCBzaG9ydCB2OwotfTsKLQotc3RydWN0IEJpZ0Vu
ZGlhblVMb25nIHsgCi0gICAgb3BlcmF0b3IgdW5zaWduZWQoKSBjb25zdCB7IHJldHVybiAodiAm
IDB4ZmYpIDw8IDI0IHwgKHYgJiAweGZmMDApIDw8IDggfCAodiAmIDB4ZmYwMDAwKSA+PiA4IHwg
diA+PiAyNDsgfQotICAgIEJpZ0VuZGlhblVMb25nKHVuc2lnbmVkIHUpIDogdigodSAmIDB4ZmYp
IDw8IDI0IHwgKHUgJiAweGZmMDApIDw8IDggfCAodSAmIDB4ZmYwMDAwKSA+PiA4IHwgdSA+PiAy
NCkgeyB9Ci0gICAgdW5zaWduZWQgdjsKLX07Ci0KICNwcmFnbWEgcGFjaygxKQogCiBzdHJ1Y3Qg
RU9UUHJlZml4IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5oCmluZGV4IGY4ZTg3ODcuLjBmMjYy
MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuaApAQCAtMjcsMTMgKzI3LDEzIEBACiAjaWZu
ZGVmIE9wZW5UeXBlVXRpbGl0aWVzX2gKICNkZWZpbmUgT3BlblR5cGVVdGlsaXRpZXNfaAogCisj
aW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RydWN0IEJpZ0VuZGlhblVTaG9ydDsKIHN0cnVjdCBFT1RQcmVmaXg7
CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDkxZGFmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVWZXJ0aWNhbERhdGEuY3BwCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBLb2ppIElzaGlpIDxrb2ppaXNoaUBnbWFpbC5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3BlblR5cGVW
ZXJ0aWNhbERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdseXBo
UGFnZS5oIgorI2luY2x1ZGUgIk9wZW5UeXBlVHlwZXMuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0geworICAgIE9USGhlYVRhZyA9IE9UX01BS0VfVEFHKCdoJywgJ2gnLCAnZScsICdhJyks
CisgICAgT1RIbXR4VGFnID0gT1RfTUFLRV9UQUcoJ2gnLCAnbScsICd0JywgJ3gnKSwKKyAgICBP
VFZoZWFUYWcgPSBPVF9NQUtFX1RBRygndicsICdoJywgJ2UnLCAnYScpLAorICAgIE9UVm10eFRh
ZyA9IE9UX01BS0VfVEFHKCd2JywgJ20nLCAndCcsICd4JyksCisgICAgT1RWT1JHVGFnID0gT1Rf
TUFLRV9UQUcoJ1YnLCAnTycsICdSJywgJ0cnKSwKK307CisKKyNwcmFnbWEgcGFjaygxKQorCitz
dHJ1Y3QgT1RIaGVhVGFibGUgeworICAgIE9URml4ZWQgdmVyc2lvbjsKKyAgICBPVEludDE2IGFz
Y2VuZGVyOworICAgIE9USW50MTYgZGVzY2VuZGVyOworICAgIE9USW50MTYgbGluZUdhcDsKKyAg
ICBPVEludDE2IGFkdmFuY2VXaWR0aE1heDsKKyAgICBPVEludDE2IG1pbkxlZnRTaWRlQmVhcmlu
ZzsKKyAgICBPVEludDE2IG1pblJpZ2h0U2lkZUJlYXJpbmc7CisgICAgT1RJbnQxNiB4TWF4RXh0
ZW50OworICAgIE9USW50MTYgY2FyZXRTbG9wZVJpc2U7CisgICAgT1RJbnQxNiBjYXJldFNsb3Bl
UnVuOworICAgIE9USW50MTYgY2FyZXRPZmZzZXQ7CisgICAgT1RJbnQxNiByZXNlcnZlZFs0XTsK
KyAgICBPVEludDE2IG1ldHJpY0RhdGFGb3JtYXQ7CisgICAgT1RVSW50MTYgbnVtYmVyT2ZITWV0
cmljczsKK307CisKK3N0cnVjdCBPVFZoZWFUYWJsZSB7CisgICAgT1RGaXhlZCB2ZXJzaW9uOwor
ICAgIE9USW50MTYgYXNjZW50OworICAgIE9USW50MTYgZGVzY2VudDsKKyAgICBPVEludDE2IGxp
bmVHYXA7CisgICAgT1RJbnQxNiBhZHZhbmNlSGVpZ2h0TWF4OworICAgIE9USW50MTYgbWluVG9w
U2lkZUJlYXJpbmc7CisgICAgT1RJbnQxNiBtaW5Cb3R0b21TaWRlQmVhcmluZzsKKyAgICBPVElu
dDE2IHlNYXhFeHRlbnQ7CisgICAgT1RJbnQxNiBjYXJldFNsb3BlUmlzZTsKKyAgICBPVEludDE2
IGNhcmV0U2xvcGVSdW47CisgICAgT1RJbnQxNiBjYXJldE9mZnNldDsKKyAgICBPVEludDE2IHJl
c2VydmVkWzRdOworICAgIE9USW50MTYgbWV0cmljRGF0YUZvcm1hdDsKKyAgICBPVFVJbnQxNiBu
dW1PZkxvbmdWZXJNZXRyaWNzOworfTsKKworc3RydWN0IE9USG10eFRhYmxlIHsKKyAgICBzdHJ1
Y3QgRW50cnkgeworICAgICAgICBPVFVJbnQxNiBhZHZhbmNlV2lkdGg7CisgICAgICAgIE9USW50
MTYgbHNiOworICAgIH0gZW50cmllc1sxXTsKK307CisKK3N0cnVjdCBPVFZtdHhUYWJsZSB7Cisg
ICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgT1RVSW50MTYgYWR2YW5jZUhlaWdodDsKKyAgICAg
ICAgT1RJbnQxNiB0b3BTaWRlQmVhcmluZzsKKyAgICB9IGVudHJpZXNbMV07Cit9OworCitzdHJ1
Y3QgT1RWT1JHVGFibGUgeworICAgIE9UVUludDE2IG1ham9yVmVyc2lvbjsKKyAgICBPVFVJbnQx
NiBtaW5vclZlcnNpb247CisgICAgT1RJbnQxNiBkZWZhdWx0VmVydE9yaWdpblk7CisgICAgT1RV
SW50MTYgbnVtVmVydE9yaWdpbllNZXRyaWNzOworICAgIHN0cnVjdCBWZXJ0T3JpZ2luWU1ldHJp
Y3MgeworICAgICAgICBPVFVJbnQxNiBnbHlwaEluZGV4OworICAgICAgICBPVEludDE2IHZlcnRP
cmlnaW5ZOworICAgIH0gdmVydE9yaWdpbllNZXRyaWNzWzFdOworfTsKKworI3ByYWdtYSBwYWNr
KCkKKworT3BlblR5cGVWZXJ0aWNhbERhdGE6Ok9wZW5UeXBlVmVydGljYWxEYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKKyAgICA6IG1fZGVmYXVsdFZlcnRPcmlnaW5Z
KDApCit7CisgICAgLy8gTG9hZCBoaGVhIGFuZCBobXR4IHRvIGdldCB4LWNvbXBvbmVudCBvZiB2
ZXJ0aWNhbCBvcmlnaW5zLgorICAgIC8vIElmIHRoZXNlIHRhYmxlcyBhcmUgbWlzc2luZywgaXQn
cyBub3QgYW4gT3BlblR5cGUgZm9udC4KKyAgICBPd25QdHI8T1RIaGVhVGFibGU+IGhoZWEocGxh
dGZvcm1EYXRhLm9wZW5UeXBlVGFibGU8T1RIaGVhVGFibGU+KE9USGhlYVRhZykpOworICAgIGlm
ICghaGhlYSkKKyAgICAgICAgcmV0dXJuOworICAgIHVpbnQxNl90IGNIbXR4RW50cmllcyA9IGho
ZWEtPm51bWJlck9mSE1ldHJpY3M7CisgICAgaWYgKCFjSG10eEVudHJpZXMpCisgICAgICAgIHJl
dHVybjsKKyAgICBoaGVhLmNsZWFyKCk7CisKKyAgICBPd25QdHI8T1RIbXR4VGFibGU+IGhtdHgo
cGxhdGZvcm1EYXRhLm9wZW5UeXBlVGFibGU8T1RIbXR4VGFibGU+KE9USG10eFRhZykpOworICAg
IGlmICghaG10eCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYWR2YW5jZVdpZHRocy5yZXNpemUo
Y0htdHhFbnRyaWVzKTsKKyAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgY0htdHhFbnRyaWVz
OyArK2kpCisgICAgICAgIG1fYWR2YW5jZVdpZHRoc1tpXSA9IGhtdHgtPmVudHJpZXNbaV0uYWR2
YW5jZVdpZHRoOworICAgIGhtdHguY2xlYXIoKTsKKworICAgIE93blB0cjxPVFZoZWFUYWJsZT4g
dmhlYShwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZTxPVFZoZWFUYWJsZT4oT1RWaGVhVGFnKSk7
CisgICAgaWYgKHZoZWEpIHsKKyAgICAgICAgdWludDE2X3QgY1ZtdHhFbnRyaWVzID0gdmhlYS0+
bnVtT2ZMb25nVmVyTWV0cmljczsKKyAgICAgICAgdmhlYS5jbGVhcigpOworCisgICAgICAgIC8v
IExvYWQgVk9SRy4gVGhpcyB0YWJsZSBpcyBvcHRpb25hbC4KKyAgICAgICAgT3duUHRyPE9UVk9S
R1RhYmxlPiB2b3JnKHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlPE9UVk9SR1RhYmxlPihPVFZP
UkdUYWcpKTsKKyAgICAgICAgaWYgKHZvcmcpIHsKKyAgICAgICAgICAgIG1fZGVmYXVsdFZlcnRP
cmlnaW5ZID0gdm9yZy0+ZGVmYXVsdFZlcnRPcmlnaW5ZOworICAgICAgICAgICAgdWludDE2X3Qg
Y1ZlcnRPcmlnaW5ZTWV0cmljcyA9IHZvcmctPm51bVZlcnRPcmlnaW5ZTWV0cmljczsKKyAgICAg
ICAgICAgIGlmICghY1ZlcnRPcmlnaW5ZTWV0cmljcykgeworICAgICAgICAgICAgICAgIC8vIEFk
ZCBvbmUgZW50cnkgc28gdGhhdCBoYXNWT1JHKCkgYmVjb21lcyB0cnVlCisgICAgICAgICAgICAg
ICAgbV92ZXJ0T3JpZ2luWS5zZXQoMCwgbV9kZWZhdWx0VmVydE9yaWdpblkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgY1Zl
cnRPcmlnaW5ZTWV0cmljczsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9UVk9S
R1RhYmxlOjpWZXJ0T3JpZ2luWU1ldHJpY3MmIG1ldHJpY3MgPSB2b3JnLT52ZXJ0T3JpZ2luWU1l
dHJpY3NbaV07CisgICAgICAgICAgICAgICAgICAgIG1fdmVydE9yaWdpblkuc2V0KG1ldHJpY3Mu
Z2x5cGhJbmRleCwgbWV0cmljcy52ZXJ0T3JpZ2luWSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdm9yZy5jbGVhcigpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGNWbXR4RW50cmllcykgeworICAgICAgICAgICAgc2l6ZV90IHZtdHhTaXplOworICAg
ICAgICAgICAgT3duUHRyPE9UVm10eFRhYmxlPiB2bXR4KHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRh
YmxlPE9UVm10eFRhYmxlPihPVFZtdHhUYWcsICZ2bXR4U2l6ZSkpOworICAgICAgICAgICAgaWYg
KHZtdHgpIHsKKyAgICAgICAgICAgICAgICBtX2FkdmFuY2VIZWlnaHRzLnJlc2l6ZShjVm10eEVu
dHJpZXMpOworICAgICAgICAgICAgICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBjVm10eEVu
dHJpZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9hZHZhbmNlSGVpZ2h0c1tpXSA9IHZt
dHgtPmVudHJpZXNbaV0uYWR2YW5jZUhlaWdodDsKKworICAgICAgICAgICAgICAgIC8vIFZPUkcg
aXMgcHJlZmVycmVkIHdheSB0byBjYWxjdWxhdGUgdmlydGljYWwgb3JpZ2luIHRoYW4gdm10eCwK
KyAgICAgICAgICAgICAgICAvLyBzbyBsb2FkIHRvcFNpZGVCZWFyaW5nIGZyb20gdm10eCBvbmx5
IGlmIFZPUkcgaXMgbWlzc2luZy4KKyAgICAgICAgICAgICAgICBpZiAoIWhhc1ZPUkcoKSkgewor
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZUV4dHJhID0gdm10eFNpemUgLSAoc2l6ZW9m
KE9UVm10eFRhYmxlOjpFbnRyeSkgKiBjVm10eEVudHJpZXMpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoIShzaXplRXh0cmEgJSBzaXplb2YoT1RJbnQxNikpKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGNUb3BTaWRlQmVhcmluZ3MgPSBjVm10eEVudHJpZXMgKyBzaXplRXh0cmEg
LyBzaXplb2YoT1RJbnQxNik7CisgICAgICAgICAgICAgICAgICAgIG1fdG9wU2lkZUJlYXJpbmdz
LnJlc2l6ZShjVG9wU2lkZUJlYXJpbmdzKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGkg
PSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGNWbXR4RW50cmllczsgKytpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV90b3BTaWRlQmVhcmluZ3NbaV0gPSB2bXR4LT5lbnRy
aWVzW2ldLnRvcFNpZGVCZWFyaW5nOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGNUb3BT
aWRlQmVhcmluZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9USW50MTYqIHBUb3BTaWRl
QmVhcmluZ3NFeHRyYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8T1RJbnQxNio+KCZ2bXR4LT5lbnRyaWVz
W2NWbXR4RW50cmllc10pOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBjVG9w
U2lkZUJlYXJpbmdzOyArK2ksICsrcFRvcFNpZGVCZWFyaW5nc0V4dHJhKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdG9wU2lkZUJlYXJpbmdzW2ldID0gKnBUb3BTaWRlQmVhcmluZ3NF
eHRyYTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB2bXR4LmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Zsb2F0IE9wZW5UeXBlVmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBzaXplX3QgY291bnRI
ZWlnaHRzID0gbV9hZHZhbmNlSGVpZ2h0cy5zaXplKCk7CisgICAgaWYgKGNvdW50SGVpZ2h0cykg
eworICAgICAgICB1aW50MTZfdCBhZHZhbmNlRlVuaXQgPSBtX2FkdmFuY2VIZWlnaHRzW2dseXBo
IDwgY291bnRIZWlnaHRzID8gZ2x5cGggOiBjb3VudEhlaWdodHMgLSAxXTsKKyAgICAgICAgZmxv
YXQgYWR2YW5jZSA9IGFkdmFuY2VGVW5pdCAqIGZvbnQtPnNpemVQZXJVbml0KCk7CisgICAgICAg
IHJldHVybiBhZHZhbmNlOworICAgIH0KKworICAgIC8vIE5vIHZlcnRpY2FsIGluZm8gaW4gdGhl
IGZvbnQgZmlsZTsgdXNlIGhlaWdodCBhcyBhZHZhbmNlLgorICAgIHJldHVybiBmb250LT5mb250
TWV0cmljcygpLmhlaWdodCgpOworfQorCit2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpnZXRW
ZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwg
Y29uc3QgR2x5cGgqIGdseXBocywgc2l6ZV90IGNvdW50LCBmbG9hdCogb3V0WFlBcnJheSkgY29u
c3QKK3sKKyAgICBzaXplX3QgY291bnRXaWR0aHMgPSBtX2FkdmFuY2VXaWR0aHMuc2l6ZSgpOwor
ICAgIEFTU0VSVChjb3VudFdpZHRocyA+IDApOworICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBtZXRy
aWNzID0gZm9udC0+Zm9udE1ldHJpY3MoKTsKKyAgICBmbG9hdCBzaXplUGVyVW5pdCA9IGZvbnQt
PnNpemVQZXJVbml0KCk7CisgICAgZmxvYXQgYXNjZW50ID0gbWV0cmljcy5hc2NlbnQoKTsKKyAg
ICBib29sIHVzZVZPUkcgPSBoYXNWT1JHKCk7CisgICAgc2l6ZV90IGNvdW50VG9wU2lkZUJlYXJp
bmdzID0gbV90b3BTaWRlQmVhcmluZ3Muc2l6ZSgpOworICAgIGZsb2F0IGRlZmF1bHRWZXJ0T3Jp
Z2luWSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICBmb3Ig
KGZsb2F0KiBlbmQgPSAmKG91dFhZQXJyYXlbY291bnQgKiAyXSk7IG91dFhZQXJyYXkgIT0gZW5k
OyArK2dseXBocywgb3V0WFlBcnJheSArPSAyKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gKmds
eXBoczsKKyAgICAgICAgdWludDE2X3Qgd2lkdGhGVW5pdCA9IG1fYWR2YW5jZVdpZHRoc1tnbHlw
aCA8IGNvdW50V2lkdGhzID8gZ2x5cGggOiBjb3VudFdpZHRocyAtIDFdOworICAgICAgICBmbG9h
dCB3aWR0aCA9IHdpZHRoRlVuaXQgKiBzaXplUGVyVW5pdDsKKyAgICAgICAgb3V0WFlBcnJheVsw
XSA9IC13aWR0aCAvIDI7CisKKyAgICAgICAgLy8gRm9yIFksIHRyeSBWT1JHIGZpcnN0LgorICAg
ICAgICBpZiAodXNlVk9SRykgeworICAgICAgICAgICAgaW50MTZfdCB2ZXJ0T3JpZ2luWUZVbml0
ID0gbV92ZXJ0T3JpZ2luWS5nZXQoZ2x5cGgpOworICAgICAgICAgICAgaWYgKHZlcnRPcmlnaW5Z
RlVuaXQpIHsKKyAgICAgICAgICAgICAgICBvdXRYWUFycmF5WzFdID0gLXZlcnRPcmlnaW5ZRlVu
aXQgKiBzaXplUGVyVW5pdDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChpc25hbihkZWZhdWx0VmVydE9yaWdpblkpKQorICAgICAgICAg
ICAgICAgIGRlZmF1bHRWZXJ0T3JpZ2luWSA9IC1tX2RlZmF1bHRWZXJ0T3JpZ2luWSAqIHNpemVQ
ZXJVbml0OworICAgICAgICAgICAgb3V0WFlBcnJheVsxXSA9IGRlZmF1bHRWZXJ0T3JpZ2luWTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgbm8gVk9S
RywgdHJ5IHZtdHggbmV4dC4KKyAgICAgICAgaWYgKGNvdW50VG9wU2lkZUJlYXJpbmdzKSB7Cisg
ICAgICAgICAgICBpbnQxNl90IHRvcFNpZGVCZWFyaW5nRlVuaXQgPSBtX3RvcFNpZGVCZWFyaW5n
c1tnbHlwaCA8IGNvdW50VG9wU2lkZUJlYXJpbmdzID8gZ2x5cGggOiBjb3VudFRvcFNpZGVCZWFy
aW5ncyAtIDFdOworICAgICAgICAgICAgZmxvYXQgdG9wU2lkZUJlYXJpbmcgPSB0b3BTaWRlQmVh
cmluZ0ZVbml0ICogc2l6ZVBlclVuaXQ7CisgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0g
Zm9udC0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgb3V0WFlBcnJheVsxXSA9
IGJvdW5kcy55KCkgLSB0b3BTaWRlQmVhcmluZzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gTm8gdmVydGljYWwgaW5mbyBpbiB0aGUgZm9udCBmaWxlOyB1
c2UgYXNjZW50IGFzIHZlcnRpY2FsIG9yaWdpbi4KKyAgICAgICAgb3V0WFlBcnJheVsxXSA9IC1h
c2NlbnQ7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2Fs
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVWZXJ0aWNhbERhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njdi
M2VmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaApAQCAtMCwwICsxLDYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBLb2ppIElzaGlpIDxrb2pp
aXNoaUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9wZW5UeXBlVmVydGljYWxEYXRh
X2gKKyNkZWZpbmUgT3BlblR5cGVWZXJ0aWNhbERhdGFfaAorCisjaW5jbHVkZSAiR2x5cGguaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhOworY2xhc3MgR2x5cGhQ
YWdlOworY2xhc3MgU2ltcGxlRm9udERhdGE7CisKK2NsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRh
IHsKK3B1YmxpYzoKKyAgICBPcGVuVHlwZVZlcnRpY2FsRGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJik7CisKKyAgICBib29sIGlzT3BlblR5cGUoKSBjb25zdCB7IHJldHVybiAhbV9hZHZhbmNl
V2lkdGhzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzVmVydGljYWxNZXRyaWNzKCkgY29uc3Qg
eyByZXR1cm4gIW1fYWR2YW5jZUhlaWdodHMuaXNFbXB0eSgpOyB9CisgICAgZmxvYXQgYWR2YW5j
ZUhlaWdodChjb25zdCBTaW1wbGVGb250RGF0YSosIEdseXBoKSBjb25zdDsKKyAgICB2b2lkIGdl
dFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29u
c3QgR2x5cGgqLCBzaXplX3QsIGZsb2F0KiBvdXRYWUFycmF5KSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBib29sIGhhc1ZPUkcoKSBjb25zdCB7IHJldHVybiAhbV92ZXJ0T3JpZ2luWS5pc0VtcHR5
KCk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8dWludDE2X3Q+IG1fYWR2YW5jZVdpZHRoczsK
KyAgICBWZWN0b3I8dWludDE2X3Q+IG1fYWR2YW5jZUhlaWdodHM7CisgICAgVmVjdG9yPGludDE2
X3Q+IG1fdG9wU2lkZUJlYXJpbmdzOworICAgIGludDE2X3QgbV9kZWZhdWx0VmVydE9yaWdpblk7
CisgICAgSGFzaE1hcDxHbHlwaCwgaW50MTZfdD4gbV92ZXJ0T3JpZ2luWTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE9wZW5UeXBlVmVydGljYWxEYXRhX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZv
cm1EYXRhV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
UGxhdGZvcm1EYXRhV2luLmNwcAppbmRleCA5ODYwZGY2Li4zMjY3N2ZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFXaW4uY3BwCkBAIC03NCw2ICs3NCwyOSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcQog
ICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKIH0KIAorI2lmIFVTRShDRykKK3ZvaWQqIEZvbnRQbGF0
Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUsIHNpemVfdCogc2l6ZSkgY29u
c3QKK3sKKyAgICBIV25kREMgaGRjKDApOworICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9i
amVjdChoZGMsIGhmb250KCkpOworCisgICAgRFdPUkQgY2IgPSBHZXRGb250RGF0YShoZGMsIHRh
YmxlLCAwLCAwLCAwKTsKKyAgICB2b2lkKiBkYXRhOworICAgIGlmIChjYiA9PSBHRElfRVJST1Ip
CisgICAgICAgIGRhdGEgPSAwOworICAgIGVsc2UgeworICAgICAgICBkYXRhID0gbmV3IHVpbnQ4
X3RbY2JdOworICAgICAgICBEV09SRCByZXN1bHQgPSBHZXRGb250RGF0YShoZGMsIHRhYmxlLCAw
LCBkYXRhLCBjYik7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gY2IpOworICAgICAgICBpZiAo
c2l6ZSkKKyAgICAgICAgICAgICpzaXplID0gcmVzdWx0OworICAgIH0KKworICAgIFNlbGVjdE9i
amVjdChoZGMsIG9sZEZvbnQpOworICAgIHJldHVybiBkYXRhOworfQorI2VuZGlmCisKICNpZm5k
ZWYgTkRFQlVHCiBTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAog
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132470</attachid>
            <date>2012-03-17 13:00:27 -0700</date>
            <delta_ts>2012-03-18 14:37:40 -0700</delta_ts>
            <desc>OpenTypeVerticalData class and its related changes</desc>
            <filename>81326-4.patch</filename>
            <type>text/plain</type>
            <size>21867</size>
            <attacher name="Koji Ishii">kojii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYzY2MzkxLi42Y2ZiNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYg
QEAKKzIwMTItMDMtMTYgIEtvamkgSXNoaWkgIDxrb2ppaXNoaUBnbWFpbC5jb20+CisKKyAgICAg
ICAgVmVydGljYWwgZmxvdyBzdXBwb3J0IGZvciBPcGVuVHlwZSBmb250cyB3aXRoIHRoZSBsZWFz
dCBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxMzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIE9wZW5UeXBl
VmVydGljYWxEYXRhIHRvIHJlYWQKKyAgICAgICAgdmVydGljYWwgZm9udCBtZXRyaWNzIGZyb20g
T3BlblR5cGUgZm9udHMuCisKKyAgICAgICAgQ3VycmVudGx5LCBXZWJLaXQgcmVsaWVzIG9uIHBs
YXRvcm0gQVBJcyB0byBkbyB0aGUgd29yay4gSG93ZXZlciwKKyAgICAgICAgc29tZSBwbGF0Zm9y
bXMgc3VjaCBhcyBXaW5kb3dzIGxhY2sgc3VwcG9ydCBmb3IgYWxsIHRoZSBjYXBhYmlsaXRpZXMK
KyAgICAgICAgV2ViS2l0IHJlcXVpcmVzIGZvciB2ZXJ0aWNhbCBmbG93IGFuZCB0aGUgdGV4dC1v
cmllbnRhdGlvbiBwcm9wZXJ0eQorICAgICAgICB0byB3b3JrIGNvcnJlY3RseS4gUmVhZGluZyBP
cGVuVHlwZSB0YWJsZXMgZGlyZWN0bHkgYWxzbyBnaXZlcworICAgICAgICBiZW5lZml0cyBpbiBj
b25zaXN0ZW50IGJlaGF2aW9yIGFtb25nIHRoZSBXZWJLaXQgcGxhdGZvcm1zLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaXMgZm9yIGFueSBwbGF0Zm9ybXMgdGhhdCB3YW50cyB0byBwYXJzZSBPcGVu
VHlwZSB0YWJsZXMKKyAgICAgICAgZGlyZWN0bHksIGJ1dCBpdCdzIGN1cnJlbnRseSBpbmNsdWRl
ZCBvbmx5IGluIENHV2luIGFuZCBpc24ndCBvbiBhbnkKKyAgICAgICAgY29kZSBwYXRoIGV2ZW4g
b24gQ0dXaW4geWV0LiBDYWxsZXIncyBzaWRlIGNoYW5nZSBmb3IgQ0dXaW4gYW5kCisgICAgICAg
IHN1cHBvcnQgZm9yIG90aGVyIHBsYXRmcm9tcyB3aWxsIGJlIGluIHNlcGFyYXRlIGJ1Z3MuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSByZXF1aXJlZC4gTm8gYmVoYXZpb3IgY2hhbmdlcy4K
KworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgT3BlblR5cGVU
eXBlcy5oIGFuZCBPcGVuVHlwZVZlcnRpY2FsRGF0YS5oL2NwcAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkIG9wZW5UeXBlVGFibGUoKQorICAgICAg
ICAoRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpvcGVuVHlwZVRhYmxlKTogcGxhdGZvcm0gQVBJIHRvIHJlYWQgT3BlblR5cGUgdGFibGVzCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDogQWRkIHNpemVQZXJV
bml0KCkKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzaXplUGVyVW5pdCk6IHNp
emUoKSAvIHVuaXRzUGVyRW0oKSBmb3IgbGVzcyBtdWx0aXBsaWNhdGlvbgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaDogT3BlblR5cGUgYmFzaWMg
dHlwZSBkZWZpbml0aW9ucworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpP
VEludDE2OjpvcGVyYXRvciBzaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpPVEludDE2OjpPVElu
dDE2KToKKyAgICAgICAgKE9USW50MTYpOgorICAgICAgICAoV2ViQ29yZTo6T1RVSW50MTY6Om9w
ZXJhdG9yIHVuc2lnbmVkIHNob3J0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9UVUludDE2OjpPVFVJ
bnQxNik6CisgICAgICAgIChPVFVJbnQxNik6CisgICAgICAgIChXZWJDb3JlOjpPVEludDMyOjpv
cGVyYXRvciBpbnQpOgorICAgICAgICAoV2ViQ29yZTo6T1RJbnQzMjo6T1RJbnQzMik6CisgICAg
ICAgIChPVEludDMyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9UVUludDMyOjpvcGVyYXRvciB1bnNp
Z25lZCk6CisgICAgICAgIChXZWJDb3JlOjpPVFVJbnQzMjo6T1RVSW50MzIpOgorICAgICAgICAo
T1RVSW50MzIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VmVydGljYWxEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE9U
SGhlYVRhYmxlKTogT3BlblR5cGUgJ2hoZWEnIHRhYmxlCisgICAgICAgIChPVFZoZWFUYWJsZSk6
IE9wZW5UeXBlICd2aGVhJyB0YWJsZQorICAgICAgICAoRW50cnkpOgorICAgICAgICAoT1RWT1JH
VGFibGUpOiBPcGVuVHlwZSAnVk9SRycgdGFibGUKKyAgICAgICAgKFZlcnRPcmlnaW5ZTWV0cmlj
cyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6T3BlblR5cGVWZXJ0
aWNhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFu
Y2VIZWlnaHQpOiBBZHZhbmNlIGhlaWdodCBmb3IgYSBnbHlwaAorICAgICAgICAoV2ViQ29yZTo6
T3BlblR5cGVWZXJ0aWNhbERhdGE6OmdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKTog
VmVydGljYWwgb3JpZ2luCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3Bl
blR5cGVWZXJ0aWNhbERhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KE9wZW5UeXBlVmVydGljYWxEYXRhKTogQSBuZXcgY2xhc3MgdG8gaGFuZGxlIHZlcnRpY2FsIGZs
b3cgZGF0YSBpbiBPcGVuVHlwZQorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERh
dGE6OmlzT3BlblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6
Omhhc1ZlcnRpY2FsTWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2Fs
RGF0YTo6aGFzVk9SRyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0
Zm9ybURhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlKTogSW1wbGVtZW50cyBvcGVuVHlwZVRhYmxl
KCkKKwogMjAxMi0wMy0xMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIFVzZSBwcm9qZWN0UXVhZCB0byBhcHBseSBpbnZlcnNlIG1hcFJl
Y3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
MjE2YmZmNS4uZmQ2OTdhOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTI5MDcyLDYgKzI5MDcyLDEwIEBACiAJCQkJCQk+CiAJCQkJCTwvRmls
ZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
b3BlbnR5cGVcT3BlblR5cGVUeXBlcy5oIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxG
aWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9w
ZW5UeXBlVXRpbGl0aWVzLmNwcCIKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgpAQCAtMjkwODAsNiAr
MjkwODQsMTQgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQorCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVZlcnRpY2Fs
RGF0YS5jcHAiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5cGVWZXJ0aWNhbERh
dGEuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUmVmQ291bnRlZEdESUhhbmRsZS5oIgogCQkJ
CQkJPgogCQkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggOTRjNmMwMS4uYTQxZTVmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApA
QCAtMjc2LDYgKzI3NiwyMSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyNpZiBQTEFURk9S
TShXSU4pICYmIFVTRShDRykKKyAgICB2b2lkKiBvcGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxl
LCBzaXplX3QqID0gMCkgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFBhc3NPd25Q
dHI8VD4gb3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSwgc2l6ZV90KiBzaXplID0gMCkgY29u
c3QKKyAgICB7CisgICAgICAgIHNpemVfdCBzaXplVG1wOworICAgICAgICBpZiAoIXNpemUpCisg
ICAgICAgICAgICBzaXplID0gJnNpemVUbXA7CisgICAgICAgIE93blB0cjxUPiBkYXRhID0gYWRv
cHRQdHIocmVpbnRlcnByZXRfY2FzdDxUKj4ob3BlblR5cGVUYWJsZSh0YWJsZSwgc2l6ZSkpKTsK
KyAgICAgICAgaWYgKGRhdGEgJiYgKnNpemUgPCBzaXplb2YoVCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICJCcm9rZW4gZm9udCB0YWJsZSBpZ25vcmVkLCBzaXpl
ICVkIDwgbWluICVkIiwgKnNpemUsIHNpemVvZihUKSk7CisgICAgICAgICAgICBkYXRhLmNsZWFy
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOworICAgIH0KKyNl
bmRpZgogCiAjaWZuZGVmIE5ERUJVRwogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgK
aW5kZXggZGQ4NmYwMDQuLmZkMmZmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtMTE4LDYgKzExOCw3IEBAIHB1YmxpYzoK
IAogICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7
IH0KICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnRNZXRyaWNzOyB9CisgICAgZmxvYXQgc2l6ZVBlclVuaXQoKSBjb25zdCB7IHJldHVybiBw
bGF0Zm9ybURhdGEoKS5zaXplKCkgLyAoZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCkgPyBmb250
TWV0cmljcygpLnVuaXRzUGVyRW0oKSA6IDEpOyB9CiAgICAgCiAgICAgZmxvYXQgbWF4Q2hhcldp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhDaGFyV2lkdGg7IH0KICAgICB2b2lkIHNldE1heENo
YXJXaWR0aChmbG9hdCBtYXhDaGFyV2lkdGgpIHsgbV9tYXhDaGFyV2lkdGggPSBtYXhDaGFyV2lk
dGg7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zNTc0NTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEtvamkgSXNoaWkgPGtvamlp
c2hpQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT3BlblR5cGVUeXBlc19oCisjZGVm
aW5lIE9wZW5UeXBlVHlwZXNfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBPVElu
dDE2IHsKKyAgICBvcGVyYXRvciBzaG9ydCgpIGNvbnN0IHsgcmV0dXJuICh2ICYgMHgwMGZmKSA8
PCA4IHwgdiA+PiA4OyB9CisgICAgT1RJbnQxNihzaG9ydCB1KSA6IHYoKHUgJiAweDAwZmYpIDw8
IDggfCB1ID4+IDgpIHsgfQorICAgIHVuc2lnbmVkIHNob3J0IHY7Cit9OworCitzdHJ1Y3QgT1RV
SW50MTYgeworICAgIG9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29uc3QgeyByZXR1cm4gKHYg
JiAweDAwZmYpIDw8IDggfCB2ID4+IDg7IH0KKyAgICBPVFVJbnQxNih1bnNpZ25lZCBzaG9ydCB1
KSA6IHYoKHUgJiAweDAwZmYpIDw8IDggfCB1ID4+IDgpIHsgfQorICAgIHVuc2lnbmVkIHNob3J0
IHY7Cit9OworCitzdHJ1Y3QgT1RJbnQzMiB7CisgICAgb3BlcmF0b3IgaW50KCkgY29uc3QgeyBy
ZXR1cm4gKHYgJiAweGZmKSA8PCAyNCB8ICh2ICYgMHhmZjAwKSA8PCA4IHwgKHYgJiAweGZmMDAw
MCkgPj4gOCB8IHYgPj4gMjQ7IH0KKyAgICBPVEludDMyKGludCB1KSA6IHYoKHUgJiAweGZmKSA8
PCAyNCB8ICh1ICYgMHhmZjAwKSA8PCA4IHwgKHUgJiAweGZmMDAwMCkgPj4gOCB8IHUgPj4gMjQp
IHsgfQorICAgIHVuc2lnbmVkIHY7Cit9OworCitzdHJ1Y3QgT1RVSW50MzIgeworICAgIG9wZXJh
dG9yIHVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gKHYgJiAweGZmKSA8PCAyNCB8ICh2ICYgMHhm
ZjAwKSA8PCA4IHwgKHYgJiAweGZmMDAwMCkgPj4gOCB8IHYgPj4gMjQ7IH0KKyAgICBPVFVJbnQz
Mih1bnNpZ25lZCB1KSA6IHYoKHUgJiAweGZmKSA8PCAyNCB8ICh1ICYgMHhmZjAwKSA8PCA4IHwg
KHUgJiAweGZmMDAwMCkgPj4gOCB8IHUgPj4gMjQpIHsgfQorICAgIHVuc2lnbmVkIHY7Cit9Owor
Cit0eXBlZGVmIE9UVUludDMyIE9URml4ZWQ7Cit0eXBlZGVmIE9UVUludDE2IE9UT2Zmc2V0Owor
dHlwZWRlZiBPVFVJbnQxNiBPVEdseXBoSUQ7CisKKyNkZWZpbmUgT1RfTUFLRV9UQUcoY2gxLCBj
aDIsIGNoMywgY2g0KSAoKCgodWludDMyX3QpKGNoNCkpIDw8IDI0KSB8ICgoKHVpbnQzMl90KShj
aDMpKSA8PCAxNikgfCAoKCh1aW50MzJfdCkoY2gyKSkgPDwgOCkgfCAoKHVpbnQzMl90KShjaDEp
KSkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gT3BlblR5cGVUeXBlc19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9P
cGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODQ5MWRhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcApAQCAt
MCwwICsxLDIzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgS29qaSBJc2hpaSA8a29qaWlzaGlAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCisKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKKyNpbmNsdWRlICJPcGVu
VHlwZVR5cGVzLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIHsKKyAgICBPVEhoZWFUYWcg
PSBPVF9NQUtFX1RBRygnaCcsICdoJywgJ2UnLCAnYScpLAorICAgIE9USG10eFRhZyA9IE9UX01B
S0VfVEFHKCdoJywgJ20nLCAndCcsICd4JyksCisgICAgT1RWaGVhVGFnID0gT1RfTUFLRV9UQUco
J3YnLCAnaCcsICdlJywgJ2EnKSwKKyAgICBPVFZtdHhUYWcgPSBPVF9NQUtFX1RBRygndicsICdt
JywgJ3QnLCAneCcpLAorICAgIE9UVk9SR1RhZyA9IE9UX01BS0VfVEFHKCdWJywgJ08nLCAnUics
ICdHJyksCit9OworCisjcHJhZ21hIHBhY2soMSkKKworc3RydWN0IE9USGhlYVRhYmxlIHsKKyAg
ICBPVEZpeGVkIHZlcnNpb247CisgICAgT1RJbnQxNiBhc2NlbmRlcjsKKyAgICBPVEludDE2IGRl
c2NlbmRlcjsKKyAgICBPVEludDE2IGxpbmVHYXA7CisgICAgT1RJbnQxNiBhZHZhbmNlV2lkdGhN
YXg7CisgICAgT1RJbnQxNiBtaW5MZWZ0U2lkZUJlYXJpbmc7CisgICAgT1RJbnQxNiBtaW5SaWdo
dFNpZGVCZWFyaW5nOworICAgIE9USW50MTYgeE1heEV4dGVudDsKKyAgICBPVEludDE2IGNhcmV0
U2xvcGVSaXNlOworICAgIE9USW50MTYgY2FyZXRTbG9wZVJ1bjsKKyAgICBPVEludDE2IGNhcmV0
T2Zmc2V0OworICAgIE9USW50MTYgcmVzZXJ2ZWRbNF07CisgICAgT1RJbnQxNiBtZXRyaWNEYXRh
Rm9ybWF0OworICAgIE9UVUludDE2IG51bWJlck9mSE1ldHJpY3M7Cit9OworCitzdHJ1Y3QgT1RW
aGVhVGFibGUgeworICAgIE9URml4ZWQgdmVyc2lvbjsKKyAgICBPVEludDE2IGFzY2VudDsKKyAg
ICBPVEludDE2IGRlc2NlbnQ7CisgICAgT1RJbnQxNiBsaW5lR2FwOworICAgIE9USW50MTYgYWR2
YW5jZUhlaWdodE1heDsKKyAgICBPVEludDE2IG1pblRvcFNpZGVCZWFyaW5nOworICAgIE9USW50
MTYgbWluQm90dG9tU2lkZUJlYXJpbmc7CisgICAgT1RJbnQxNiB5TWF4RXh0ZW50OworICAgIE9U
SW50MTYgY2FyZXRTbG9wZVJpc2U7CisgICAgT1RJbnQxNiBjYXJldFNsb3BlUnVuOworICAgIE9U
SW50MTYgY2FyZXRPZmZzZXQ7CisgICAgT1RJbnQxNiByZXNlcnZlZFs0XTsKKyAgICBPVEludDE2
IG1ldHJpY0RhdGFGb3JtYXQ7CisgICAgT1RVSW50MTYgbnVtT2ZMb25nVmVyTWV0cmljczsKK307
CisKK3N0cnVjdCBPVEhtdHhUYWJsZSB7CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgT1RV
SW50MTYgYWR2YW5jZVdpZHRoOworICAgICAgICBPVEludDE2IGxzYjsKKyAgICB9IGVudHJpZXNb
MV07Cit9OworCitzdHJ1Y3QgT1RWbXR4VGFibGUgeworICAgIHN0cnVjdCBFbnRyeSB7CisgICAg
ICAgIE9UVUludDE2IGFkdmFuY2VIZWlnaHQ7CisgICAgICAgIE9USW50MTYgdG9wU2lkZUJlYXJp
bmc7CisgICAgfSBlbnRyaWVzWzFdOworfTsKKworc3RydWN0IE9UVk9SR1RhYmxlIHsKKyAgICBP
VFVJbnQxNiBtYWpvclZlcnNpb247CisgICAgT1RVSW50MTYgbWlub3JWZXJzaW9uOworICAgIE9U
SW50MTYgZGVmYXVsdFZlcnRPcmlnaW5ZOworICAgIE9UVUludDE2IG51bVZlcnRPcmlnaW5ZTWV0
cmljczsKKyAgICBzdHJ1Y3QgVmVydE9yaWdpbllNZXRyaWNzIHsKKyAgICAgICAgT1RVSW50MTYg
Z2x5cGhJbmRleDsKKyAgICAgICAgT1RJbnQxNiB2ZXJ0T3JpZ2luWTsKKyAgICB9IHZlcnRPcmln
aW5ZTWV0cmljc1sxXTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKK09wZW5UeXBlVmVydGljYWxE
YXRhOjpPcGVuVHlwZVZlcnRpY2FsRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9y
bURhdGEpCisgICAgOiBtX2RlZmF1bHRWZXJ0T3JpZ2luWSgwKQoreworICAgIC8vIExvYWQgaGhl
YSBhbmQgaG10eCB0byBnZXQgeC1jb21wb25lbnQgb2YgdmVydGljYWwgb3JpZ2lucy4KKyAgICAv
LyBJZiB0aGVzZSB0YWJsZXMgYXJlIG1pc3NpbmcsIGl0J3Mgbm90IGFuIE9wZW5UeXBlIGZvbnQu
CisgICAgT3duUHRyPE9USGhlYVRhYmxlPiBoaGVhKHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxl
PE9USGhlYVRhYmxlPihPVEhoZWFUYWcpKTsKKyAgICBpZiAoIWhoZWEpCisgICAgICAgIHJldHVy
bjsKKyAgICB1aW50MTZfdCBjSG10eEVudHJpZXMgPSBoaGVhLT5udW1iZXJPZkhNZXRyaWNzOwor
ICAgIGlmICghY0htdHhFbnRyaWVzKQorICAgICAgICByZXR1cm47CisgICAgaGhlYS5jbGVhcigp
OworCisgICAgT3duUHRyPE9USG10eFRhYmxlPiBobXR4KHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRh
YmxlPE9USG10eFRhYmxlPihPVEhtdHhUYWcpKTsKKyAgICBpZiAoIWhtdHgpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2FkdmFuY2VXaWR0aHMucmVzaXplKGNIbXR4RW50cmllcyk7CisgICAgZm9y
ICh1aW50MTZfdCBpID0gMDsgaSA8IGNIbXR4RW50cmllczsgKytpKQorICAgICAgICBtX2FkdmFu
Y2VXaWR0aHNbaV0gPSBobXR4LT5lbnRyaWVzW2ldLmFkdmFuY2VXaWR0aDsKKyAgICBobXR4LmNs
ZWFyKCk7CisKKyAgICBPd25QdHI8T1RWaGVhVGFibGU+IHZoZWEocGxhdGZvcm1EYXRhLm9wZW5U
eXBlVGFibGU8T1RWaGVhVGFibGU+KE9UVmhlYVRhZykpOworICAgIGlmICh2aGVhKSB7CisgICAg
ICAgIHVpbnQxNl90IGNWbXR4RW50cmllcyA9IHZoZWEtPm51bU9mTG9uZ1Zlck1ldHJpY3M7Cisg
ICAgICAgIHZoZWEuY2xlYXIoKTsKKworICAgICAgICAvLyBMb2FkIFZPUkcuIFRoaXMgdGFibGUg
aXMgb3B0aW9uYWwuCisgICAgICAgIE93blB0cjxPVFZPUkdUYWJsZT4gdm9yZyhwbGF0Zm9ybURh
dGEub3BlblR5cGVUYWJsZTxPVFZPUkdUYWJsZT4oT1RWT1JHVGFnKSk7CisgICAgICAgIGlmICh2
b3JnKSB7CisgICAgICAgICAgICBtX2RlZmF1bHRWZXJ0T3JpZ2luWSA9IHZvcmctPmRlZmF1bHRW
ZXJ0T3JpZ2luWTsKKyAgICAgICAgICAgIHVpbnQxNl90IGNWZXJ0T3JpZ2luWU1ldHJpY3MgPSB2
b3JnLT5udW1WZXJ0T3JpZ2luWU1ldHJpY3M7CisgICAgICAgICAgICBpZiAoIWNWZXJ0T3JpZ2lu
WU1ldHJpY3MpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGQgb25lIGVudHJ5IHNvIHRoYXQgaGFz
Vk9SRygpIGJlY29tZXMgdHJ1ZQorICAgICAgICAgICAgICAgIG1fdmVydE9yaWdpblkuc2V0KDAs
IG1fZGVmYXVsdFZlcnRPcmlnaW5ZKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGNWZXJ0T3JpZ2luWU1ldHJpY3M7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBPVFZPUkdUYWJsZTo6VmVydE9yaWdpbllNZXRy
aWNzJiBtZXRyaWNzID0gdm9yZy0+dmVydE9yaWdpbllNZXRyaWNzW2ldOworICAgICAgICAgICAg
ICAgICAgICBtX3ZlcnRPcmlnaW5ZLnNldChtZXRyaWNzLmdseXBoSW5kZXgsIG1ldHJpY3MudmVy
dE9yaWdpblkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZvcmcuY2xlYXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjVm10eEVudHJpZXMpIHsK
KyAgICAgICAgICAgIHNpemVfdCB2bXR4U2l6ZTsKKyAgICAgICAgICAgIE93blB0cjxPVFZtdHhU
YWJsZT4gdm10eChwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZTxPVFZtdHhUYWJsZT4oT1RWbXR4
VGFnLCAmdm10eFNpemUpKTsKKyAgICAgICAgICAgIGlmICh2bXR4KSB7CisgICAgICAgICAgICAg
ICAgbV9hZHZhbmNlSGVpZ2h0cy5yZXNpemUoY1ZtdHhFbnRyaWVzKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgY1ZtdHhFbnRyaWVzOyArK2kpCisgICAgICAgICAg
ICAgICAgICAgIG1fYWR2YW5jZUhlaWdodHNbaV0gPSB2bXR4LT5lbnRyaWVzW2ldLmFkdmFuY2VI
ZWlnaHQ7CisKKyAgICAgICAgICAgICAgICAvLyBWT1JHIGlzIHByZWZlcnJlZCB3YXkgdG8gY2Fs
Y3VsYXRlIHZpcnRpY2FsIG9yaWdpbiB0aGFuIHZtdHgsCisgICAgICAgICAgICAgICAgLy8gc28g
bG9hZCB0b3BTaWRlQmVhcmluZyBmcm9tIHZtdHggb25seSBpZiBWT1JHIGlzIG1pc3NpbmcuCisg
ICAgICAgICAgICAgICAgaWYgKCFoYXNWT1JHKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHNpemVFeHRyYSA9IHZtdHhTaXplIC0gKHNpemVvZihPVFZtdHhUYWJsZTo6RW50cnkpICog
Y1ZtdHhFbnRyaWVzKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCEoc2l6ZUV4dHJhICUg
c2l6ZW9mKE9USW50MTYpKSk7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjVG9wU2lkZUJl
YXJpbmdzID0gY1ZtdHhFbnRyaWVzICsgc2l6ZUV4dHJhIC8gc2l6ZW9mKE9USW50MTYpOworICAg
ICAgICAgICAgICAgICAgICBtX3RvcFNpZGVCZWFyaW5ncy5yZXNpemUoY1RvcFNpZGVCZWFyaW5n
cyk7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICg7IGkgPCBjVm10eEVudHJpZXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fdG9wU2lkZUJlYXJpbmdzW2ldID0gdm10eC0+ZW50cmllc1tpXS50b3BTaWRlQmVhcmluZzsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBjVG9wU2lkZUJlYXJpbmdzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBPVEludDE2KiBwVG9wU2lkZUJlYXJpbmdzRXh0cmEgPSByZWludGVy
cHJldF9jYXN0PE9USW50MTYqPigmdm10eC0+ZW50cmllc1tjVm10eEVudHJpZXNdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgY1RvcFNpZGVCZWFyaW5nczsgKytpLCArK3BU
b3BTaWRlQmVhcmluZ3NFeHRyYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3RvcFNp
ZGVCZWFyaW5nc1tpXSA9ICpwVG9wU2lkZUJlYXJpbmdzRXh0cmE7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdm10eC5jbGVhcigpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitmbG9hdCBPcGVuVHlwZVZlcnRp
Y2FsRGF0YTo6YWR2YW5jZUhlaWdodChjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgR2x5cGgg
Z2x5cGgpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvdW50SGVpZ2h0cyA9IG1fYWR2YW5jZUhlaWdo
dHMuc2l6ZSgpOworICAgIGlmIChjb3VudEhlaWdodHMpIHsKKyAgICAgICAgdWludDE2X3QgYWR2
YW5jZUZVbml0ID0gbV9hZHZhbmNlSGVpZ2h0c1tnbHlwaCA8IGNvdW50SGVpZ2h0cyA/IGdseXBo
IDogY291bnRIZWlnaHRzIC0gMV07CisgICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNlRlVu
aXQgKiBmb250LT5zaXplUGVyVW5pdCgpOworICAgICAgICByZXR1cm4gYWR2YW5jZTsKKyAgICB9
CisKKyAgICAvLyBObyB2ZXJ0aWNhbCBpbmZvIGluIHRoZSBmb250IGZpbGU7IHVzZSBoZWlnaHQg
YXMgYWR2YW5jZS4KKyAgICByZXR1cm4gZm9udC0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKK30K
Kwordm9pZCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6Z2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JH
bHlwaHMoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoKiBnbHlwaHMsIHNp
emVfdCBjb3VudCwgZmxvYXQqIG91dFhZQXJyYXkpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvdW50
V2lkdGhzID0gbV9hZHZhbmNlV2lkdGhzLnNpemUoKTsKKyAgICBBU1NFUlQoY291bnRXaWR0aHMg
PiAwKTsKKyAgICBjb25zdCBGb250TWV0cmljcyYgbWV0cmljcyA9IGZvbnQtPmZvbnRNZXRyaWNz
KCk7CisgICAgZmxvYXQgc2l6ZVBlclVuaXQgPSBmb250LT5zaXplUGVyVW5pdCgpOworICAgIGZs
b2F0IGFzY2VudCA9IG1ldHJpY3MuYXNjZW50KCk7CisgICAgYm9vbCB1c2VWT1JHID0gaGFzVk9S
RygpOworICAgIHNpemVfdCBjb3VudFRvcFNpZGVCZWFyaW5ncyA9IG1fdG9wU2lkZUJlYXJpbmdz
LnNpemUoKTsKKyAgICBmbG9hdCBkZWZhdWx0VmVydE9yaWdpblkgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgZm9yIChmbG9hdCogZW5kID0gJihvdXRYWUFy
cmF5W2NvdW50ICogMl0pOyBvdXRYWUFycmF5ICE9IGVuZDsgKytnbHlwaHMsIG91dFhZQXJyYXkg
Kz0gMikgeworICAgICAgICBHbHlwaCBnbHlwaCA9ICpnbHlwaHM7CisgICAgICAgIHVpbnQxNl90
IHdpZHRoRlVuaXQgPSBtX2FkdmFuY2VXaWR0aHNbZ2x5cGggPCBjb3VudFdpZHRocyA/IGdseXBo
IDogY291bnRXaWR0aHMgLSAxXTsKKyAgICAgICAgZmxvYXQgd2lkdGggPSB3aWR0aEZVbml0ICog
c2l6ZVBlclVuaXQ7CisgICAgICAgIG91dFhZQXJyYXlbMF0gPSAtd2lkdGggLyAyOworCisgICAg
ICAgIC8vIEZvciBZLCB0cnkgVk9SRyBmaXJzdC4KKyAgICAgICAgaWYgKHVzZVZPUkcpIHsKKyAg
ICAgICAgICAgIGludDE2X3QgdmVydE9yaWdpbllGVW5pdCA9IG1fdmVydE9yaWdpblkuZ2V0KGds
eXBoKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0T3JpZ2luWUZVbml0KSB7CisgICAgICAgICAgICAg
ICAgb3V0WFlBcnJheVsxXSA9IC12ZXJ0T3JpZ2luWUZVbml0ICogc2l6ZVBlclVuaXQ7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNu
YW4oZGVmYXVsdFZlcnRPcmlnaW5ZKSkKKyAgICAgICAgICAgICAgICBkZWZhdWx0VmVydE9yaWdp
blkgPSAtbV9kZWZhdWx0VmVydE9yaWdpblkgKiBzaXplUGVyVW5pdDsKKyAgICAgICAgICAgIG91
dFhZQXJyYXlbMV0gPSBkZWZhdWx0VmVydE9yaWdpblk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5vIFZPUkcsIHRyeSB2bXR4IG5leHQuCisgICAg
ICAgIGlmIChjb3VudFRvcFNpZGVCZWFyaW5ncykgeworICAgICAgICAgICAgaW50MTZfdCB0b3BT
aWRlQmVhcmluZ0ZVbml0ID0gbV90b3BTaWRlQmVhcmluZ3NbZ2x5cGggPCBjb3VudFRvcFNpZGVC
ZWFyaW5ncyA/IGdseXBoIDogY291bnRUb3BTaWRlQmVhcmluZ3MgLSAxXTsKKyAgICAgICAgICAg
IGZsb2F0IHRvcFNpZGVCZWFyaW5nID0gdG9wU2lkZUJlYXJpbmdGVW5pdCAqIHNpemVQZXJVbml0
OworICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGZvbnQtPmJvdW5kc0ZvckdseXBoKGds
eXBoKTsKKyAgICAgICAgICAgIG91dFhZQXJyYXlbMV0gPSBib3VuZHMueSgpIC0gdG9wU2lkZUJl
YXJpbmc7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5v
IHZlcnRpY2FsIGluZm8gaW4gdGhlIGZvbnQgZmlsZTsgdXNlIGFzY2VudCBhcyB2ZXJ0aWNhbCBv
cmlnaW4uCisgICAgICAgIG91dFhZQXJyYXlbMV0gPSAtYXNjZW50OworICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3YjNlZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGlj
YWxEYXRhLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgS29qaSBJc2hpaSA8a29qaWlzaGlAZ21haWwuY29tPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBPcGVuVHlwZVZlcnRpY2FsRGF0YV9oCisjZGVmaW5lIE9wZW5UeXBlVmVy
dGljYWxEYXRhX2gKKworI2luY2x1ZGUgIkdseXBoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNzIEdseXBoUGFnZTsKK2NsYXNzIFNpbXBsZUZvbnRE
YXRhOworCitjbGFzcyBPcGVuVHlwZVZlcnRpY2FsRGF0YSB7CitwdWJsaWM6CisgICAgT3BlblR5
cGVWZXJ0aWNhbERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworCisgICAgYm9vbCBpc09w
ZW5UeXBlKCkgY29uc3QgeyByZXR1cm4gIW1fYWR2YW5jZVdpZHRocy5pc0VtcHR5KCk7IH0KKyAg
ICBib29sIGhhc1ZlcnRpY2FsTWV0cmljcygpIGNvbnN0IHsgcmV0dXJuICFtX2FkdmFuY2VIZWln
aHRzLmlzRW1wdHkoKTsgfQorICAgIGZsb2F0IGFkdmFuY2VIZWlnaHQoY29uc3QgU2ltcGxlRm9u
dERhdGEqLCBHbHlwaCkgY29uc3Q7CisgICAgdm9pZCBnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0Zv
ckdseXBocyhjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoKiwgc2l6ZV90LCBmbG9h
dCogb3V0WFlBcnJheSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBoYXNWT1JHKCkgY29u
c3QgeyByZXR1cm4gIW1fdmVydE9yaWdpblkuaXNFbXB0eSgpOyB9CisKK3ByaXZhdGU6CisgICAg
VmVjdG9yPHVpbnQxNl90PiBtX2FkdmFuY2VXaWR0aHM7CisgICAgVmVjdG9yPHVpbnQxNl90PiBt
X2FkdmFuY2VIZWlnaHRzOworICAgIFZlY3RvcjxpbnQxNl90PiBtX3RvcFNpZGVCZWFyaW5nczsK
KyAgICBpbnQxNl90IG1fZGVmYXVsdFZlcnRPcmlnaW5ZOworICAgIEhhc2hNYXA8R2x5cGgsIGlu
dDE2X3Q+IG1fdmVydE9yaWdpblk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBPcGVuVHlwZVZlcnRpY2FsRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKaW5k
ZXggOTg2MGRmNi4uMzI2NzdmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtNzQsNiAr
NzQsMjkgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250LCBm
bG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXEKICAgICBSZXN0b3JlREMoaGRjLCAtMSk7
CiB9CiAKKyNpZiBVU0UoQ0cpCit2b2lkKiBGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxl
KHVpbnQzMl90IHRhYmxlLCBzaXplX3QqIHNpemUpIGNvbnN0Cit7CisgICAgSFduZERDIGhkYygw
KTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBoZm9udCgpKTsKKwor
ICAgIERXT1JEIGNiID0gR2V0Rm9udERhdGEoaGRjLCB0YWJsZSwgMCwgMCwgMCk7CisgICAgdm9p
ZCogZGF0YTsKKyAgICBpZiAoY2IgPT0gR0RJX0VSUk9SKQorICAgICAgICBkYXRhID0gMDsKKyAg
ICBlbHNlIHsKKyAgICAgICAgZGF0YSA9IG5ldyB1aW50OF90W2NiXTsKKyAgICAgICAgRFdPUkQg
cmVzdWx0ID0gR2V0Rm9udERhdGEoaGRjLCB0YWJsZSwgMCwgZGF0YSwgY2IpOworICAgICAgICBB
U1NFUlQocmVzdWx0ID09IGNiKTsKKyAgICAgICAgaWYgKHNpemUpCisgICAgICAgICAgICAqc2l6
ZSA9IHJlc3VsdDsKKyAgICB9CisKKyAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAg
ICByZXR1cm4gZGF0YTsKK30KKyNlbmRpZgorCiAjaWZuZGVmIE5ERUJVRwogU3RyaW5nIEZvbnRQ
bGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132501</attachid>
            <date>2012-03-18 14:37:40 -0700</date>
            <delta_ts>2012-03-26 22:15:42 -0700</delta_ts>
            <desc>OpenTypeVerticalData class and its related changes after mitz&apos;s review</desc>
            <filename>81326-5.patch</filename>
            <type>text/plain</type>
            <size>24338</size>
            <attacher name="Koji Ishii">kojii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYzY2MzkxLi5iNTAxMDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMg
QEAKKzIwMTItMDMtMTggIEtvamkgSXNoaWkgIDxrb2ppaXNoaUBnbWFpbC5jb20+CisKKyAgICAg
ICAgVmVydGljYWwgZmxvdyBzdXBwb3J0IGZvciBPcGVuVHlwZSBmb250cyB3aXRoIHRoZSBsZWFz
dCBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxMzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIE9wZW5UeXBl
VmVydGljYWxEYXRhIHRvIHJlYWQKKyAgICAgICAgdmVydGljYWwgZm9udCBtZXRyaWNzIGZyb20g
T3BlblR5cGUgZm9udHMuCisKKyAgICAgICAgQ3VycmVudGx5LCBXZWJLaXQgcmVsaWVzIG9uIHBs
YXRvcm0gQVBJcyB0byBkbyB0aGUgd29yay4gSG93ZXZlciwKKyAgICAgICAgc29tZSBwbGF0Zm9y
bXMgc3VjaCBhcyBXaW5kb3dzIGxhY2sgc3VwcG9ydCBmb3IgYWxsIHRoZSBjYXBhYmlsaXRpZXMK
KyAgICAgICAgV2ViS2l0IHJlcXVpcmVzIGZvciB2ZXJ0aWNhbCBmbG93IGFuZCB0aGUgdGV4dC1v
cmllbnRhdGlvbiBwcm9wZXJ0eQorICAgICAgICB0byB3b3JrIGNvcnJlY3RseS4gUmVhZGluZyBP
cGVuVHlwZSB0YWJsZXMgZGlyZWN0bHkgYWxzbyBnaXZlcworICAgICAgICBiZW5lZml0cyBpbiBj
b25zaXN0ZW50IGJlaGF2aW9yIGFtb25nIHRoZSBXZWJLaXQgcGxhdGZvcm1zLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaXMgZm9yIGFueSBwbGF0Zm9ybXMgdGhhdCB3YW50IHRvIHBhcnNlIE9wZW5U
eXBlIHRhYmxlcworICAgICAgICBkaXJlY3RseSwgYnV0IGl0J3MgY3VycmVudGx5IGluY2x1ZGVk
IG9ubHkgaW4gQ0dXaW4gYW5kIGlzbid0IG9uIGFueQorICAgICAgICBjb2RlIHBhdGggZXZlbiBv
biBDR1dpbiB5ZXQuIENhbGxlcidzIHNpZGUgY2hhbmdlIGZvciBDR1dpbiBhbmQKKyAgICAgICAg
c3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZyb21zIHdpbGwgYmUgaW4gc2VwYXJhdGUgYnVncy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgYXJlIHJlcXVpcmVkLiBObyBiZWhhdmlvciBjaGFuZ2VzLgor
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZGVkIE9wZW5UeXBl
VHlwZXMuaCBhbmQgT3BlblR5cGVWZXJ0aWNhbERhdGEuaC9jcHAuCisgICAgICAgICogcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcDogQWRkIGNyZWF0ZShzaXplX3QpCisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDogQWRkIGNyZWF0ZShzaXplX3QpCisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChTaGFyZWRCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkZWQg
b3BlblR5cGVUYWJsZSgpLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOiBB
ZGRlZCBzaXplUGVyVW5pdCgpLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNp
emVQZXJVbml0KTogc2l6ZSgpIC8gdW5pdHNQZXJFbSgpIGZvciBsZXNzIG11bHRpcGxpY2F0aW9u
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaDog
QWRkZWQgT3BlblR5cGUgYmFzaWMgdHlwZSBkZWZpbml0aW9ucy4KKyAgICAgICAgKE9wZW5UeXBl
KToKKyAgICAgICAgKE9wZW5UeXBlOjpCaWdFbmRpYW5TaG9ydDo6b3BlcmF0b3Igc2hvcnQpOgor
ICAgICAgICAoT3BlblR5cGU6OkJpZ0VuZGlhblNob3J0OjpCaWdFbmRpYW5TaG9ydCk6CisgICAg
ICAgIChCaWdFbmRpYW5TaG9ydCk6CisgICAgICAgIChPcGVuVHlwZTo6QmlnRW5kaWFuVVNob3J0
OjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCk6CisgICAgICAgIChPcGVuVHlwZTo6QmlnRW5kaWFu
VVNob3J0OjpCaWdFbmRpYW5VU2hvcnQpOgorICAgICAgICAoQmlnRW5kaWFuVVNob3J0KToKKyAg
ICAgICAgKE9wZW5UeXBlOjpCaWdFbmRpYW5Mb25nOjpvcGVyYXRvciBpbnQpOgorICAgICAgICAo
T3BlblR5cGU6OkJpZ0VuZGlhbkxvbmc6OkJpZ0VuZGlhbkxvbmcpOgorICAgICAgICAoQmlnRW5k
aWFuTG9uZyk6CisgICAgICAgIChPcGVuVHlwZTo6QmlnRW5kaWFuVUxvbmc6Om9wZXJhdG9yIHVu
c2lnbmVkKToKKyAgICAgICAgKE9wZW5UeXBlOjpCaWdFbmRpYW5VTG9uZzo6QmlnRW5kaWFuVUxv
bmcpOgorICAgICAgICAoQmlnRW5kaWFuVUxvbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChP
cGVuVHlwZSk6CisgICAgICAgIChPVEhoZWFUYWJsZSk6IE9wZW5UeXBlICdoaGVhJyB0YWJsZS4K
KyAgICAgICAgKE9UVmhlYVRhYmxlKTogT3BlblR5cGUgJ3ZoZWEnIHRhYmxlLgorICAgICAgICAo
RW50cnkpOgorICAgICAgICAoT1RWT1JHVGFibGUpOiBPcGVuVHlwZSAnVk9SRycgdGFibGUuCisg
ICAgICAgIChWZXJ0T3JpZ2luWU1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6T3BlblR5cGVWZXJ0aWNhbERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VIZWlnaHQpOiBB
ZHZhbmNlIGhlaWdodCBmb3IgYSBnbHlwaC4KKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlVmVy
dGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyk6IFZlcnRpY2FsIG9y
aWdpbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRp
Y2FsRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoT3BlblR5cGVW
ZXJ0aWNhbERhdGEpOiBBIG5ldyBjbGFzcyB0byBoYW5kbGUgdmVydGljYWwgZmxvdyBkYXRhIGlu
IE9wZW5UeXBlLgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmlzT3Bl
blR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6Omhhc1ZlcnRp
Y2FsTWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6aGFz
Vk9SRyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpvcGVuVHlwZVRhYmxlKTogSW1wbGVtZW50ZWQgb3BlblR5cGVUYWJsZSgpIGZvciBX
aW4zMi4KKwogMjAxMi0wMy0xMiAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIFVzZSBwcm9qZWN0UXVhZCB0byBhcHBseSBpbnZlcnNlIG1h
cFJlY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5k
ZXggMjE2YmZmNS4uZmQ2OTdhOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKQEAgLTI5MDcyLDYgKzI5MDcyLDEwIEBACiAJCQkJCQk+CiAJCQkJCTwv
RmlsZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhp
Y3Ncb3BlbnR5cGVcT3BlblR5cGVUeXBlcy5oIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJ
CTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBl
XE9wZW5UeXBlVXRpbGl0aWVzLmNwcCIKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgpAQCAtMjkwODAs
NiArMjkwODQsMTQgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQorCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVZlcnRp
Y2FsRGF0YS5jcHAiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5cGVWZXJ0aWNh
bERhdGEuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cUmVmQ291bnRlZEdESUhhbmRsZS5oIgog
CQkJCQkJPgogCQkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAppbmRleCBlZTZhMjlmLi44MmVmYWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5jcHAKQEAgLTYyLDYgKzYyLDEyIEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVm
ZmVyKCkKIHsKIH0KIAorU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoc2l6ZV90IHNpemUpCisg
ICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYnVmZmVyKHNpemUpCit7Cit9CisKIFNoYXJlZEJ1
ZmZlcjo6U2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplKQogICAgIDogbV9z
aXplKDApCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGZlM2U0
YjYuLmI2NmEwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC00
OCw2ICs0OCw3IEBAIGNsYXNzIFB1cmdlYWJsZUJ1ZmZlcjsKIGNsYXNzIFNoYXJlZEJ1ZmZlciA6
IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEJ1ZmZlcj4gewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNo
YXJlZEJ1ZmZlcik7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0
ZShzaXplX3Qgc2l6ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEJ1ZmZlcihzaXplKSk7
IH0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCBjaGFy
KiBjLCBpbnQgaSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEJ1ZmZlcihjLCBpKSk7IH0K
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0ZShjb25zdCB1bnNpZ25l
ZCBjaGFyKiBjLCBpbnQgaSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEJ1ZmZlcihjLCBp
KSk7IH0KIApAQCAtMTE1LDYgKzExNiw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTaGFy
ZWRCdWZmZXIoKTsKKyAgICBTaGFyZWRCdWZmZXIoc2l6ZV90KTsKICAgICBTaGFyZWRCdWZmZXIo
Y29uc3QgY2hhciosIGludCk7CiAgICAgU2hhcmVkQnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIq
LCBpbnQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IDk0YzZjMDEuLmI3Nzk4YWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTkx
LDYgKzkxLDcgQEAgdHlwZWRlZiBVSW50MzIgQVRTRm9udFJlZjsKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRm9udERlc2NyaXB0aW9uOworY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYg
T1MoREFSV0lOKQogaW5saW5lIENURm9udFJlZiB0b0NURm9udFJlZihOU0ZvbnQgKm5zRm9udCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDVEZvbnRSZWY+KG5zRm9udCk7IH0KQEAgLTI3Niw2
ICsyNzcsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyNpZiBQTEFURk9STShXSU4pICYm
IFVTRShDRykKKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gb3BlblR5cGVUYWJsZSh1aW50
MzJfdCB0YWJsZSkgY29uc3Q7CisjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcg
ZGVzY3JpcHRpb24oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IGRkODZmMDA0Li5mZDJmZmNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKQEAgLTEx
OCw2ICsxMTgsNyBAQCBwdWJsaWM6CiAKICAgICBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSB7
IHJldHVybiBtX2ZvbnRNZXRyaWNzOyB9CiAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRy
aWNzKCkgY29uc3QgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQorICAgIGZsb2F0IHNpemVQZXJV
bml0KCkgY29uc3QgeyByZXR1cm4gcGxhdGZvcm1EYXRhKCkuc2l6ZSgpIC8gKGZvbnRNZXRyaWNz
KCkudW5pdHNQZXJFbSgpID8gZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCkgOiAxKTsgfQogICAg
IAogICAgIGZsb2F0IG1heENoYXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q2hhcldpZHRo
OyB9CiAgICAgdm9pZCBzZXRNYXhDaGFyV2lkdGgoZmxvYXQgbWF4Q2hhcldpZHRoKSB7IG1fbWF4
Q2hhcldpZHRoID0gbWF4Q2hhcldpZHRoOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVR5cGVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVR5cGVzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1YjcxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaApAQCAt
MCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEtvamkgSXNoaWkgPGtvamlp
c2hpQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgT3BlblR5cGVUeXBlc19oCisjZGVm
aW5lIE9wZW5UeXBlVHlwZXNfaAorCituYW1lc3BhY2UgT3BlblR5cGUgeworCitzdHJ1Y3QgQmln
RW5kaWFuU2hvcnQgeworICAgIG9wZXJhdG9yIHNob3J0KCkgY29uc3QgeyByZXR1cm4gKHYgJiAw
eDAwZmYpIDw8IDggfCB2ID4+IDg7IH0KKyAgICBCaWdFbmRpYW5TaG9ydChzaG9ydCB1KSA6IHYo
KHUgJiAweDAwZmYpIDw8IDggfCB1ID4+IDgpIHsgfQorICAgIHVuc2lnbmVkIHNob3J0IHY7Cit9
OworCitzdHJ1Y3QgQmlnRW5kaWFuVVNob3J0IHsKKyAgICBvcGVyYXRvciB1bnNpZ25lZCBzaG9y
dCgpIGNvbnN0IHsgcmV0dXJuICh2ICYgMHgwMGZmKSA8PCA4IHwgdiA+PiA4OyB9CisgICAgQmln
RW5kaWFuVVNob3J0KHVuc2lnbmVkIHNob3J0IHUpIDogdigodSAmIDB4MDBmZikgPDwgOCB8IHUg
Pj4gOCkgeyB9CisgICAgdW5zaWduZWQgc2hvcnQgdjsKK307CisKK3N0cnVjdCBCaWdFbmRpYW5M
b25nIHsKKyAgICBvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiAodiAmIDB4ZmYpIDw8IDI0
IHwgKHYgJiAweGZmMDApIDw8IDggfCAodiAmIDB4ZmYwMDAwKSA+PiA4IHwgdiA+PiAyNDsgfQor
ICAgIEJpZ0VuZGlhbkxvbmcoaW50IHUpIDogdigodSAmIDB4ZmYpIDw8IDI0IHwgKHUgJiAweGZm
MDApIDw8IDggfCAodSAmIDB4ZmYwMDAwKSA+PiA4IHwgdSA+PiAyNCkgeyB9CisgICAgdW5zaWdu
ZWQgdjsKK307CisKK3N0cnVjdCBCaWdFbmRpYW5VTG9uZyB7CisgICAgb3BlcmF0b3IgdW5zaWdu
ZWQoKSBjb25zdCB7IHJldHVybiAodiAmIDB4ZmYpIDw8IDI0IHwgKHYgJiAweGZmMDApIDw8IDgg
fCAodiAmIDB4ZmYwMDAwKSA+PiA4IHwgdiA+PiAyNDsgfQorICAgIEJpZ0VuZGlhblVMb25nKHVu
c2lnbmVkIHUpIDogdigodSAmIDB4ZmYpIDw8IDI0IHwgKHUgJiAweGZmMDApIDw8IDggfCAodSAm
IDB4ZmYwMDAwKSA+PiA4IHwgdSA+PiAyNCkgeyB9CisgICAgdW5zaWduZWQgdjsKK307CisKK3R5
cGVkZWYgQmlnRW5kaWFuU2hvcnQgT1RJbnQxNjsKK3R5cGVkZWYgQmlnRW5kaWFuVVNob3J0IE9U
VUludDE2OwordHlwZWRlZiBCaWdFbmRpYW5Mb25nIE9USW50MzI7Cit0eXBlZGVmIEJpZ0VuZGlh
blVMb25nIE9UVUludDMyOworCit0eXBlZGVmIE9UVUludDMyIE9URml4ZWQ7Cit0eXBlZGVmIE9U
VUludDE2IE9UT2Zmc2V0OwordHlwZWRlZiBPVFVJbnQxNiBPVEdseXBoSUQ7CisKKy8vIE9UVGFn
IGlzIG5hdGl2ZSBiZWNhdXNlIGl0J3Mgb25seSBjb21wYXJlZCBhZ2FpbnN0IGNvbnN0YW50cywg
c28gd2UgZG9uJ3QKKy8vIGRvIGVuZGlhbiBjb252ZXJzaW9uIGhlcmUgYnV0IG1ha2Ugc3VyZSBj
b25zdGFudHMgYXJlIGluIGJpZy1lbmRpYW4gb3JkZXIuCisvLyBOb3RlIHRoYXQgbXVsdGktY2hh
cmFjdGVyIGxpdGVyYWwgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBpbiBDKysweC4KK3R5cGVk
ZWYgdWludDMyX3QgT1RUYWc7CisjZGVmaW5lIE9UX01BS0VfVEFHKGNoMSwgY2gyLCBjaDMsIGNo
NCkgKCgoKHVpbnQzMl90KShjaDQpKSA8PCAyNCkgfCAoKCh1aW50MzJfdCkoY2gzKSkgPDwgMTYp
IHwgKCgodWludDMyX3QpKGNoMikpIDw8IDgpIHwgKCh1aW50MzJfdCkoY2gxKSkpCisKK30gLy8g
bmFtZXNwYWNlIE9wZW5UeXBlCisKKyNlbmRpZiAvLyBPcGVuVHlwZVR5cGVzX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVy
dGljYWxEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVmVydGljYWxEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xOWM5NDkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCkBAIC0wLDAgKzEsMjU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEtvamkgSXNoaWkgPGtvamlpc2hpQGdtYWls
LmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcGVuVHlw
ZVZlcnRpY2FsRGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2x5
cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIE9wZW5UeXBlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBPcGVuVHlwZSB7CisKK2VudW0g
eworICAgIE9USGhlYVRhZyA9IE9UX01BS0VfVEFHKCdoJywgJ2gnLCAnZScsICdhJyksCisgICAg
T1RIbXR4VGFnID0gT1RfTUFLRV9UQUcoJ2gnLCAnbScsICd0JywgJ3gnKSwKKyAgICBPVFZoZWFU
YWcgPSBPVF9NQUtFX1RBRygndicsICdoJywgJ2UnLCAnYScpLAorICAgIE9UVm10eFRhZyA9IE9U
X01BS0VfVEFHKCd2JywgJ20nLCAndCcsICd4JyksCisgICAgT1RWT1JHVGFnID0gT1RfTUFLRV9U
QUcoJ1YnLCAnTycsICdSJywgJ0cnKSwKK307CisKKyNwcmFnbWEgcGFjaygxKQorCitzdHJ1Y3Qg
T1RIaGVhVGFibGUgeworICAgIE9URml4ZWQgdmVyc2lvbjsKKyAgICBPVEludDE2IGFzY2VuZGVy
OworICAgIE9USW50MTYgZGVzY2VuZGVyOworICAgIE9USW50MTYgbGluZUdhcDsKKyAgICBPVElu
dDE2IGFkdmFuY2VXaWR0aE1heDsKKyAgICBPVEludDE2IG1pbkxlZnRTaWRlQmVhcmluZzsKKyAg
ICBPVEludDE2IG1pblJpZ2h0U2lkZUJlYXJpbmc7CisgICAgT1RJbnQxNiB4TWF4RXh0ZW50Owor
ICAgIE9USW50MTYgY2FyZXRTbG9wZVJpc2U7CisgICAgT1RJbnQxNiBjYXJldFNsb3BlUnVuOwor
ICAgIE9USW50MTYgY2FyZXRPZmZzZXQ7CisgICAgT1RJbnQxNiByZXNlcnZlZFs0XTsKKyAgICBP
VEludDE2IG1ldHJpY0RhdGFGb3JtYXQ7CisgICAgT1RVSW50MTYgbnVtYmVyT2ZITWV0cmljczsK
K307CisKK3N0cnVjdCBPVFZoZWFUYWJsZSB7CisgICAgT1RGaXhlZCB2ZXJzaW9uOworICAgIE9U
SW50MTYgYXNjZW50OworICAgIE9USW50MTYgZGVzY2VudDsKKyAgICBPVEludDE2IGxpbmVHYXA7
CisgICAgT1RJbnQxNiBhZHZhbmNlSGVpZ2h0TWF4OworICAgIE9USW50MTYgbWluVG9wU2lkZUJl
YXJpbmc7CisgICAgT1RJbnQxNiBtaW5Cb3R0b21TaWRlQmVhcmluZzsKKyAgICBPVEludDE2IHlN
YXhFeHRlbnQ7CisgICAgT1RJbnQxNiBjYXJldFNsb3BlUmlzZTsKKyAgICBPVEludDE2IGNhcmV0
U2xvcGVSdW47CisgICAgT1RJbnQxNiBjYXJldE9mZnNldDsKKyAgICBPVEludDE2IHJlc2VydmVk
WzRdOworICAgIE9USW50MTYgbWV0cmljRGF0YUZvcm1hdDsKKyAgICBPVFVJbnQxNiBudW1PZkxv
bmdWZXJNZXRyaWNzOworfTsKKworc3RydWN0IE9USG10eFRhYmxlIHsKKyAgICBzdHJ1Y3QgRW50
cnkgeworICAgICAgICBPVFVJbnQxNiBhZHZhbmNlV2lkdGg7CisgICAgICAgIE9USW50MTYgbHNi
OworICAgIH0gZW50cmllc1sxXTsKK307CisKK3N0cnVjdCBPVFZtdHhUYWJsZSB7CisgICAgc3Ry
dWN0IEVudHJ5IHsKKyAgICAgICAgT1RVSW50MTYgYWR2YW5jZUhlaWdodDsKKyAgICAgICAgT1RJ
bnQxNiB0b3BTaWRlQmVhcmluZzsKKyAgICB9IGVudHJpZXNbMV07Cit9OworCitzdHJ1Y3QgT1RW
T1JHVGFibGUgeworICAgIE9UVUludDE2IG1ham9yVmVyc2lvbjsKKyAgICBPVFVJbnQxNiBtaW5v
clZlcnNpb247CisgICAgT1RJbnQxNiBkZWZhdWx0VmVydE9yaWdpblk7CisgICAgT1RVSW50MTYg
bnVtVmVydE9yaWdpbllNZXRyaWNzOworICAgIHN0cnVjdCBWZXJ0T3JpZ2luWU1ldHJpY3Mgewor
ICAgICAgICBPVFVJbnQxNiBnbHlwaEluZGV4OworICAgICAgICBPVEludDE2IHZlcnRPcmlnaW5Z
OworICAgIH0gdmVydE9yaWdpbllNZXRyaWNzWzFdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKwor
fSAvLyBuYW1lc3BhY2UgT3BlblR5cGUKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitPcGVuVHlw
ZVZlcnRpY2FsRGF0YTo6T3BlblR5cGVWZXJ0aWNhbERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgcGxhdGZvcm1EYXRhKQorICAgIDogbV9kZWZhdWx0VmVydE9yaWdpblkoMCkKK3sKKyAgICAv
LyBMb2FkIGhoZWEgYW5kIGhtdHggdG8gZ2V0IHgtY29tcG9uZW50IG9mIHZlcnRpY2FsIG9yaWdp
bnMuCisgICAgLy8gSWYgdGhlc2UgdGFibGVzIGFyZSBtaXNzaW5nLCBpdCdzIG5vdCBhbiBPcGVu
VHlwZSBmb250LgorICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHBsYXRmb3JtRGF0
YS5vcGVuVHlwZVRhYmxlKE9USGhlYVRhZyk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5z
aXplKCkgPCBzaXplb2YoT1RIaGVhVGFibGUpKQorICAgICAgICByZXR1cm47CisgICAgY29uc3Qg
T1RIaGVhVGFibGUqIGhoZWEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IE9USGhlYVRhYmxlKj4o
YnVmZmVyLT5kYXRhKCkpOworICAgIHVpbnQxNl90IGNvdW50SG10eEVudHJpZXMgPSBoaGVhLT5u
dW1iZXJPZkhNZXRyaWNzOworICAgIGlmICghY291bnRIbXR4RW50cmllcykgeworICAgICAgICBM
T0dfRVJST1IoIm51bWJlck9mSE1ldHJpY3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGJ1ZmZlciA9IHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlKE9USG10eFRhZyk7CisgICAg
aWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zaXplKCkgPCBzaXplb2YoT1RIbXR4VGFibGUpKSB7Cisg
ICAgICAgIExPR19FUlJPUigiaGhlYSBleGlzdHMgYnV0IGhtdHggZG9lcyBub3QiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBPVEhtdHhUYWJsZSogaG10eCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgT1RIbXR4VGFibGUqPihidWZmZXItPmRhdGEoKSk7CisgICAgbV9hZHZh
bmNlV2lkdGhzLnJlc2l6ZShjb3VudEhtdHhFbnRyaWVzKTsKKyAgICBmb3IgKHVpbnQxNl90IGkg
PSAwOyBpIDwgY291bnRIbXR4RW50cmllczsgKytpKQorICAgICAgICBtX2FkdmFuY2VXaWR0aHNb
aV0gPSBobXR4LT5lbnRyaWVzW2ldLmFkdmFuY2VXaWR0aDsKKworICAgIC8vIExvYWQgdmhlYSBm
aXJzdC4gVGhpcyB0YWJsZSBpcyByZXF1aXJlZCBmb3IgZm9udHMgdGhhdCBzdXBwb3J0IHZlcnRp
Y2FsIGZsb3cuCisgICAgYnVmZmVyID0gcGxhdGZvcm1EYXRhLm9wZW5UeXBlVGFibGUoT1RWaGVh
VGFnKTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnNpemUoKSA8IHNpemVvZihPVFZoZWFU
YWJsZSkpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBPVFZoZWFUYWJsZSogdmhlYSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT1RWaGVhVGFibGUqPihidWZmZXItPmRhdGEoKSk7CisgICAg
dWludDE2X3QgY291bnRWbXR4RW50cmllcyA9IHZoZWEtPm51bU9mTG9uZ1Zlck1ldHJpY3M7Cisg
ICAgaWYgKCFjb3VudFZtdHhFbnRyaWVzKSB7CisgICAgICAgIExPR19FUlJPUigibnVtT2ZMb25n
VmVyTWV0cmljcyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTG9hZCBWT1JH
LiBUaGlzIHRhYmxlIGlzIG9wdGlvbmFsLgorICAgIGJ1ZmZlciA9IHBsYXRmb3JtRGF0YS5vcGVu
VHlwZVRhYmxlKE9UVk9SR1RhZyk7CisgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPnNpemUoKSA+
PSBzaXplb2YoT1RWT1JHVGFibGUpKSB7CisgICAgICAgIGNvbnN0IE9UVk9SR1RhYmxlKiB2b3Jn
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBPVFZPUkdUYWJsZSo+KGJ1ZmZlci0+ZGF0YSgpKTsK
KyAgICAgICAgbV9kZWZhdWx0VmVydE9yaWdpblkgPSB2b3JnLT5kZWZhdWx0VmVydE9yaWdpblk7
CisgICAgICAgIHVpbnQxNl90IGNvdW50VmVydE9yaWdpbllNZXRyaWNzID0gdm9yZy0+bnVtVmVy
dE9yaWdpbllNZXRyaWNzOworICAgICAgICBpZiAoIWNvdW50VmVydE9yaWdpbllNZXRyaWNzKSB7
CisgICAgICAgICAgICAvLyBBZGQgb25lIGVudHJ5IHNvIHRoYXQgaGFzVk9SRygpIGJlY29tZXMg
dHJ1ZQorICAgICAgICAgICAgbV92ZXJ0T3JpZ2luWS5zZXQoMCwgbV9kZWZhdWx0VmVydE9yaWdp
blkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsg
aSA8IGNvdW50VmVydE9yaWdpbllNZXRyaWNzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBPVFZPUkdUYWJsZTo6VmVydE9yaWdpbllNZXRyaWNzJiBtZXRyaWNzID0gdm9yZy0+dmVydE9y
aWdpbllNZXRyaWNzW2ldOworICAgICAgICAgICAgICAgIG1fdmVydE9yaWdpblkuc2V0KG1ldHJp
Y3MuZ2x5cGhJbmRleCwgbWV0cmljcy52ZXJ0T3JpZ2luWSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBMb2FkIHZtdHggdGhlbi4gVGhpcyB0YWJsZSBpcyByZXF1
aXJlZCBmb3IgZm9udHMgdGhhdCBzdXBwb3J0IHZlcnRpY2FsIGZsb3cuCisgICAgYnVmZmVyID0g
cGxhdGZvcm1EYXRhLm9wZW5UeXBlVGFibGUoT1RWbXR4VGFnKTsKKyAgICBpZiAoIWJ1ZmZlciB8
fCBidWZmZXItPnNpemUoKSA8IHNpemVvZihPVFZtdHhUYWJsZSkpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJ2aGVhIGV4aXN0cyBidXQgdm10eCBkb2VzIG5vdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNvbnN0IE9UVm10eFRhYmxlKiB2bXR4ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBPVFZtdHhUYWJsZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICBtX2FkdmFuY2VIZWlnaHRzLnJl
c2l6ZShjb3VudFZtdHhFbnRyaWVzKTsKKyAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgY291
bnRWbXR4RW50cmllczsgKytpKQorICAgICAgICBtX2FkdmFuY2VIZWlnaHRzW2ldID0gdm10eC0+
ZW50cmllc1tpXS5hZHZhbmNlSGVpZ2h0OworCisgICAgLy8gVk9SRyBpcyBwcmVmZXJyZWQgd2F5
IHRvIGNhbGN1bGF0ZSB2aXJ0aWNhbCBvcmlnaW4gdGhhbiB2bXR4LAorICAgIC8vIHNvIGxvYWQg
dG9wU2lkZUJlYXJpbmcgZnJvbSB2bXR4IG9ubHkgaWYgVk9SRyBpcyBtaXNzaW5nLgorICAgIGlm
IChoYXNWT1JHKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNpemVfdCBzaXplRXh0cmEgPSBi
dWZmZXItPnNpemUoKSAtIChzaXplb2YoT1RWbXR4VGFibGU6OkVudHJ5KSAqIGNvdW50Vm10eEVu
dHJpZXMpOworICAgIEFTU0VSVCghKHNpemVFeHRyYSAlIHNpemVvZihPVEludDE2KSkpOworICAg
IHNpemVfdCBjb3VudFRvcFNpZGVCZWFyaW5ncyA9IGNvdW50Vm10eEVudHJpZXMgKyBzaXplRXh0
cmEgLyBzaXplb2YoT1RJbnQxNik7CisgICAgbV90b3BTaWRlQmVhcmluZ3MucmVzaXplKGNvdW50
VG9wU2lkZUJlYXJpbmdzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50Vm10eEVu
dHJpZXM7ICsraSkKKyAgICAgICAgbV90b3BTaWRlQmVhcmluZ3NbaV0gPSB2bXR4LT5lbnRyaWVz
W2ldLnRvcFNpZGVCZWFyaW5nOworICAgIGlmIChpIDwgY291bnRUb3BTaWRlQmVhcmluZ3MpIHsK
KyAgICAgICAgY29uc3QgT1RJbnQxNiogcFRvcFNpZGVCZWFyaW5nc0V4dHJhID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBPVEludDE2Kj4oJnZtdHgtPmVudHJpZXNbY291bnRWbXR4RW50cmllc10p
OworICAgICAgICBmb3IgKDsgaSA8IGNvdW50VG9wU2lkZUJlYXJpbmdzOyArK2ksICsrcFRvcFNp
ZGVCZWFyaW5nc0V4dHJhKQorICAgICAgICAgICAgbV90b3BTaWRlQmVhcmluZ3NbaV0gPSAqcFRv
cFNpZGVCZWFyaW5nc0V4dHJhOworICAgIH0KK30KKworZmxvYXQgT3BlblR5cGVWZXJ0aWNhbERh
dGE6OmFkdmFuY2VIZWlnaHQoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIEdseXBoIGdseXBo
KSBjb25zdAoreworICAgIHNpemVfdCBjb3VudEhlaWdodHMgPSBtX2FkdmFuY2VIZWlnaHRzLnNp
emUoKTsKKyAgICBpZiAoY291bnRIZWlnaHRzKSB7CisgICAgICAgIHVpbnQxNl90IGFkdmFuY2VG
VW5pdCA9IG1fYWR2YW5jZUhlaWdodHNbZ2x5cGggPCBjb3VudEhlaWdodHMgPyBnbHlwaCA6IGNv
dW50SGVpZ2h0cyAtIDFdOworICAgICAgICBmbG9hdCBhZHZhbmNlID0gYWR2YW5jZUZVbml0ICog
Zm9udC0+c2l6ZVBlclVuaXQoKTsKKyAgICAgICAgcmV0dXJuIGFkdmFuY2U7CisgICAgfQorCisg
ICAgLy8gTm8gdmVydGljYWwgaW5mbyBpbiB0aGUgZm9udCBmaWxlOyB1c2UgaGVpZ2h0IGFzIGFk
dmFuY2UuCisgICAgcmV0dXJuIGZvbnQtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7Cit9CisKK3Zv
aWQgT3BlblR5cGVWZXJ0aWNhbERhdGE6OmdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhz
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaCogZ2x5cGhzLCBzaXplX3Qg
Y291bnQsIGZsb2F0KiBvdXRYWUFycmF5KSBjb25zdAoreworICAgIHNpemVfdCBjb3VudFdpZHRo
cyA9IG1fYWR2YW5jZVdpZHRocy5zaXplKCk7CisgICAgQVNTRVJUKGNvdW50V2lkdGhzID4gMCk7
CisgICAgY29uc3QgRm9udE1ldHJpY3MmIG1ldHJpY3MgPSBmb250LT5mb250TWV0cmljcygpOwor
ICAgIGZsb2F0IHNpemVQZXJVbml0ID0gZm9udC0+c2l6ZVBlclVuaXQoKTsKKyAgICBmbG9hdCBh
c2NlbnQgPSBtZXRyaWNzLmFzY2VudCgpOworICAgIGJvb2wgdXNlVk9SRyA9IGhhc1ZPUkcoKTsK
KyAgICBzaXplX3QgY291bnRUb3BTaWRlQmVhcmluZ3MgPSBtX3RvcFNpZGVCZWFyaW5ncy5zaXpl
KCk7CisgICAgZmxvYXQgZGVmYXVsdFZlcnRPcmlnaW5ZID0gc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OnF1aWV0X05hTigpOworICAgIGZvciAoZmxvYXQqIGVuZCA9ICYob3V0WFlBcnJheVtj
b3VudCAqIDJdKTsgb3V0WFlBcnJheSAhPSBlbmQ7ICsrZ2x5cGhzLCBvdXRYWUFycmF5ICs9IDIp
IHsKKyAgICAgICAgR2x5cGggZ2x5cGggPSAqZ2x5cGhzOworICAgICAgICB1aW50MTZfdCB3aWR0
aEZVbml0ID0gbV9hZHZhbmNlV2lkdGhzW2dseXBoIDwgY291bnRXaWR0aHMgPyBnbHlwaCA6IGNv
dW50V2lkdGhzIC0gMV07CisgICAgICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGVW5pdCAqIHNpemVQ
ZXJVbml0OworICAgICAgICBvdXRYWUFycmF5WzBdID0gLXdpZHRoIC8gMjsKKworICAgICAgICAv
LyBGb3IgWSwgdHJ5IFZPUkcgZmlyc3QuCisgICAgICAgIGlmICh1c2VWT1JHKSB7CisgICAgICAg
ICAgICBpbnQxNl90IHZlcnRPcmlnaW5ZRlVuaXQgPSBtX3ZlcnRPcmlnaW5ZLmdldChnbHlwaCk7
CisgICAgICAgICAgICBpZiAodmVydE9yaWdpbllGVW5pdCkgeworICAgICAgICAgICAgICAgIG91
dFhZQXJyYXlbMV0gPSAtdmVydE9yaWdpbllGVW5pdCAqIHNpemVQZXJVbml0OworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzbmFuKGRl
ZmF1bHRWZXJ0T3JpZ2luWSkpCisgICAgICAgICAgICAgICAgZGVmYXVsdFZlcnRPcmlnaW5ZID0g
LW1fZGVmYXVsdFZlcnRPcmlnaW5ZICogc2l6ZVBlclVuaXQ7CisgICAgICAgICAgICBvdXRYWUFy
cmF5WzFdID0gZGVmYXVsdFZlcnRPcmlnaW5ZOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBJZiBubyBWT1JHLCB0cnkgdm10eCBuZXh0LgorICAgICAgICBp
ZiAoY291bnRUb3BTaWRlQmVhcmluZ3MpIHsKKyAgICAgICAgICAgIGludDE2X3QgdG9wU2lkZUJl
YXJpbmdGVW5pdCA9IG1fdG9wU2lkZUJlYXJpbmdzW2dseXBoIDwgY291bnRUb3BTaWRlQmVhcmlu
Z3MgPyBnbHlwaCA6IGNvdW50VG9wU2lkZUJlYXJpbmdzIC0gMV07CisgICAgICAgICAgICBmbG9h
dCB0b3BTaWRlQmVhcmluZyA9IHRvcFNpZGVCZWFyaW5nRlVuaXQgKiBzaXplUGVyVW5pdDsKKyAg
ICAgICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSBmb250LT5ib3VuZHNGb3JHbHlwaChnbHlwaCk7
CisgICAgICAgICAgICBvdXRYWUFycmF5WzFdID0gYm91bmRzLnkoKSAtIHRvcFNpZGVCZWFyaW5n
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBObyB2ZXJ0
aWNhbCBpbmZvIGluIHRoZSBmb250IGZpbGU7IHVzZSBhc2NlbnQgYXMgdmVydGljYWwgb3JpZ2lu
LgorICAgICAgICBvdXRYWUFycmF5WzFdID0gLWFzY2VudDsKKyAgICB9Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZTRlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0
YS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgS29qaSBJc2hp
aSA8a29qaWlzaGlAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPcGVuVHlwZVZlcnRp
Y2FsRGF0YV9oCisjZGVmaW5lIE9wZW5UeXBlVmVydGljYWxEYXRhX2gKKworI2luY2x1ZGUgIkds
eXBoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKK2NsYXNz
IEdseXBoUGFnZTsKK2NsYXNzIFNpbXBsZUZvbnREYXRhOworCitjbGFzcyBPcGVuVHlwZVZlcnRp
Y2FsRGF0YSB7CitwdWJsaWM6CisgICAgT3BlblR5cGVWZXJ0aWNhbERhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpOworCisgICAgYm9vbCBpc09wZW5UeXBlKCkgY29uc3QgeyByZXR1cm4gIW1f
YWR2YW5jZVdpZHRocy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsTWV0cmljcygp
IGNvbnN0IHsgcmV0dXJuICFtX2FkdmFuY2VIZWlnaHRzLmlzRW1wdHkoKTsgfQorICAgIGZsb2F0
IGFkdmFuY2VIZWlnaHQoY29uc3QgU2ltcGxlRm9udERhdGEqLCBHbHlwaCkgY29uc3Q7CisgICAg
dm9pZCBnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhjb25zdCBTaW1wbGVGb250RGF0
YSosIGNvbnN0IEdseXBoKiwgc2l6ZV90LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgYm9vbCBoYXNWT1JHKCkgY29uc3QgeyByZXR1cm4gIW1fdmVydE9yaWdpblku
aXNFbXB0eSgpOyB9CisKKyAgICBWZWN0b3I8dWludDE2X3Q+IG1fYWR2YW5jZVdpZHRoczsKKyAg
ICBWZWN0b3I8dWludDE2X3Q+IG1fYWR2YW5jZUhlaWdodHM7CisgICAgVmVjdG9yPGludDE2X3Q+
IG1fdG9wU2lkZUJlYXJpbmdzOworICAgIGludDE2X3QgbV9kZWZhdWx0VmVydE9yaWdpblk7Cisg
ICAgSGFzaE1hcDxHbHlwaCwgaW50MTZfdD4gbV92ZXJ0T3JpZ2luWTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE9wZW5UeXBlVmVydGljYWxEYXRhX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhV2luLmNwcAppbmRleCA5ODYwZGY2Li4xMDgxZGU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFXaW4uY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KQEAgLTc0LDYgKzc1LDI1IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQ
bGF0Zm9ybURhdGEoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlx
CiAgICAgUmVzdG9yZURDKGhkYywgLTEpOwogfQogCisjaWYgVVNFKENHKQorUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFi
bGUpIGNvbnN0Cit7CisgICAgSFduZERDIGhkYygwKTsKKyAgICBIR0RJT0JKIG9sZEZvbnQgPSBT
ZWxlY3RPYmplY3QoaGRjLCBoZm9udCgpKTsKKworICAgIERXT1JEIHNpemUgPSBHZXRGb250RGF0
YShoZGMsIHRhYmxlLCAwLCAwLCAwKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXI7
CisgICAgaWYgKHNpemUgIT0gR0RJX0VSUk9SKSB7CisgICAgICAgIGJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKHNpemUpOworICAgICAgICBEV09SRCByZXN1bHQgPSBHZXRGb250RGF0YSho
ZGMsIHRhYmxlLCAwLCAoUFZPSUQpYnVmZmVyLT5kYXRhKCksIHNpemUpOworICAgICAgICBBU1NF
UlQocmVzdWx0ID09IHNpemUpOworICAgIH0KKworICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZv
bnQpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorI2VuZGlmCisKICNpZm5kZWYg
TkRFQlVHCiBTdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133975</attachid>
            <date>2012-03-26 22:15:42 -0700</date>
            <delta_ts>2012-03-28 14:03:35 -0700</delta_ts>
            <desc>OpenTypeVerticalData class and its related changes after mitz&apos;s review</desc>
            <filename>81326-6.patch</filename>
            <type>text/plain</type>
            <size>24522</size>
            <attacher name="Koji Ishii">kojii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NDhjYWM4Li45ODA1MWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMg
QEAKKzIwMTItMDMtMTggIEtvamkgSXNoaWkgIDxrb2ppaXNoaUBnbWFpbC5jb20+CisKKyAgICAg
ICAgVmVydGljYWwgZmxvdyBzdXBwb3J0IGZvciBPcGVuVHlwZSBmb250cyB3aXRoIHRoZSBsZWFz
dCBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgxMzI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIE9wZW5UeXBl
VmVydGljYWxEYXRhIHRvIHJlYWQKKyAgICAgICAgdmVydGljYWwgZm9udCBtZXRyaWNzIGZyb20g
T3BlblR5cGUgZm9udHMuCisKKyAgICAgICAgQ3VycmVudGx5LCBXZWJLaXQgcmVsaWVzIG9uIHBs
YXRvcm0gQVBJcyB0byBkbyB0aGUgd29yay4gSG93ZXZlciwKKyAgICAgICAgc29tZSBwbGF0Zm9y
bXMgc3VjaCBhcyBXaW5kb3dzIGxhY2sgc3VwcG9ydCBmb3IgYWxsIHRoZSBjYXBhYmlsaXRpZXMK
KyAgICAgICAgV2ViS2l0IHJlcXVpcmVzIGZvciB2ZXJ0aWNhbCBmbG93IGFuZCB0aGUgdGV4dC1v
cmllbnRhdGlvbiBwcm9wZXJ0eQorICAgICAgICB0byB3b3JrIGNvcnJlY3RseS4gUmVhZGluZyBP
cGVuVHlwZSB0YWJsZXMgZGlyZWN0bHkgYWxzbyBnaXZlcworICAgICAgICBiZW5lZml0cyBpbiBj
b25zaXN0ZW50IGJlaGF2aW9yIGFtb25nIHRoZSBXZWJLaXQgcGxhdGZvcm1zLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggaXMgZm9yIGFueSBwbGF0Zm9ybXMgdGhhdCB3YW50IHRvIHBhcnNlIE9wZW5U
eXBlIHRhYmxlcworICAgICAgICBkaXJlY3RseSwgYnV0IGl0J3MgY3VycmVudGx5IGluY2x1ZGVk
IG9ubHkgaW4gQ0dXaW4gYW5kIGlzbid0IG9uIGFueQorICAgICAgICBjb2RlIHBhdGggZXZlbiBv
biBDR1dpbiB5ZXQuIENhbGxlcidzIHNpZGUgY2hhbmdlIGZvciBDR1dpbiBhbmQKKyAgICAgICAg
c3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZyb21zIHdpbGwgYmUgaW4gc2VwYXJhdGUgYnVncy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgYXJlIHJlcXVpcmVkLiBObyBiZWhhdmlvciBjaGFuZ2VzLgor
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZGVkIE9wZW5UeXBl
VHlwZXMuaCBhbmQgT3BlblR5cGVWZXJ0aWNhbERhdGEuaC9jcHAuCisgICAgICAgICogcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcDogQWRkIGNyZWF0ZShzaXplX3QpCisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDogQWRkIGNyZWF0ZShzaXplX3QpCisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChTaGFyZWRCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkZWQg
b3BlblR5cGVUYWJsZSgpLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oOiBB
ZGRlZCBzaXplUGVyVW5pdCgpLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNp
emVQZXJVbml0KTogc2l6ZSgpIC8gdW5pdHNQZXJFbSgpIGZvciBsZXNzIG11bHRpcGxpY2F0aW9u
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaDog
QWRkZWQgT3BlblR5cGUgYmFzaWMgdHlwZSBkZWZpbml0aW9ucy4KKyAgICAgICAgKE9wZW5UeXBl
KToKKyAgICAgICAgKE9wZW5UeXBlOjpCaWdFbmRpYW5TaG9ydDo6b3BlcmF0b3Igc2hvcnQpOgor
ICAgICAgICAoT3BlblR5cGU6OkJpZ0VuZGlhblNob3J0OjpCaWdFbmRpYW5TaG9ydCk6CisgICAg
ICAgIChCaWdFbmRpYW5TaG9ydCk6CisgICAgICAgIChPcGVuVHlwZTo6QmlnRW5kaWFuVVNob3J0
OjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCk6CisgICAgICAgIChPcGVuVHlwZTo6QmlnRW5kaWFu
VVNob3J0OjpCaWdFbmRpYW5VU2hvcnQpOgorICAgICAgICAoQmlnRW5kaWFuVVNob3J0KToKKyAg
ICAgICAgKE9wZW5UeXBlOjpCaWdFbmRpYW5Mb25nOjpvcGVyYXRvciBpbnQpOgorICAgICAgICAo
T3BlblR5cGU6OkJpZ0VuZGlhbkxvbmc6OkJpZ0VuZGlhbkxvbmcpOgorICAgICAgICAoQmlnRW5k
aWFuTG9uZyk6CisgICAgICAgIChPcGVuVHlwZTo6QmlnRW5kaWFuVUxvbmc6Om9wZXJhdG9yIHVu
c2lnbmVkKToKKyAgICAgICAgKE9wZW5UeXBlOjpCaWdFbmRpYW5VTG9uZzo6QmlnRW5kaWFuVUxv
bmcpOgorICAgICAgICAoQmlnRW5kaWFuVUxvbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChP
cGVuVHlwZSk6CisgICAgICAgIChPVEhoZWFUYWJsZSk6IE9wZW5UeXBlICdoaGVhJyB0YWJsZS4K
KyAgICAgICAgKE9UVmhlYVRhYmxlKTogT3BlblR5cGUgJ3ZoZWEnIHRhYmxlLgorICAgICAgICAo
RW50cnkpOgorICAgICAgICAoT1RWT1JHVGFibGUpOiBPcGVuVHlwZSAnVk9SRycgdGFibGUuCisg
ICAgICAgIChWZXJ0T3JpZ2luWU1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6T3BlblR5cGVWZXJ0aWNhbERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmFkdmFuY2VIZWlnaHQpOiBB
ZHZhbmNlIGhlaWdodCBmb3IgYSBnbHlwaC4KKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlVmVy
dGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyk6IFZlcnRpY2FsIG9y
aWdpbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRp
Y2FsRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoT3BlblR5cGVW
ZXJ0aWNhbERhdGEpOiBBIG5ldyBjbGFzcyB0byBoYW5kbGUgdmVydGljYWwgZmxvdyBkYXRhIGlu
IE9wZW5UeXBlLgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmlzT3Bl
blR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6Omhhc1ZlcnRp
Y2FsTWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6aGFz
Vk9SRyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpvcGVuVHlwZVRhYmxlKTogSW1wbGVtZW50ZWQgb3BlblR5cGVUYWJsZSgpIGZvciBX
aW4zMi4KKwogMjAxMi0wMy0yNCAgSmVzdXMgU2FuY2hlei1QYWxlbmNpYSAgPGplc3VzLnBhbGVu
Y2lhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4IHNpbmNl
IHdlIHVzZSAiLVdlcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZSIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDIxYTUwMTUuLjBhMTQzYzYg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0y
OTMwNCw2ICsyOTMwNCwxMCBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBl
VHlwZXMuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVV0aWxpdGllcy5j
cHAiCiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KQEAgLTI5MzEyLDYgKzI5MzE2LDE0IEBACiAJCQkJ
CQk+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwIgorCQkJCQkJ
PgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBlVmVydGljYWxEYXRhLmgiCisJCQkJCQk+CisJ
CQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3Ncd2luXFJlZkNvdW50ZWRHRElIYW5kbGUuaCIKIAkJCQkJCT4KIAkJCQkJPC9GaWxl
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZWU2YTI5Zi4u
ODJlZmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC02
Miw2ICs2MiwxMiBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcigpCiB7CiB9CiAKK1NoYXJl
ZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKHNpemVfdCBzaXplKQorICAgIDogbV9zaXplKHNpemUpCisg
ICAgLCBtX2J1ZmZlcihzaXplKQoreworfQorCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihj
b25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKICAgICA6IG1fc2l6ZSgwKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCBmZTNlNGI2Li5iNjZhMDMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBQ
dXJnZWFibGVCdWZmZXI7CiBjbGFzcyBTaGFyZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxT
aGFyZWRCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIpOyB9CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGUoc2l6ZV90IHNpemUpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIoc2l6ZSkpOyB9CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgY2hhciogYywgaW50IGkpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIoYywgaSkpOyB9CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciogYywgaW50IGkpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIoYywgaSkpOyB9CiAKQEAgLTExNSw2ICsx
MTYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU2hhcmVkQnVmZmVyKCk7CisgICAgU2hh
cmVkQnVmZmVyKHNpemVfdCk7CiAgICAgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBpbnQpOwog
ICAgIFNoYXJlZEJ1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyKiwgaW50KTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApp
bmRleCBjNzMwYzc0Li5lYTU0MzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC05MSw2ICs5MSw3IEBAIHR5cGVkZWYg
VUludDMyIEFUU0ZvbnRSZWY7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnREZXNj
cmlwdGlvbjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIE9TKERBUldJTikKIGlubGluZSBD
VEZvbnRSZWYgdG9DVEZvbnRSZWYoTlNGb250ICpuc0ZvbnQpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Q1RGb250UmVmPihuc0ZvbnQpOyB9CkBAIC0yNzYsNiArMjc3LDkgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgfQogCisjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0cpCisgICAgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IG9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0Owor
I2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
aAppbmRleCBkZDg2ZjAwNC4uZmQyZmZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCkBAIC0xMTgsNiArMTE4LDcgQEAgcHVibGlj
OgogCiAgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmlj
czsgfQogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0dXJu
IHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/IGZv
bnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KICAgICAKICAgICBmbG9hdCBtYXhDaGFy
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heENoYXJXaWR0aDsgfQogICAgIHZvaWQgc2V0TWF4
Q2hhcldpZHRoKGZsb2F0IG1heENoYXJXaWR0aCkgeyBtX21heENoYXJXaWR0aCA9IG1heENoYXJX
aWR0aDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bnR5cGUvT3BlblR5cGVUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjY5NWI3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVR5cGVzLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBLb2ppIElzaGlpIDxrb2ppaXNoaUBnbWFpbC5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIE9wZW5UeXBlVHlwZXNfaAorI2RlZmluZSBPcGVuVHlwZVR5cGVzX2gK
KworbmFtZXNwYWNlIE9wZW5UeXBlIHsKKworc3RydWN0IEJpZ0VuZGlhblNob3J0IHsKKyAgICBv
cGVyYXRvciBzaG9ydCgpIGNvbnN0IHsgcmV0dXJuICh2ICYgMHgwMGZmKSA8PCA4IHwgdiA+PiA4
OyB9CisgICAgQmlnRW5kaWFuU2hvcnQoc2hvcnQgdSkgOiB2KCh1ICYgMHgwMGZmKSA8PCA4IHwg
dSA+PiA4KSB7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCB2OworfTsKKworc3RydWN0IEJpZ0VuZGlh
blVTaG9ydCB7CisgICAgb3BlcmF0b3IgdW5zaWduZWQgc2hvcnQoKSBjb25zdCB7IHJldHVybiAo
diAmIDB4MDBmZikgPDwgOCB8IHYgPj4gODsgfQorICAgIEJpZ0VuZGlhblVTaG9ydCh1bnNpZ25l
ZCBzaG9ydCB1KSA6IHYoKHUgJiAweDAwZmYpIDw8IDggfCB1ID4+IDgpIHsgfQorICAgIHVuc2ln
bmVkIHNob3J0IHY7Cit9OworCitzdHJ1Y3QgQmlnRW5kaWFuTG9uZyB7CisgICAgb3BlcmF0b3Ig
aW50KCkgY29uc3QgeyByZXR1cm4gKHYgJiAweGZmKSA8PCAyNCB8ICh2ICYgMHhmZjAwKSA8PCA4
IHwgKHYgJiAweGZmMDAwMCkgPj4gOCB8IHYgPj4gMjQ7IH0KKyAgICBCaWdFbmRpYW5Mb25nKGlu
dCB1KSA6IHYoKHUgJiAweGZmKSA8PCAyNCB8ICh1ICYgMHhmZjAwKSA8PCA4IHwgKHUgJiAweGZm
MDAwMCkgPj4gOCB8IHUgPj4gMjQpIHsgfQorICAgIHVuc2lnbmVkIHY7Cit9OworCitzdHJ1Y3Qg
QmlnRW5kaWFuVUxvbmcgeworICAgIG9wZXJhdG9yIHVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4g
KHYgJiAweGZmKSA8PCAyNCB8ICh2ICYgMHhmZjAwKSA8PCA4IHwgKHYgJiAweGZmMDAwMCkgPj4g
OCB8IHYgPj4gMjQ7IH0KKyAgICBCaWdFbmRpYW5VTG9uZyh1bnNpZ25lZCB1KSA6IHYoKHUgJiAw
eGZmKSA8PCAyNCB8ICh1ICYgMHhmZjAwKSA8PCA4IHwgKHUgJiAweGZmMDAwMCkgPj4gOCB8IHUg
Pj4gMjQpIHsgfQorICAgIHVuc2lnbmVkIHY7Cit9OworCit0eXBlZGVmIEJpZ0VuZGlhblNob3J0
IE9USW50MTY7Cit0eXBlZGVmIEJpZ0VuZGlhblVTaG9ydCBPVFVJbnQxNjsKK3R5cGVkZWYgQmln
RW5kaWFuTG9uZyBPVEludDMyOwordHlwZWRlZiBCaWdFbmRpYW5VTG9uZyBPVFVJbnQzMjsKKwor
dHlwZWRlZiBPVFVJbnQzMiBPVEZpeGVkOwordHlwZWRlZiBPVFVJbnQxNiBPVE9mZnNldDsKK3R5
cGVkZWYgT1RVSW50MTYgT1RHbHlwaElEOworCisvLyBPVFRhZyBpcyBuYXRpdmUgYmVjYXVzZSBp
dCdzIG9ubHkgY29tcGFyZWQgYWdhaW5zdCBjb25zdGFudHMsIHNvIHdlIGRvbid0CisvLyBkbyBl
bmRpYW4gY29udmVyc2lvbiBoZXJlIGJ1dCBtYWtlIHN1cmUgY29uc3RhbnRzIGFyZSBpbiBiaWct
ZW5kaWFuIG9yZGVyLgorLy8gTm90ZSB0aGF0IG11bHRpLWNoYXJhY3RlciBsaXRlcmFsIGlzIGlt
cGxlbWVudGF0aW9uLWRlZmluZWQgaW4gQysrMHguCit0eXBlZGVmIHVpbnQzMl90IE9UVGFnOwor
I2RlZmluZSBPVF9NQUtFX1RBRyhjaDEsIGNoMiwgY2gzLCBjaDQpICgoKCh1aW50MzJfdCkoY2g0
KSkgPDwgMjQpIHwgKCgodWludDMyX3QpKGNoMykpIDw8IDE2KSB8ICgoKHVpbnQzMl90KShjaDIp
KSA8PCA4KSB8ICgodWludDMyX3QpKGNoMSkpKQorCit9IC8vIG5hbWVzcGFjZSBPcGVuVHlwZQor
CisjZW5kaWYgLy8gT3BlblR5cGVUeXBlc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0
YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlM2E5NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09w
ZW5UeXBlVmVydGljYWxEYXRhLmNwcApAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBLb2ppIElzaGlpIDxrb2ppaXNoaUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEuaCIKKwor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUg
Ik9wZW5UeXBlVHlwZXMuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNw
YWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBPcGVuVHlwZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgT3BlblR5cGUgeworCitlbnVtIHsKKyAgICBPVEhoZWFUYWcgPSBP
VF9NQUtFX1RBRygnaCcsICdoJywgJ2UnLCAnYScpLAorICAgIE9USG10eFRhZyA9IE9UX01BS0Vf
VEFHKCdoJywgJ20nLCAndCcsICd4JyksCisgICAgT1RWaGVhVGFnID0gT1RfTUFLRV9UQUcoJ3Yn
LCAnaCcsICdlJywgJ2EnKSwKKyAgICBPVFZtdHhUYWcgPSBPVF9NQUtFX1RBRygndicsICdtJywg
J3QnLCAneCcpLAorICAgIE9UVk9SR1RhZyA9IE9UX01BS0VfVEFHKCdWJywgJ08nLCAnUicsICdH
JyksCit9OworCisjcHJhZ21hIHBhY2soMSkKKworc3RydWN0IE9USGhlYVRhYmxlIHsKKyAgICBP
VEZpeGVkIHZlcnNpb247CisgICAgT1RJbnQxNiBhc2NlbmRlcjsKKyAgICBPVEludDE2IGRlc2Nl
bmRlcjsKKyAgICBPVEludDE2IGxpbmVHYXA7CisgICAgT1RJbnQxNiBhZHZhbmNlV2lkdGhNYXg7
CisgICAgT1RJbnQxNiBtaW5MZWZ0U2lkZUJlYXJpbmc7CisgICAgT1RJbnQxNiBtaW5SaWdodFNp
ZGVCZWFyaW5nOworICAgIE9USW50MTYgeE1heEV4dGVudDsKKyAgICBPVEludDE2IGNhcmV0U2xv
cGVSaXNlOworICAgIE9USW50MTYgY2FyZXRTbG9wZVJ1bjsKKyAgICBPVEludDE2IGNhcmV0T2Zm
c2V0OworICAgIE9USW50MTYgcmVzZXJ2ZWRbNF07CisgICAgT1RJbnQxNiBtZXRyaWNEYXRhRm9y
bWF0OworICAgIE9UVUludDE2IG51bWJlck9mSE1ldHJpY3M7Cit9OworCitzdHJ1Y3QgT1RWaGVh
VGFibGUgeworICAgIE9URml4ZWQgdmVyc2lvbjsKKyAgICBPVEludDE2IGFzY2VudDsKKyAgICBP
VEludDE2IGRlc2NlbnQ7CisgICAgT1RJbnQxNiBsaW5lR2FwOworICAgIE9USW50MTYgYWR2YW5j
ZUhlaWdodE1heDsKKyAgICBPVEludDE2IG1pblRvcFNpZGVCZWFyaW5nOworICAgIE9USW50MTYg
bWluQm90dG9tU2lkZUJlYXJpbmc7CisgICAgT1RJbnQxNiB5TWF4RXh0ZW50OworICAgIE9USW50
MTYgY2FyZXRTbG9wZVJpc2U7CisgICAgT1RJbnQxNiBjYXJldFNsb3BlUnVuOworICAgIE9USW50
MTYgY2FyZXRPZmZzZXQ7CisgICAgT1RJbnQxNiByZXNlcnZlZFs0XTsKKyAgICBPVEludDE2IG1l
dHJpY0RhdGFGb3JtYXQ7CisgICAgT1RVSW50MTYgbnVtT2ZMb25nVmVyTWV0cmljczsKK307CisK
K3N0cnVjdCBPVEhtdHhUYWJsZSB7CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgT1RVSW50
MTYgYWR2YW5jZVdpZHRoOworICAgICAgICBPVEludDE2IGxzYjsKKyAgICB9IGVudHJpZXNbMV07
Cit9OworCitzdHJ1Y3QgT1RWbXR4VGFibGUgeworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAg
IE9UVUludDE2IGFkdmFuY2VIZWlnaHQ7CisgICAgICAgIE9USW50MTYgdG9wU2lkZUJlYXJpbmc7
CisgICAgfSBlbnRyaWVzWzFdOworfTsKKworc3RydWN0IE9UVk9SR1RhYmxlIHsKKyAgICBPVFVJ
bnQxNiBtYWpvclZlcnNpb247CisgICAgT1RVSW50MTYgbWlub3JWZXJzaW9uOworICAgIE9USW50
MTYgZGVmYXVsdFZlcnRPcmlnaW5ZOworICAgIE9UVUludDE2IG51bVZlcnRPcmlnaW5ZTWV0cmlj
czsKKyAgICBzdHJ1Y3QgVmVydE9yaWdpbllNZXRyaWNzIHsKKyAgICAgICAgT1RVSW50MTYgZ2x5
cGhJbmRleDsKKyAgICAgICAgT1RJbnQxNiB2ZXJ0T3JpZ2luWTsKKyAgICB9IHZlcnRPcmlnaW5Z
TWV0cmljc1sxXTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKK30gLy8gbmFtZXNwYWNlIE9wZW5U
eXBlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworT3BlblR5cGVWZXJ0aWNhbERhdGE6Ok9wZW5U
eXBlVmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKKyAg
ICA6IG1fZGVmYXVsdFZlcnRPcmlnaW5ZKDApCit7CisgICAgLy8gTG9hZCBoaGVhIGFuZCBobXR4
IHRvIGdldCB4LWNvbXBvbmVudCBvZiB2ZXJ0aWNhbCBvcmlnaW5zLgorICAgIC8vIElmIHRoZXNl
IHRhYmxlcyBhcmUgbWlzc2luZywgaXQncyBub3QgYW4gT3BlblR5cGUgZm9udC4KKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZShPVEho
ZWFUYWcpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c2l6ZSgpIDwgc2l6ZW9mKE9USGhl
YVRhYmxlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IE9USGhlYVRhYmxlKiBoaGVhID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBPVEhoZWFUYWJsZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAg
ICB1aW50MTZfdCBjb3VudEhtdHhFbnRyaWVzID0gaGhlYS0+bnVtYmVyT2ZITWV0cmljczsKKyAg
ICBpZiAoIWNvdW50SG10eEVudHJpZXMpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJudW1iZXJPZkhN
ZXRyaWNzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBidWZmZXIgPSBwbGF0Zm9y
bURhdGEub3BlblR5cGVUYWJsZShPVEhtdHhUYWcpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZl
ci0+c2l6ZSgpIDwgc2l6ZW9mKE9USG10eFRhYmxlKSkgeworICAgICAgICBMT0dfRVJST1IoImho
ZWEgZXhpc3RzIGJ1dCBobXR4IGRvZXMgbm90Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY29uc3QgT1RIbXR4VGFibGUqIGhtdHggPSByZWludGVycHJldF9jYXN0PGNvbnN0IE9USG10
eFRhYmxlKj4oYnVmZmVyLT5kYXRhKCkpOworICAgIG1fYWR2YW5jZVdpZHRocy5yZXNpemUoY291
bnRIbXR4RW50cmllcyk7CisgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGNvdW50SG10eEVu
dHJpZXM7ICsraSkKKyAgICAgICAgbV9hZHZhbmNlV2lkdGhzW2ldID0gaG10eC0+ZW50cmllc1tp
XS5hZHZhbmNlV2lkdGg7CisKKyAgICAvLyBMb2FkIHZoZWEgZmlyc3QuIFRoaXMgdGFibGUgaXMg
cmVxdWlyZWQgZm9yIGZvbnRzIHRoYXQgc3VwcG9ydCB2ZXJ0aWNhbCBmbG93LgorICAgIGJ1ZmZl
ciA9IHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlKE9UVmhlYVRhZyk7CisgICAgaWYgKCFidWZm
ZXIgfHwgYnVmZmVyLT5zaXplKCkgPCBzaXplb2YoT1RWaGVhVGFibGUpKQorICAgICAgICByZXR1
cm47CisgICAgY29uc3QgT1RWaGVhVGFibGUqIHZoZWEgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IE9UVmhlYVRhYmxlKj4oYnVmZmVyLT5kYXRhKCkpOworICAgIHVpbnQxNl90IGNvdW50Vm10eEVu
dHJpZXMgPSB2aGVhLT5udW1PZkxvbmdWZXJNZXRyaWNzOworICAgIGlmICghY291bnRWbXR4RW50
cmllcykgeworICAgICAgICBMT0dfRVJST1IoIm51bU9mTG9uZ1Zlck1ldHJpY3MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIExvYWQgVk9SRy4gVGhpcyB0YWJsZSBpcyBvcHRp
b25hbC4KKyAgICBidWZmZXIgPSBwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZShPVFZPUkdUYWcp
OworICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5zaXplKCkgPj0gc2l6ZW9mKE9UVk9SR1RhYmxl
KSkgeworICAgICAgICBjb25zdCBPVFZPUkdUYWJsZSogdm9yZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgT1RWT1JHVGFibGUqPihidWZmZXItPmRhdGEoKSk7CisgICAgICAgIG1fZGVmYXVsdFZl
cnRPcmlnaW5ZID0gdm9yZy0+ZGVmYXVsdFZlcnRPcmlnaW5ZOworICAgICAgICB1aW50MTZfdCBj
b3VudFZlcnRPcmlnaW5ZTWV0cmljcyA9IHZvcmctPm51bVZlcnRPcmlnaW5ZTWV0cmljczsKKyAg
ICAgICAgaWYgKCFjb3VudFZlcnRPcmlnaW5ZTWV0cmljcykgeworICAgICAgICAgICAgLy8gQWRk
IG9uZSBlbnRyeSBzbyB0aGF0IGhhc1ZPUkcoKSBiZWNvbWVzIHRydWUKKyAgICAgICAgICAgIG1f
dmVydE9yaWdpblkuc2V0KDAsIG1fZGVmYXVsdFZlcnRPcmlnaW5ZKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBjb3VudFZlcnRPcmlnaW5Z
TWV0cmljczsgKytpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgT1RWT1JHVGFibGU6OlZlcnRP
cmlnaW5ZTWV0cmljcyYgbWV0cmljcyA9IHZvcmctPnZlcnRPcmlnaW5ZTWV0cmljc1tpXTsKKyAg
ICAgICAgICAgICAgICBtX3ZlcnRPcmlnaW5ZLnNldChtZXRyaWNzLmdseXBoSW5kZXgsIG1ldHJp
Y3MudmVydE9yaWdpblkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gTG9hZCB2bXR4IHRoZW4uIFRoaXMgdGFibGUgaXMgcmVxdWlyZWQgZm9yIGZvbnRzIHRoYXQg
c3VwcG9ydCB2ZXJ0aWNhbCBmbG93LgorICAgIGJ1ZmZlciA9IHBsYXRmb3JtRGF0YS5vcGVuVHlw
ZVRhYmxlKE9UVm10eFRhZyk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zaXplKCkgPCBz
aXplb2YoT1RWbXR4VGFibGUpKSB7CisgICAgICAgIExPR19FUlJPUigidmhlYSBleGlzdHMgYnV0
IHZtdHggZG9lcyBub3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBPVFZt
dHhUYWJsZSogdm10eCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT1RWbXR4VGFibGUqPihidWZm
ZXItPmRhdGEoKSk7CisgICAgbV9hZHZhbmNlSGVpZ2h0cy5yZXNpemUoY291bnRWbXR4RW50cmll
cyk7CisgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IGNvdW50Vm10eEVudHJpZXM7ICsraSkK
KyAgICAgICAgbV9hZHZhbmNlSGVpZ2h0c1tpXSA9IHZtdHgtPmVudHJpZXNbaV0uYWR2YW5jZUhl
aWdodDsKKworICAgIC8vIFZPUkcgaXMgcHJlZmVycmVkIHdheSB0byBjYWxjdWxhdGUgdmlydGlj
YWwgb3JpZ2luIHRoYW4gdm10eCwKKyAgICAvLyBzbyBsb2FkIHRvcFNpZGVCZWFyaW5nIGZyb20g
dm10eCBvbmx5IGlmIFZPUkcgaXMgbWlzc2luZy4KKyAgICBpZiAoaGFzVk9SRygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzaXplX3Qgc2l6ZUV4dHJhID0gYnVmZmVyLT5zaXplKCkgLSAoc2l6
ZW9mKE9UVm10eFRhYmxlOjpFbnRyeSkgKiBjb3VudFZtdHhFbnRyaWVzKTsKKyAgICBpZiAoYnVm
ZmVyLT5zaXplKCkgPCBzaXplb2YoT1RWbXR4VGFibGU6OkVudHJ5KSAqIGNvdW50Vm10eEVudHJp
ZXMgfHwgKHNpemVFeHRyYSAlIHNpemVvZihPVEludDE2KSkpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJ2bXR4IGhhcyBpbmNvcnJlY3QgdHNiIGNvdW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgc2l6ZV90IGNvdW50VG9wU2lkZUJlYXJpbmdzID0gY291bnRWbXR4RW50cmllcyArIHNp
emVFeHRyYSAvIHNpemVvZihPVEludDE2KTsKKyAgICBtX3RvcFNpZGVCZWFyaW5ncy5yZXNpemUo
Y291bnRUb3BTaWRlQmVhcmluZ3MpOworICAgIHNpemVfdCBpOworICAgIGZvciAoaSA9IDA7IGkg
PCBjb3VudFZtdHhFbnRyaWVzOyArK2kpCisgICAgICAgIG1fdG9wU2lkZUJlYXJpbmdzW2ldID0g
dm10eC0+ZW50cmllc1tpXS50b3BTaWRlQmVhcmluZzsKKyAgICBpZiAoaSA8IGNvdW50VG9wU2lk
ZUJlYXJpbmdzKSB7CisgICAgICAgIGNvbnN0IE9USW50MTYqIHBUb3BTaWRlQmVhcmluZ3NFeHRy
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT1RJbnQxNio+KCZ2bXR4LT5lbnRyaWVzW2NvdW50
Vm10eEVudHJpZXNdKTsKKyAgICAgICAgZm9yICg7IGkgPCBjb3VudFRvcFNpZGVCZWFyaW5nczsg
KytpLCArK3BUb3BTaWRlQmVhcmluZ3NFeHRyYSkKKyAgICAgICAgICAgIG1fdG9wU2lkZUJlYXJp
bmdzW2ldID0gKnBUb3BTaWRlQmVhcmluZ3NFeHRyYTsKKyAgICB9Cit9CisKK2Zsb2F0IE9wZW5U
eXBlVmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
LCBHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBzaXplX3QgY291bnRIZWlnaHRzID0gbV9hZHZh
bmNlSGVpZ2h0cy5zaXplKCk7CisgICAgaWYgKGNvdW50SGVpZ2h0cykgeworICAgICAgICB1aW50
MTZfdCBhZHZhbmNlRlVuaXQgPSBtX2FkdmFuY2VIZWlnaHRzW2dseXBoIDwgY291bnRIZWlnaHRz
ID8gZ2x5cGggOiBjb3VudEhlaWdodHMgLSAxXTsKKyAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGFk
dmFuY2VGVW5pdCAqIGZvbnQtPnNpemVQZXJVbml0KCk7CisgICAgICAgIHJldHVybiBhZHZhbmNl
OworICAgIH0KKworICAgIC8vIE5vIHZlcnRpY2FsIGluZm8gaW4gdGhlIGZvbnQgZmlsZTsgdXNl
IGhlaWdodCBhcyBhZHZhbmNlLgorICAgIHJldHVybiBmb250LT5mb250TWV0cmljcygpLmhlaWdo
dCgpOworfQorCit2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRyYW5zbGF0
aW9uc0ZvckdseXBocyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGgqIGds
eXBocywgc2l6ZV90IGNvdW50LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3QKK3sKKyAgICBzaXpl
X3QgY291bnRXaWR0aHMgPSBtX2FkdmFuY2VXaWR0aHMuc2l6ZSgpOworICAgIEFTU0VSVChjb3Vu
dFdpZHRocyA+IDApOworICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBtZXRyaWNzID0gZm9udC0+Zm9u
dE1ldHJpY3MoKTsKKyAgICBmbG9hdCBzaXplUGVyVW5pdCA9IGZvbnQtPnNpemVQZXJVbml0KCk7
CisgICAgZmxvYXQgYXNjZW50ID0gbWV0cmljcy5hc2NlbnQoKTsKKyAgICBib29sIHVzZVZPUkcg
PSBoYXNWT1JHKCk7CisgICAgc2l6ZV90IGNvdW50VG9wU2lkZUJlYXJpbmdzID0gbV90b3BTaWRl
QmVhcmluZ3Muc2l6ZSgpOworICAgIGZsb2F0IGRlZmF1bHRWZXJ0T3JpZ2luWSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICBmb3IgKGZsb2F0KiBlbmQgPSAm
KG91dFhZQXJyYXlbY291bnQgKiAyXSk7IG91dFhZQXJyYXkgIT0gZW5kOyArK2dseXBocywgb3V0
WFlBcnJheSArPSAyKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gKmdseXBoczsKKyAgICAgICAg
dWludDE2X3Qgd2lkdGhGVW5pdCA9IG1fYWR2YW5jZVdpZHRoc1tnbHlwaCA8IGNvdW50V2lkdGhz
ID8gZ2x5cGggOiBjb3VudFdpZHRocyAtIDFdOworICAgICAgICBmbG9hdCB3aWR0aCA9IHdpZHRo
RlVuaXQgKiBzaXplUGVyVW5pdDsKKyAgICAgICAgb3V0WFlBcnJheVswXSA9IC13aWR0aCAvIDI7
CisKKyAgICAgICAgLy8gRm9yIFksIHRyeSBWT1JHIGZpcnN0LgorICAgICAgICBpZiAodXNlVk9S
RykgeworICAgICAgICAgICAgaW50MTZfdCB2ZXJ0T3JpZ2luWUZVbml0ID0gbV92ZXJ0T3JpZ2lu
WS5nZXQoZ2x5cGgpOworICAgICAgICAgICAgaWYgKHZlcnRPcmlnaW5ZRlVuaXQpIHsKKyAgICAg
ICAgICAgICAgICBvdXRYWUFycmF5WzFdID0gLXZlcnRPcmlnaW5ZRlVuaXQgKiBzaXplUGVyVW5p
dDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChpc25hbihkZWZhdWx0VmVydE9yaWdpblkpKQorICAgICAgICAgICAgICAgIGRlZmF1bHRW
ZXJ0T3JpZ2luWSA9IC1tX2RlZmF1bHRWZXJ0T3JpZ2luWSAqIHNpemVQZXJVbml0OworICAgICAg
ICAgICAgb3V0WFlBcnJheVsxXSA9IGRlZmF1bHRWZXJ0T3JpZ2luWTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgbm8gVk9SRywgdHJ5IHZtdHggbmV4
dC4KKyAgICAgICAgaWYgKGNvdW50VG9wU2lkZUJlYXJpbmdzKSB7CisgICAgICAgICAgICBpbnQx
Nl90IHRvcFNpZGVCZWFyaW5nRlVuaXQgPSBtX3RvcFNpZGVCZWFyaW5nc1tnbHlwaCA8IGNvdW50
VG9wU2lkZUJlYXJpbmdzID8gZ2x5cGggOiBjb3VudFRvcFNpZGVCZWFyaW5ncyAtIDFdOworICAg
ICAgICAgICAgZmxvYXQgdG9wU2lkZUJlYXJpbmcgPSB0b3BTaWRlQmVhcmluZ0ZVbml0ICogc2l6
ZVBlclVuaXQ7CisgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udC0+Ym91bmRzRm9y
R2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgb3V0WFlBcnJheVsxXSA9IGJvdW5kcy55KCkgLSB0
b3BTaWRlQmVhcmluZzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gTm8gdmVydGljYWwgaW5mbyBpbiB0aGUgZm9udCBmaWxlOyB1c2UgYXNjZW50IGFzIHZl
cnRpY2FsIG9yaWdpbi4KKyAgICAgICAgb3V0WFlBcnJheVsxXSA9IC1hc2NlbnQ7CisgICAgfQor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU0ZWU3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5
cGVWZXJ0aWNhbERhdGEuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEtvamkgSXNoaWkgPGtvamlpc2hpQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
T3BlblR5cGVWZXJ0aWNhbERhdGFfaAorI2RlZmluZSBPcGVuVHlwZVZlcnRpY2FsRGF0YV9oCisK
KyNpbmNsdWRlICJHbHlwaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9y
bURhdGE7CitjbGFzcyBHbHlwaFBhZ2U7CitjbGFzcyBTaW1wbGVGb250RGF0YTsKKworY2xhc3Mg
T3BlblR5cGVWZXJ0aWNhbERhdGEgeworcHVibGljOgorICAgIE9wZW5UeXBlVmVydGljYWxEYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKworICAgIGJvb2wgaXNPcGVuVHlwZSgpIGNvbnN0
IHsgcmV0dXJuICFtX2FkdmFuY2VXaWR0aHMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNWZXJ0
aWNhbE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiAhbV9hZHZhbmNlSGVpZ2h0cy5pc0VtcHR5KCk7
IH0KKyAgICBmbG9hdCBhZHZhbmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgR2x5cGgp
IGNvbnN0OworICAgIHZvaWQgZ2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMoY29uc3Qg
U2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaCosIHNpemVfdCwgZmxvYXQqIG91dFhZQXJyYXkp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaGFzVk9SRygpIGNvbnN0IHsgcmV0dXJuICFt
X3ZlcnRPcmlnaW5ZLmlzRW1wdHkoKTsgfQorCisgICAgVmVjdG9yPHVpbnQxNl90PiBtX2FkdmFu
Y2VXaWR0aHM7CisgICAgVmVjdG9yPHVpbnQxNl90PiBtX2FkdmFuY2VIZWlnaHRzOworICAgIFZl
Y3RvcjxpbnQxNl90PiBtX3RvcFNpZGVCZWFyaW5nczsKKyAgICBpbnQxNl90IG1fZGVmYXVsdFZl
cnRPcmlnaW5ZOworICAgIEhhc2hNYXA8R2x5cGgsIGludDE2X3Q+IG1fdmVydE9yaWdpblk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBPcGVuVHlwZVZlcnRpY2Fs
RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKaW5kZXggOTg2MGRmNi4uMTA4MWRlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSFdu
ZERDLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03NCw2ICs3NSwyNSBAQCBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcQogICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKIH0KIAorI2lmIFVTRShDRykK
K1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxl
KHVpbnQzMl90IHRhYmxlKSBjb25zdAoreworICAgIEhXbmREQyBoZGMoMCk7CisgICAgSEdESU9C
SiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQoKSk7CisKKyAgICBEV09SRCBzaXpl
ID0gR2V0Rm9udERhdGEoaGRjLCB0YWJsZSwgMCwgMCwgMCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gYnVmZmVyOworICAgIGlmIChzaXplICE9IEdESV9FUlJPUikgeworICAgICAgICBidWZm
ZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzaXplKTsKKyAgICAgICAgRFdPUkQgcmVzdWx0ID0g
R2V0Rm9udERhdGEoaGRjLCB0YWJsZSwgMCwgKFBWT0lEKWJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsK
KyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBzaXplKTsKKyAgICB9CisKKyAgICBTZWxlY3RPYmpl
Y3QoaGRjLCBvbGRGb250KTsKKyAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsKK30KKyNlbmRp
ZgorCiAjaWZuZGVmIE5ERUJVRwogU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9u
KCkgY29uc3QKIHsK
</data>
<flag name="review"
          id="138166"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134390</attachid>
            <date>2012-03-28 14:03:35 -0700</date>
            <delta_ts>2012-03-29 20:45:29 -0700</delta_ts>
            <desc>OpenTypeVerticalData class and its related changes after mitz&apos;s 2nd review</desc>
            <filename>81326-7.patch</filename>
            <type>text/plain</type>
            <size>25098</size>
            <attacher name="Koji Ishii">kojii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlOTlmZTJhLi4wNzI5N2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYg
QEAKKzIwMTItMDMtMjggIEtvamkgSXNoaWkgIDxrb2ppaXNoaUBnbWFpbC5jb20+CisKKworICAg
ICAgICBWZXJ0aWNhbCBmbG93IHN1cHBvcnQgZm9yIE9wZW5UeXBlIGZvbnRzIHdpdGggdGhlIGxl
YXN0IHBsYXRmb3JtIGRlcGVuZGVuY2llcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODEzMjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xhc3MgT3BlblR5
cGVWZXJ0aWNhbERhdGEgdG8gcmVhZAorICAgICAgICB2ZXJ0aWNhbCBmb250IG1ldHJpY3MgZnJv
bSBPcGVuVHlwZSBmb250cy4KKworICAgICAgICBDdXJyZW50bHksIFdlYktpdCByZWxpZXMgb24g
cGxhdG9ybSBBUElzIHRvIGRvIHRoZSB3b3JrLiBIb3dldmVyLAorICAgICAgICBzb21lIHBsYXRm
b3JtcyBzdWNoIGFzIFdpbmRvd3MgbGFjayBzdXBwb3J0IGZvciBhbGwgdGhlIGNhcGFiaWxpdGll
cworICAgICAgICBXZWJLaXQgcmVxdWlyZXMgZm9yIHZlcnRpY2FsIGZsb3cgYW5kIHRoZSB0ZXh0
LW9yaWVudGF0aW9uIHByb3BlcnR5CisgICAgICAgIHRvIHdvcmsgY29ycmVjdGx5LiBSZWFkaW5n
IE9wZW5UeXBlIHRhYmxlcyBkaXJlY3RseSBhbHNvIGdpdmVzCisgICAgICAgIGJlbmVmaXRzIGlu
IGNvbnNpc3RlbnQgYmVoYXZpb3IgYW1vbmcgdGhlIFdlYktpdCBwbGF0Zm9ybXMuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBpcyBmb3IgYW55IHBsYXRmb3JtcyB0aGF0IHdhbnQgdG8gcGFyc2UgT3Bl
blR5cGUgdGFibGVzCisgICAgICAgIGRpcmVjdGx5LCBidXQgaXQncyBjdXJyZW50bHkgaW5jbHVk
ZWQgb25seSBpbiBDR1dpbiBhbmQgaXNuJ3Qgb24gYW55CisgICAgICAgIGNvZGUgcGF0aCBldmVu
IG9uIENHV2luIHlldC4gQ2FsbGVyJ3Mgc2lkZSBjaGFuZ2UgZm9yIENHV2luIGFuZAorICAgICAg
ICBzdXBwb3J0IGZvciBvdGhlciBwbGF0ZnJvbXMgd2lsbCBiZSBpbiBzZXBhcmF0ZSBidWdzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcmUgcmVxdWlyZWQuIE5vIGJlaGF2aW9yIGNoYW5nZXMu
CisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogQWRkZWQgT3BlblR5
cGVUeXBlcy5oIGFuZCBPcGVuVHlwZVZlcnRpY2FsRGF0YS5oL2NwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOiBBZGQgY3JlYXRlKHNpemVfdCkKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOiBBZGQgY3JlYXRlKHNpemVfdCkKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFNoYXJlZEJ1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOiBBZGRl
ZCBvcGVuVHlwZVRhYmxlKCkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZvbnRQbGF0
Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6
IEFkZGVkIHNpemVQZXJVbml0KCkuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
c2l6ZVBlclVuaXQpOiBzaXplKCkgLyB1bml0c1BlckVtKCkgZm9yIGxlc3MgbXVsdGlwbGljYXRp
b24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlcy5o
OiBBZGRlZCBPcGVuVHlwZSBiYXNpYyB0eXBlIGRlZmluaXRpb25zLgorICAgICAgICAoT3BlblR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGU6OkJpZ0VuZGlhblNob3J0OjpvcGVyYXRv
ciBzaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZTo6QmlnRW5kaWFuU2hvcnQ6OkJp
Z0VuZGlhblNob3J0KToKKyAgICAgICAgKEJpZ0VuZGlhblNob3J0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok9wZW5UeXBlOjpCaWdFbmRpYW5VU2hvcnQ6Om9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlOjpCaWdFbmRpYW5VU2hvcnQ6OkJpZ0VuZGlhblVT
aG9ydCk6CisgICAgICAgIChCaWdFbmRpYW5VU2hvcnQpOgorICAgICAgICAoV2ViQ29yZTo6T3Bl
blR5cGU6OkJpZ0VuZGlhbkxvbmc6Om9wZXJhdG9yIGludCk6CisgICAgICAgIChXZWJDb3JlOjpP
cGVuVHlwZTo6QmlnRW5kaWFuTG9uZzo6QmlnRW5kaWFuTG9uZyk6CisgICAgICAgIChCaWdFbmRp
YW5Mb25nKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlOjpCaWdFbmRpYW5VTG9uZzo6b3Bl
cmF0b3IgdW5zaWduZWQpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGU6OkJpZ0VuZGlhblVM
b25nOjpCaWdFbmRpYW5VTG9uZyk6CisgICAgICAgIChCaWdFbmRpYW5VTG9uZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKE9wZW5UeXBlKToKKyAgICAgICAgKEhoZWFUYWJsZSk6CisgICAgICAg
IChWaGVhVGFibGUpOgorICAgICAgICAoRW50cnkpOgorICAgICAgICAoVk9SR1RhYmxlKToKKyAg
ICAgICAgKFZlcnRPcmlnaW5ZTWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZTo6
Vk9SR1RhYmxlOjpyZXF1aXJlZFNpemUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjp2YWxpZGF0ZWRQdHIpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNh
bERhdGE6Ok9wZW5UeXBlVmVydGljYWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBl
VmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KTogQWR2YW5jZSBoZWlnaHQgZm9yIGEgZ2x5cGgu
CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6Z2V0VmVydGljYWxUcmFu
c2xhdGlvbnNGb3JHbHlwaHMpOiBWZXJ0aWNhbCBvcmlnaW4uCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKE9wZW5UeXBlVmVydGljYWxEYXRhKTogQSBuZXcgY2xhc3Mg
dG8gaGFuZGxlIHZlcnRpY2FsIGZsb3cgZGF0YSBpbiBPcGVuVHlwZS4KKyAgICAgICAgKFdlYkNv
cmU6Ok9wZW5UeXBlVmVydGljYWxEYXRhOjppc09wZW5UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wZW5UeXBlVmVydGljYWxEYXRhOjpoYXNWZXJ0aWNhbE1ldHJpY3MpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6Omhhc1ZPUkcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJsZSk6IElt
cGxlbWVudGVkIG9wZW5UeXBlVGFibGUoKSBmb3IgV2luMzIuCisKIDIwMTItMDMtMjYgIEp1c3Rp
biBOb3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQ3Jh
c2ggaW4gQ2FudmFzMkRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDA4ZWU3ODAuLmUwN2U5
YWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC0yOTMwNCw2ICsyOTMwNCwxMCBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxl
CisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5U
eXBlVHlwZXMuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVV0aWxpdGll
cy5jcHAiCiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KQEAgLTI5MzEyLDYgKzI5MzE2LDE0IEBACiAJ
CQkJCQk+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwIgorCQkJ
CQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBlVmVydGljYWxEYXRhLmgiCisJCQkJCQk+
CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3Ncd2luXFJlZkNvdW50ZWRHRElIYW5kbGUuaCIKIAkJCQkJCT4KIAkJCQkJPC9G
aWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZWU2YTI5
Zi4uODJlZmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBA
IC02Miw2ICs2MiwxMiBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcigpCiB7CiB9CiAKK1No
YXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKHNpemVfdCBzaXplKQorICAgIDogbV9zaXplKHNpemUp
CisgICAgLCBtX2J1ZmZlcihzaXplKQoreworfQorCiBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZl
cihjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKICAgICA6IG1fc2l6ZSgwKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCBmZTNlNGI2Li5iNjZhMDMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtNDgsNiArNDgsNyBAQCBjbGFz
cyBQdXJnZWFibGVCdWZmZXI7CiBjbGFzcyBTaGFyZWRCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxTaGFyZWRCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIpOyB9Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGUoc2l6ZV90IHNpemUpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIoc2l6ZSkpOyB9CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgY2hhciogYywgaW50IGkpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIoYywgaSkpOyB9CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBjcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciogYywgaW50IGkp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRCdWZmZXIoYywgaSkpOyB9CiAKQEAgLTExNSw2
ICsxMTYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU2hhcmVkQnVmZmVyKCk7CisgICAg
U2hhcmVkQnVmZmVyKHNpemVfdCk7CiAgICAgU2hhcmVkQnVmZmVyKGNvbnN0IGNoYXIqLCBpbnQp
OwogICAgIFNoYXJlZEJ1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyKiwgaW50KTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURh
dGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEu
aAppbmRleCBjNzMwYzc0Li5lYTU0MzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC05MSw2ICs5MSw3IEBAIHR5cGVk
ZWYgVUludDMyIEFUU0ZvbnRSZWY7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnRE
ZXNjcmlwdGlvbjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogI2lmIE9TKERBUldJTikKIGlubGlu
ZSBDVEZvbnRSZWYgdG9DVEZvbnRSZWYoTlNGb250ICpuc0ZvbnQpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Q1RGb250UmVmPihuc0ZvbnQpOyB9CkBAIC0yNzYsNiArMjc3LDkgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCisjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0cpCisgICAgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IG9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0
OworI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVG
b250RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuaAppbmRleCBkZDg2ZjAwNC4uZmQyZmZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCkBAIC0xMTgsNiArMTE4LDcgQEAgcHVi
bGljOgogCiAgICAgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0
cmljczsgfQogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICBmbG9hdCBzaXplUGVyVW5pdCgpIGNvbnN0IHsgcmV0
dXJuIHBsYXRmb3JtRGF0YSgpLnNpemUoKSAvIChmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA/
IGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpIDogMSk7IH0KICAgICAKICAgICBmbG9hdCBtYXhD
aGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heENoYXJXaWR0aDsgfQogICAgIHZvaWQgc2V0
TWF4Q2hhcldpZHRoKGZsb2F0IG1heENoYXJXaWR0aCkgeyBtX21heENoYXJXaWR0aCA9IG1heENo
YXJXaWR0aDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjlmYzc2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVR5cGVzLmgKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBLb2ppIElzaGlpIDxrb2ppaXNoaUBnbWFpbC5jb20+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE9wZW5UeXBlVHlwZXNfaAorI2RlZmluZSBPcGVuVHlwZVR5cGVz
X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIE9wZW5UeXBlIHsKKworc3RydWN0
IEJpZ0VuZGlhblNob3J0IHsKKyAgICBvcGVyYXRvciBzaG9ydCgpIGNvbnN0IHsgcmV0dXJuICh2
ICYgMHgwMGZmKSA8PCA4IHwgdiA+PiA4OyB9CisgICAgQmlnRW5kaWFuU2hvcnQoc2hvcnQgdSkg
OiB2KCh1ICYgMHgwMGZmKSA8PCA4IHwgdSA+PiA4KSB7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCB2
OworfTsKKworc3RydWN0IEJpZ0VuZGlhblVTaG9ydCB7CisgICAgb3BlcmF0b3IgdW5zaWduZWQg
c2hvcnQoKSBjb25zdCB7IHJldHVybiAodiAmIDB4MDBmZikgPDwgOCB8IHYgPj4gODsgfQorICAg
IEJpZ0VuZGlhblVTaG9ydCh1bnNpZ25lZCBzaG9ydCB1KSA6IHYoKHUgJiAweDAwZmYpIDw8IDgg
fCB1ID4+IDgpIHsgfQorICAgIHVuc2lnbmVkIHNob3J0IHY7Cit9OworCitzdHJ1Y3QgQmlnRW5k
aWFuTG9uZyB7CisgICAgb3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4gKHYgJiAweGZmKSA8
PCAyNCB8ICh2ICYgMHhmZjAwKSA8PCA4IHwgKHYgJiAweGZmMDAwMCkgPj4gOCB8IHYgPj4gMjQ7
IH0KKyAgICBCaWdFbmRpYW5Mb25nKGludCB1KSA6IHYoKHUgJiAweGZmKSA8PCAyNCB8ICh1ICYg
MHhmZjAwKSA8PCA4IHwgKHUgJiAweGZmMDAwMCkgPj4gOCB8IHUgPj4gMjQpIHsgfQorICAgIHVu
c2lnbmVkIHY7Cit9OworCitzdHJ1Y3QgQmlnRW5kaWFuVUxvbmcgeworICAgIG9wZXJhdG9yIHVu
c2lnbmVkKCkgY29uc3QgeyByZXR1cm4gKHYgJiAweGZmKSA8PCAyNCB8ICh2ICYgMHhmZjAwKSA8
PCA4IHwgKHYgJiAweGZmMDAwMCkgPj4gOCB8IHYgPj4gMjQ7IH0KKyAgICBCaWdFbmRpYW5VTG9u
Zyh1bnNpZ25lZCB1KSA6IHYoKHUgJiAweGZmKSA8PCAyNCB8ICh1ICYgMHhmZjAwKSA8PCA4IHwg
KHUgJiAweGZmMDAwMCkgPj4gOCB8IHUgPj4gMjQpIHsgfQorICAgIHVuc2lnbmVkIHY7Cit9Owor
Cit0eXBlZGVmIEJpZ0VuZGlhblNob3J0IEludDE2OwordHlwZWRlZiBCaWdFbmRpYW5VU2hvcnQg
VUludDE2OwordHlwZWRlZiBCaWdFbmRpYW5Mb25nIEludDMyOwordHlwZWRlZiBCaWdFbmRpYW5V
TG9uZyBVSW50MzI7CisKK3R5cGVkZWYgVUludDMyIEZpeGVkOwordHlwZWRlZiBVSW50MTYgT2Zm
c2V0OwordHlwZWRlZiBVSW50MTYgR2x5cGhJRDsKKworLy8gT1RUYWcgaXMgbmF0aXZlIGJlY2F1
c2UgaXQncyBvbmx5IGNvbXBhcmVkIGFnYWluc3QgY29uc3RhbnRzLCBzbyB3ZSBkb24ndAorLy8g
ZG8gZW5kaWFuIGNvbnZlcnNpb24gaGVyZSBidXQgbWFrZSBzdXJlIGNvbnN0YW50cyBhcmUgaW4g
YmlnLWVuZGlhbiBvcmRlci4KKy8vIE5vdGUgdGhhdCBtdWx0aS1jaGFyYWN0ZXIgbGl0ZXJhbCBp
cyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGluIEMrKzB4LgordHlwZWRlZiB1aW50MzJfdCBUYWc7
CisjZGVmaW5lIE9UX01BS0VfVEFHKGNoMSwgY2gyLCBjaDMsIGNoNCkgKCgoKHVpbnQzMl90KShj
aDQpKSA8PCAyNCkgfCAoKCh1aW50MzJfdCkoY2gzKSkgPDwgMTYpIHwgKCgodWludDMyX3QpKGNo
MikpIDw8IDgpIHwgKCh1aW50MzJfdCkoY2gxKSkpCisKK30gLy8gbmFtZXNwYWNlIE9wZW5UeXBl
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBPcGVuVHlwZVR5cGVzX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlVmVydGljYWxEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43OGViY2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCkBAIC0wLDAg
KzEsMjY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEtvamkgSXNoaWkgPGtvamlpc2hp
QGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJP
cGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiT3BlblR5cGVUeXBlcy5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgT3BlblR5cGUgeworCitlbnVtIHsKKyAgICBIaGVhVGFnID0gT1RfTUFLRV9U
QUcoJ2gnLCAnaCcsICdlJywgJ2EnKSwKKyAgICBIbXR4VGFnID0gT1RfTUFLRV9UQUcoJ2gnLCAn
bScsICd0JywgJ3gnKSwKKyAgICBWaGVhVGFnID0gT1RfTUFLRV9UQUcoJ3YnLCAnaCcsICdlJywg
J2EnKSwKKyAgICBWbXR4VGFnID0gT1RfTUFLRV9UQUcoJ3YnLCAnbScsICd0JywgJ3gnKSwKKyAg
ICBWT1JHVGFnID0gT1RfTUFLRV9UQUcoJ1YnLCAnTycsICdSJywgJ0cnKSwKK307CisKKyNwcmFn
bWEgcGFjaygxKQorCitzdHJ1Y3QgSGhlYVRhYmxlIHsKKyAgICBPcGVuVHlwZTo6Rml4ZWQgdmVy
c2lvbjsKKyAgICBPcGVuVHlwZTo6SW50MTYgYXNjZW5kZXI7CisgICAgT3BlblR5cGU6OkludDE2
IGRlc2NlbmRlcjsKKyAgICBPcGVuVHlwZTo6SW50MTYgbGluZUdhcDsKKyAgICBPcGVuVHlwZTo6
SW50MTYgYWR2YW5jZVdpZHRoTWF4OworICAgIE9wZW5UeXBlOjpJbnQxNiBtaW5MZWZ0U2lkZUJl
YXJpbmc7CisgICAgT3BlblR5cGU6OkludDE2IG1pblJpZ2h0U2lkZUJlYXJpbmc7CisgICAgT3Bl
blR5cGU6OkludDE2IHhNYXhFeHRlbnQ7CisgICAgT3BlblR5cGU6OkludDE2IGNhcmV0U2xvcGVS
aXNlOworICAgIE9wZW5UeXBlOjpJbnQxNiBjYXJldFNsb3BlUnVuOworICAgIE9wZW5UeXBlOjpJ
bnQxNiBjYXJldE9mZnNldDsKKyAgICBPcGVuVHlwZTo6SW50MTYgcmVzZXJ2ZWRbNF07CisgICAg
T3BlblR5cGU6OkludDE2IG1ldHJpY0RhdGFGb3JtYXQ7CisgICAgT3BlblR5cGU6OlVJbnQxNiBu
dW1iZXJPZkhNZXRyaWNzOworfTsKKworc3RydWN0IFZoZWFUYWJsZSB7CisgICAgT3BlblR5cGU6
OkZpeGVkIHZlcnNpb247CisgICAgT3BlblR5cGU6OkludDE2IGFzY2VudDsKKyAgICBPcGVuVHlw
ZTo6SW50MTYgZGVzY2VudDsKKyAgICBPcGVuVHlwZTo6SW50MTYgbGluZUdhcDsKKyAgICBPcGVu
VHlwZTo6SW50MTYgYWR2YW5jZUhlaWdodE1heDsKKyAgICBPcGVuVHlwZTo6SW50MTYgbWluVG9w
U2lkZUJlYXJpbmc7CisgICAgT3BlblR5cGU6OkludDE2IG1pbkJvdHRvbVNpZGVCZWFyaW5nOwor
ICAgIE9wZW5UeXBlOjpJbnQxNiB5TWF4RXh0ZW50OworICAgIE9wZW5UeXBlOjpJbnQxNiBjYXJl
dFNsb3BlUmlzZTsKKyAgICBPcGVuVHlwZTo6SW50MTYgY2FyZXRTbG9wZVJ1bjsKKyAgICBPcGVu
VHlwZTo6SW50MTYgY2FyZXRPZmZzZXQ7CisgICAgT3BlblR5cGU6OkludDE2IHJlc2VydmVkWzRd
OworICAgIE9wZW5UeXBlOjpJbnQxNiBtZXRyaWNEYXRhRm9ybWF0OworICAgIE9wZW5UeXBlOjpV
SW50MTYgbnVtT2ZMb25nVmVyTWV0cmljczsKK307CisKK3N0cnVjdCBIbXR4VGFibGUgeworICAg
IHN0cnVjdCBFbnRyeSB7CisgICAgICAgIE9wZW5UeXBlOjpVSW50MTYgYWR2YW5jZVdpZHRoOwor
ICAgICAgICBPcGVuVHlwZTo6SW50MTYgbHNiOworICAgIH0gZW50cmllc1sxXTsKK307CisKK3N0
cnVjdCBWbXR4VGFibGUgeworICAgIHN0cnVjdCBFbnRyeSB7CisgICAgICAgIE9wZW5UeXBlOjpV
SW50MTYgYWR2YW5jZUhlaWdodDsKKyAgICAgICAgT3BlblR5cGU6OkludDE2IHRvcFNpZGVCZWFy
aW5nOworICAgIH0gZW50cmllc1sxXTsKK307CisKK3N0cnVjdCBWT1JHVGFibGUgeworICAgIE9w
ZW5UeXBlOjpVSW50MTYgbWFqb3JWZXJzaW9uOworICAgIE9wZW5UeXBlOjpVSW50MTYgbWlub3JW
ZXJzaW9uOworICAgIE9wZW5UeXBlOjpJbnQxNiBkZWZhdWx0VmVydE9yaWdpblk7CisgICAgT3Bl
blR5cGU6OlVJbnQxNiBudW1WZXJ0T3JpZ2luWU1ldHJpY3M7CisgICAgc3RydWN0IFZlcnRPcmln
aW5ZTWV0cmljcyB7CisgICAgICAgIE9wZW5UeXBlOjpVSW50MTYgZ2x5cGhJbmRleDsKKyAgICAg
ICAgT3BlblR5cGU6OkludDE2IHZlcnRPcmlnaW5ZOworICAgIH0gdmVydE9yaWdpbllNZXRyaWNz
WzFdOworCisgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVvZigq
dGhpcykgKyBzaXplb2YoVmVydE9yaWdpbllNZXRyaWNzKSAqIChudW1WZXJ0T3JpZ2luWU1ldHJp
Y3MgLSAxKTsgfQorfTsKKworI3ByYWdtYSBwYWNrKCkKKworfSAvLyBuYW1lc3BhY2UgT3BlblR5
cGUKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNvbnN0IFQqIHZhbGlkYXRlZFB0cihjb25zdCBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiYgYnVmZmVyLCBzaXplX3QgY291bnQgPSAxKQoreworICAgIGlm
ICghYnVmZmVyIHx8IGJ1ZmZlci0+c2l6ZSgpIDwgc2l6ZW9mKFQpICogY291bnQpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihidWZmZXIt
PmRhdGEoKSk7Cit9CisKK09wZW5UeXBlVmVydGljYWxEYXRhOjpPcGVuVHlwZVZlcnRpY2FsRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCisgICAgOiBtX2RlZmF1bHRW
ZXJ0T3JpZ2luWSgwKQoreworICAgIC8vIExvYWQgaGhlYSBhbmQgaG10eCB0byBnZXQgeC1jb21w
b25lbnQgb2YgdmVydGljYWwgb3JpZ2lucy4KKyAgICAvLyBJZiB0aGVzZSB0YWJsZXMgYXJlIG1p
c3NpbmcsIGl0J3Mgbm90IGFuIE9wZW5UeXBlIGZvbnQuCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gYnVmZmVyID0gcGxhdGZvcm1EYXRhLm9wZW5UeXBlVGFibGUoT3BlblR5cGU6OkhoZWFUYWcp
OworICAgIGNvbnN0IE9wZW5UeXBlOjpIaGVhVGFibGUqIGhoZWEgPSB2YWxpZGF0ZWRQdHI8T3Bl
blR5cGU6OkhoZWFUYWJsZT4oYnVmZmVyKTsKKyAgICBpZiAoIWhoZWEpCisgICAgICAgIHJldHVy
bjsKKyAgICB1aW50MTZfdCBjb3VudEhtdHhFbnRyaWVzID0gaGhlYS0+bnVtYmVyT2ZITWV0cmlj
czsKKyAgICBpZiAoIWNvdW50SG10eEVudHJpZXMpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnZh
bGlkIG51bWJlck9mSE1ldHJpY3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJ1
ZmZlciA9IHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpIbXR4VGFnKTsKKyAg
ICBjb25zdCBPcGVuVHlwZTo6SG10eFRhYmxlKiBobXR4ID0gdmFsaWRhdGVkUHRyPE9wZW5UeXBl
OjpIbXR4VGFibGU+KGJ1ZmZlciwgY291bnRIbXR4RW50cmllcyk7CisgICAgaWYgKCFobXR4KSB7
CisgICAgICAgIExPR19FUlJPUigiaGhlYSBleGlzdHMgYnV0IGhtdHggZG9lcyBub3QgKG9yIGJy
b2tlbikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2FkdmFuY2VXaWR0aHMucmVz
aXplKGNvdW50SG10eEVudHJpZXMpOworICAgIGZvciAodWludDE2X3QgaSA9IDA7IGkgPCBjb3Vu
dEhtdHhFbnRyaWVzOyArK2kpCisgICAgICAgIG1fYWR2YW5jZVdpZHRoc1tpXSA9IGhtdHgtPmVu
dHJpZXNbaV0uYWR2YW5jZVdpZHRoOworCisgICAgLy8gTG9hZCB2aGVhIGZpcnN0LiBUaGlzIHRh
YmxlIGlzIHJlcXVpcmVkIGZvciBmb250cyB0aGF0IHN1cHBvcnQgdmVydGljYWwgZmxvdy4KKyAg
ICBidWZmZXIgPSBwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6VmhlYVRhZyk7
CisgICAgY29uc3QgT3BlblR5cGU6OlZoZWFUYWJsZSogdmhlYSA9IHZhbGlkYXRlZFB0cjxPcGVu
VHlwZTo6VmhlYVRhYmxlPihidWZmZXIpOworICAgIGlmICghdmhlYSkKKyAgICAgICAgcmV0dXJu
OworICAgIHVpbnQxNl90IGNvdW50Vm10eEVudHJpZXMgPSB2aGVhLT5udW1PZkxvbmdWZXJNZXRy
aWNzOworICAgIGlmICghY291bnRWbXR4RW50cmllcykgeworICAgICAgICBMT0dfRVJST1IoIklu
dmFsaWQgbnVtT2ZMb25nVmVyTWV0cmljcyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gTG9hZCBWT1JHLiBUaGlzIHRhYmxlIGlzIG9wdGlvbmFsLgorICAgIGJ1ZmZlciA9IHBs
YXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpWT1JHVGFnKTsKKyAgICBjb25zdCBP
cGVuVHlwZTo6Vk9SR1RhYmxlKiB2b3JnID0gdmFsaWRhdGVkUHRyPE9wZW5UeXBlOjpWT1JHVGFi
bGU+KGJ1ZmZlcik7CisgICAgaWYgKHZvcmcgJiYgYnVmZmVyLT5zaXplKCkgPj0gdm9yZy0+cmVx
dWlyZWRTaXplKCkpIHsKKyAgICAgICAgbV9kZWZhdWx0VmVydE9yaWdpblkgPSB2b3JnLT5kZWZh
dWx0VmVydE9yaWdpblk7CisgICAgICAgIHVpbnQxNl90IGNvdW50VmVydE9yaWdpbllNZXRyaWNz
ID0gdm9yZy0+bnVtVmVydE9yaWdpbllNZXRyaWNzOworICAgICAgICBpZiAoIWNvdW50VmVydE9y
aWdpbllNZXRyaWNzKSB7CisgICAgICAgICAgICAvLyBBZGQgb25lIGVudHJ5IHNvIHRoYXQgaGFz
Vk9SRygpIGJlY29tZXMgdHJ1ZQorICAgICAgICAgICAgbV92ZXJ0T3JpZ2luWS5zZXQoMCwgbV9k
ZWZhdWx0VmVydE9yaWdpblkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh1
aW50MTZfdCBpID0gMDsgaSA8IGNvdW50VmVydE9yaWdpbllNZXRyaWNzOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBPcGVuVHlwZTo6Vk9SR1RhYmxlOjpWZXJ0T3JpZ2luWU1ldHJpY3Mm
IG1ldHJpY3MgPSB2b3JnLT52ZXJ0T3JpZ2luWU1ldHJpY3NbaV07CisgICAgICAgICAgICAgICAg
bV92ZXJ0T3JpZ2luWS5zZXQobWV0cmljcy5nbHlwaEluZGV4LCBtZXRyaWNzLnZlcnRPcmlnaW5Z
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIExvYWQgdm10eCB0
aGVuLiBUaGlzIHRhYmxlIGlzIHJlcXVpcmVkIGZvciBmb250cyB0aGF0IHN1cHBvcnQgdmVydGlj
YWwgZmxvdy4KKyAgICBidWZmZXIgPSBwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZShPcGVuVHlw
ZTo6Vm10eFRhZyk7CisgICAgY29uc3QgT3BlblR5cGU6OlZtdHhUYWJsZSogdm10eCA9IHZhbGlk
YXRlZFB0cjxPcGVuVHlwZTo6Vm10eFRhYmxlPihidWZmZXIsIGNvdW50Vm10eEVudHJpZXMpOwor
ICAgIGlmICghdm10eCkgeworICAgICAgICBMT0dfRVJST1IoInZoZWEgZXhpc3RzIGJ1dCB2bXR4
IGRvZXMgbm90IChvciBicm9rZW4pIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9h
ZHZhbmNlSGVpZ2h0cy5yZXNpemUoY291bnRWbXR4RW50cmllcyk7CisgICAgZm9yICh1aW50MTZf
dCBpID0gMDsgaSA8IGNvdW50Vm10eEVudHJpZXM7ICsraSkKKyAgICAgICAgbV9hZHZhbmNlSGVp
Z2h0c1tpXSA9IHZtdHgtPmVudHJpZXNbaV0uYWR2YW5jZUhlaWdodDsKKworICAgIC8vIFZPUkcg
aXMgcHJlZmVycmVkIHdheSB0byBjYWxjdWxhdGUgdmVydGljYWwgb3JpZ2luIHRoYW4gdm10eCwK
KyAgICAvLyBzbyBsb2FkIHRvcFNpZGVCZWFyaW5nIGZyb20gdm10eCBvbmx5IGlmIFZPUkcgaXMg
bWlzc2luZy4KKyAgICBpZiAoaGFzVk9SRygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXpl
X3Qgc2l6ZUV4dHJhID0gYnVmZmVyLT5zaXplKCkgLSBzaXplb2YoT3BlblR5cGU6OlZtdHhUYWJs
ZTo6RW50cnkpICogY291bnRWbXR4RW50cmllczsKKyAgICBpZiAoc2l6ZUV4dHJhICUgc2l6ZW9m
KE9wZW5UeXBlOjpJbnQxNikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJ2bXR4IGhhcyBpbmNvcnJl
Y3QgdHNiIGNvdW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZV90IGNvdW50
VG9wU2lkZUJlYXJpbmdzID0gY291bnRWbXR4RW50cmllcyArIHNpemVFeHRyYSAvIHNpemVvZihP
cGVuVHlwZTo6SW50MTYpOworICAgIG1fdG9wU2lkZUJlYXJpbmdzLnJlc2l6ZShjb3VudFRvcFNp
ZGVCZWFyaW5ncyk7CisgICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50Vm10
eEVudHJpZXM7ICsraSkKKyAgICAgICAgbV90b3BTaWRlQmVhcmluZ3NbaV0gPSB2bXR4LT5lbnRy
aWVzW2ldLnRvcFNpZGVCZWFyaW5nOworICAgIGlmIChpIDwgY291bnRUb3BTaWRlQmVhcmluZ3Mp
IHsKKyAgICAgICAgY29uc3QgT3BlblR5cGU6OkludDE2KiBwVG9wU2lkZUJlYXJpbmdzRXh0cmEg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IE9wZW5UeXBlOjpJbnQxNio+KCZ2bXR4LT5lbnRyaWVz
W2NvdW50Vm10eEVudHJpZXNdKTsKKyAgICAgICAgZm9yICg7IGkgPCBjb3VudFRvcFNpZGVCZWFy
aW5nczsgKytpLCArK3BUb3BTaWRlQmVhcmluZ3NFeHRyYSkKKyAgICAgICAgICAgIG1fdG9wU2lk
ZUJlYXJpbmdzW2ldID0gKnBUb3BTaWRlQmVhcmluZ3NFeHRyYTsKKyAgICB9Cit9CisKK2Zsb2F0
IE9wZW5UeXBlVmVydGljYWxEYXRhOjphZHZhbmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250LCBHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBzaXplX3QgY291bnRIZWlnaHRzID0g
bV9hZHZhbmNlSGVpZ2h0cy5zaXplKCk7CisgICAgaWYgKGNvdW50SGVpZ2h0cykgeworICAgICAg
ICB1aW50MTZfdCBhZHZhbmNlRlVuaXQgPSBtX2FkdmFuY2VIZWlnaHRzW2dseXBoIDwgY291bnRI
ZWlnaHRzID8gZ2x5cGggOiBjb3VudEhlaWdodHMgLSAxXTsKKyAgICAgICAgZmxvYXQgYWR2YW5j
ZSA9IGFkdmFuY2VGVW5pdCAqIGZvbnQtPnNpemVQZXJVbml0KCk7CisgICAgICAgIHJldHVybiBh
ZHZhbmNlOworICAgIH0KKworICAgIC8vIE5vIHZlcnRpY2FsIGluZm8gaW4gdGhlIGZvbnQgZmls
ZTsgdXNlIGhlaWdodCBhcyBhZHZhbmNlLgorICAgIHJldHVybiBmb250LT5mb250TWV0cmljcygp
LmhlaWdodCgpOworfQorCit2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpnZXRWZXJ0aWNhbFRy
YW5zbGF0aW9uc0ZvckdseXBocyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5
cGgqIGdseXBocywgc2l6ZV90IGNvdW50LCBmbG9hdCogb3V0WFlBcnJheSkgY29uc3QKK3sKKyAg
ICBzaXplX3QgY291bnRXaWR0aHMgPSBtX2FkdmFuY2VXaWR0aHMuc2l6ZSgpOworICAgIEFTU0VS
VChjb3VudFdpZHRocyA+IDApOworICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBtZXRyaWNzID0gZm9u
dC0+Zm9udE1ldHJpY3MoKTsKKyAgICBmbG9hdCBzaXplUGVyVW5pdCA9IGZvbnQtPnNpemVQZXJV
bml0KCk7CisgICAgZmxvYXQgYXNjZW50ID0gbWV0cmljcy5hc2NlbnQoKTsKKyAgICBib29sIHVz
ZVZPUkcgPSBoYXNWT1JHKCk7CisgICAgc2l6ZV90IGNvdW50VG9wU2lkZUJlYXJpbmdzID0gbV90
b3BTaWRlQmVhcmluZ3Muc2l6ZSgpOworICAgIGZsb2F0IGRlZmF1bHRWZXJ0T3JpZ2luWSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICBmb3IgKGZsb2F0KiBl
bmQgPSAmKG91dFhZQXJyYXlbY291bnQgKiAyXSk7IG91dFhZQXJyYXkgIT0gZW5kOyArK2dseXBo
cywgb3V0WFlBcnJheSArPSAyKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gKmdseXBoczsKKyAg
ICAgICAgdWludDE2X3Qgd2lkdGhGVW5pdCA9IG1fYWR2YW5jZVdpZHRoc1tnbHlwaCA8IGNvdW50
V2lkdGhzID8gZ2x5cGggOiBjb3VudFdpZHRocyAtIDFdOworICAgICAgICBmbG9hdCB3aWR0aCA9
IHdpZHRoRlVuaXQgKiBzaXplUGVyVW5pdDsKKyAgICAgICAgb3V0WFlBcnJheVswXSA9IC13aWR0
aCAvIDI7CisKKyAgICAgICAgLy8gRm9yIFksIHRyeSBWT1JHIGZpcnN0LgorICAgICAgICBpZiAo
dXNlVk9SRykgeworICAgICAgICAgICAgaW50MTZfdCB2ZXJ0T3JpZ2luWUZVbml0ID0gbV92ZXJ0
T3JpZ2luWS5nZXQoZ2x5cGgpOworICAgICAgICAgICAgaWYgKHZlcnRPcmlnaW5ZRlVuaXQpIHsK
KyAgICAgICAgICAgICAgICBvdXRYWUFycmF5WzFdID0gLXZlcnRPcmlnaW5ZRlVuaXQgKiBzaXpl
UGVyVW5pdDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChpc25hbihkZWZhdWx0VmVydE9yaWdpblkpKQorICAgICAgICAgICAgICAgIGRl
ZmF1bHRWZXJ0T3JpZ2luWSA9IC1tX2RlZmF1bHRWZXJ0T3JpZ2luWSAqIHNpemVQZXJVbml0Owor
ICAgICAgICAgICAgb3V0WFlBcnJheVsxXSA9IGRlZmF1bHRWZXJ0T3JpZ2luWTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgbm8gVk9SRywgdHJ5IHZt
dHggbmV4dC4KKyAgICAgICAgaWYgKGNvdW50VG9wU2lkZUJlYXJpbmdzKSB7CisgICAgICAgICAg
ICBpbnQxNl90IHRvcFNpZGVCZWFyaW5nRlVuaXQgPSBtX3RvcFNpZGVCZWFyaW5nc1tnbHlwaCA8
IGNvdW50VG9wU2lkZUJlYXJpbmdzID8gZ2x5cGggOiBjb3VudFRvcFNpZGVCZWFyaW5ncyAtIDFd
OworICAgICAgICAgICAgZmxvYXQgdG9wU2lkZUJlYXJpbmcgPSB0b3BTaWRlQmVhcmluZ0ZVbml0
ICogc2l6ZVBlclVuaXQ7CisgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRzID0gZm9udC0+Ym91
bmRzRm9yR2x5cGgoZ2x5cGgpOworICAgICAgICAgICAgb3V0WFlBcnJheVsxXSA9IGJvdW5kcy55
KCkgLSB0b3BTaWRlQmVhcmluZzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gTm8gdmVydGljYWwgaW5mbyBpbiB0aGUgZm9udCBmaWxlOyB1c2UgYXNjZW50
IGFzIHZlcnRpY2FsIG9yaWdpbi4KKyAgICAgICAgb3V0WFlBcnJheVsxXSA9IC1hc2NlbnQ7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNh
bERhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU0ZWU3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVWZXJ0aWNhbERhdGEuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEtvamkgSXNoaWkgPGtvamlpc2hpQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgT3BlblR5cGVWZXJ0aWNhbERhdGFfaAorI2RlZmluZSBPcGVuVHlwZVZlcnRpY2FsRGF0
YV9oCisKKyNpbmNsdWRlICJHbHlwaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQ
bGF0Zm9ybURhdGE7CitjbGFzcyBHbHlwaFBhZ2U7CitjbGFzcyBTaW1wbGVGb250RGF0YTsKKwor
Y2xhc3MgT3BlblR5cGVWZXJ0aWNhbERhdGEgeworcHVibGljOgorICAgIE9wZW5UeXBlVmVydGlj
YWxEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKworICAgIGJvb2wgaXNPcGVuVHlwZSgp
IGNvbnN0IHsgcmV0dXJuICFtX2FkdmFuY2VXaWR0aHMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBo
YXNWZXJ0aWNhbE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiAhbV9hZHZhbmNlSGVpZ2h0cy5pc0Vt
cHR5KCk7IH0KKyAgICBmbG9hdCBhZHZhbmNlSGVpZ2h0KGNvbnN0IFNpbXBsZUZvbnREYXRhKiwg
R2x5cGgpIGNvbnN0OworICAgIHZvaWQgZ2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMo
Y29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaCosIHNpemVfdCwgZmxvYXQqIG91dFhZ
QXJyYXkpIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgaGFzVk9SRygpIGNvbnN0IHsgcmV0
dXJuICFtX3ZlcnRPcmlnaW5ZLmlzRW1wdHkoKTsgfQorCisgICAgVmVjdG9yPHVpbnQxNl90PiBt
X2FkdmFuY2VXaWR0aHM7CisgICAgVmVjdG9yPHVpbnQxNl90PiBtX2FkdmFuY2VIZWlnaHRzOwor
ICAgIFZlY3RvcjxpbnQxNl90PiBtX3RvcFNpZGVCZWFyaW5nczsKKyAgICBpbnQxNl90IG1fZGVm
YXVsdFZlcnRPcmlnaW5ZOworICAgIEhhc2hNYXA8R2x5cGgsIGludDE2X3Q+IG1fdmVydE9yaWdp
blk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBPcGVuVHlwZVZl
cnRpY2FsRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKaW5kZXggOTg2MGRmNi4uMTA4MWRl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03NCw2ICs3NSwyNSBAQCBGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIGJv
b2wgYm9sZCwgYm9vbCBvYmxpcQogICAgIFJlc3RvcmVEQyhoZGMsIC0xKTsKIH0KIAorI2lmIFVT
RShDRykKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlw
ZVRhYmxlKHVpbnQzMl90IHRhYmxlKSBjb25zdAoreworICAgIEhXbmREQyBoZGMoMCk7CisgICAg
SEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQoKSk7CisKKyAgICBEV09S
RCBzaXplID0gR2V0Rm9udERhdGEoaGRjLCB0YWJsZSwgMCwgMCwgMCk7CisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyOworICAgIGlmIChzaXplICE9IEdESV9FUlJPUikgeworICAgICAg
ICBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzaXplKTsKKyAgICAgICAgRFdPUkQgcmVz
dWx0ID0gR2V0Rm9udERhdGEoaGRjLCB0YWJsZSwgMCwgKFBWT0lEKWJ1ZmZlci0+ZGF0YSgpLCBz
aXplKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBzaXplKTsKKyAgICB9CisKKyAgICBTZWxl
Y3RPYmplY3QoaGRjLCBvbGRGb250KTsKKyAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsKK30K
KyNlbmRpZgorCiAjaWZuZGVmIE5ERUJVRwogU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2Ny
aXB0aW9uKCkgY29uc3QKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134498</attachid>
            <date>2012-03-28 22:13:03 -0700</date>
            <delta_ts>2012-03-29 20:44:31 -0700</delta_ts>
            <desc>Fixed two typos in ChangeLog from the previous patch</desc>
            <filename>81326-8.patch</filename>
            <type>text/plain</type>
            <size>25099</size>
            <attacher name="Koji Ishii">kojii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlOTlmZTJhLi42ZGY0YjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYg
QEAKKzIwMTItMDMtMjggIEtvamkgSXNoaWkgIDxrb2ppaXNoaUBnbWFpbC5jb20+CisKKworICAg
ICAgICBWZXJ0aWNhbCBmbG93IHN1cHBvcnQgZm9yIE9wZW5UeXBlIGZvbnRzIHdpdGggdGhlIGxl
YXN0IHBsYXRmb3JtIGRlcGVuZGVuY2llcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODEzMjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xhc3MgT3BlblR5
cGVWZXJ0aWNhbERhdGEgdG8gcmVhZAorICAgICAgICB2ZXJ0aWNhbCBmb250IG1ldHJpY3MgZnJv
bSBPcGVuVHlwZSBmb250cy4KKworICAgICAgICBDdXJyZW50bHksIFdlYktpdCByZWxpZXMgb24g
cGxhdGZvcm0gQVBJcyB0byBkbyB0aGUgd29yay4gSG93ZXZlciwKKyAgICAgICAgc29tZSBwbGF0
Zm9ybXMgc3VjaCBhcyBXaW5kb3dzIGxhY2sgc3VwcG9ydCBmb3IgYWxsIHRoZSBjYXBhYmlsaXRp
ZXMKKyAgICAgICAgV2ViS2l0IHJlcXVpcmVzIGZvciB2ZXJ0aWNhbCBmbG93IGFuZCB0aGUgdGV4
dC1vcmllbnRhdGlvbiBwcm9wZXJ0eQorICAgICAgICB0byB3b3JrIGNvcnJlY3RseS4gUmVhZGlu
ZyBPcGVuVHlwZSB0YWJsZXMgZGlyZWN0bHkgYWxzbyBnaXZlcworICAgICAgICBiZW5lZml0cyBp
biBjb25zaXN0ZW50IGJlaGF2aW9yIGFtb25nIHRoZSBXZWJLaXQgcGxhdGZvcm1zLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggaXMgZm9yIGFueSBwbGF0Zm9ybXMgdGhhdCB3YW50IHRvIHBhcnNlIE9w
ZW5UeXBlIHRhYmxlcworICAgICAgICBkaXJlY3RseSwgYnV0IGl0J3MgY3VycmVudGx5IGluY2x1
ZGVkIG9ubHkgaW4gQ0dXaW4gYW5kIGlzbid0IG9uIGFueQorICAgICAgICBjb2RlIHBhdGggZXZl
biBvbiBDR1dpbiB5ZXQuIENhbGxlcidzIHNpZGUgY2hhbmdlIGZvciBDR1dpbiBhbmQKKyAgICAg
ICAgc3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZvcm1zIHdpbGwgYmUgaW4gc2VwYXJhdGUgYnVncy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgYXJlIHJlcXVpcmVkLiBObyBiZWhhdmlvciBjaGFuZ2Vz
LgorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZGVkIE9wZW5U
eXBlVHlwZXMuaCBhbmQgT3BlblR5cGVWZXJ0aWNhbERhdGEuaC9jcHAuCisgICAgICAgICogcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcDogQWRkIGNyZWF0ZShzaXplX3QpCisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDogQWRkIGNyZWF0ZShzaXplX3QpCisgICAg
ICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChTaGFyZWRCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRk
ZWQgb3BlblR5cGVUYWJsZSgpLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChGb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5o
OiBBZGRlZCBzaXplUGVyVW5pdCgpLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnNpemVQZXJVbml0KTogc2l6ZSgpIC8gdW5pdHNQZXJFbSgpIGZvciBsZXNzIG11bHRpcGxpY2F0
aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMu
aDogQWRkZWQgT3BlblR5cGUgYmFzaWMgdHlwZSBkZWZpbml0aW9ucy4KKyAgICAgICAgKE9wZW5U
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlOjpCaWdFbmRpYW5TaG9ydDo6b3BlcmF0
b3Igc2hvcnQpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGU6OkJpZ0VuZGlhblNob3J0OjpC
aWdFbmRpYW5TaG9ydCk6CisgICAgICAgIChCaWdFbmRpYW5TaG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuVHlwZTo6QmlnRW5kaWFuVVNob3J0OjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZTo6QmlnRW5kaWFuVVNob3J0OjpCaWdFbmRpYW5V
U2hvcnQpOgorICAgICAgICAoQmlnRW5kaWFuVVNob3J0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
ZW5UeXBlOjpCaWdFbmRpYW5Mb25nOjpvcGVyYXRvciBpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
T3BlblR5cGU6OkJpZ0VuZGlhbkxvbmc6OkJpZ0VuZGlhbkxvbmcpOgorICAgICAgICAoQmlnRW5k
aWFuTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlwZTo6QmlnRW5kaWFuVUxvbmc6Om9w
ZXJhdG9yIHVuc2lnbmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlOjpCaWdFbmRpYW5V
TG9uZzo6QmlnRW5kaWFuVUxvbmcpOgorICAgICAgICAoQmlnRW5kaWFuVUxvbmcpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcDog
QWRkZWQuCisgICAgICAgIChPcGVuVHlwZSk6CisgICAgICAgIChIaGVhVGFibGUpOgorICAgICAg
ICAoVmhlYVRhYmxlKToKKyAgICAgICAgKEVudHJ5KToKKyAgICAgICAgKFZPUkdUYWJsZSk6Cisg
ICAgICAgIChWZXJ0T3JpZ2luWU1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGU6
OlZPUkdUYWJsZTo6cmVxdWlyZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6dmFsaWRhdGVkUHRyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlVmVydGlj
YWxEYXRhOjpPcGVuVHlwZVZlcnRpY2FsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuVHlw
ZVZlcnRpY2FsRGF0YTo6YWR2YW5jZUhlaWdodCk6IEFkdmFuY2UgaGVpZ2h0IGZvciBhIGdseXBo
LgorICAgICAgICAoV2ViQ29yZTo6T3BlblR5cGVWZXJ0aWNhbERhdGE6OmdldFZlcnRpY2FsVHJh
bnNsYXRpb25zRm9yR2x5cGhzKTogVmVydGljYWwgb3JpZ2luLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChPcGVuVHlwZVZlcnRpY2FsRGF0YSk6IEEgbmV3IGNsYXNz
IHRvIGhhbmRsZSB2ZXJ0aWNhbCBmbG93IGRhdGEgaW4gT3BlblR5cGUuCisgICAgICAgIChXZWJD
b3JlOjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6aXNPcGVuVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuVHlwZVZlcnRpY2FsRGF0YTo6aGFzVmVydGljYWxNZXRyaWNzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9wZW5UeXBlVmVydGljYWxEYXRhOjpoYXNWT1JHKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUpOiBJ
bXBsZW1lbnRlZCBvcGVuVHlwZVRhYmxlKCkgZm9yIFdpbjMyLgorCiAyMDEyLTAzLTI2ICBKdXN0
aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIENy
YXNoIGluIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAwOGVlNzgwLi5lMDdl
OWFjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpA
QCAtMjkzMDQsNiArMjkzMDQsMTAgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8Rmls
ZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVu
VHlwZVR5cGVzLmgiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5cGVVdGlsaXRp
ZXMuY3BwIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CkBAIC0yOTMxMiw2ICsyOTMxNiwxNCBAQAog
CQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBlVmVydGljYWxEYXRhLmNwcCIKKwkJ
CQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgorCQkJCQkJ
PgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXHdpblxSZWZDb3VudGVkR0RJSGFuZGxlLmgiCiAJCQkJCQk+CiAJCQkJCTwv
RmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IGVlNmEy
OWYuLjgyZWZhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApA
QCAtNjIsNiArNjIsMTIgQEAgU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoKQogewogfQogCitT
aGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihzaXplX3Qgc2l6ZSkKKyAgICA6IG1fc2l6ZShzaXpl
KQorICAgICwgbV9idWZmZXIoc2l6ZSkKK3sKK30KKwogU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCiAgICAgOiBtX3NpemUoMCkKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggZmUzZTRiNi4uYjY2YTAzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xh
c3MgUHVyZ2VhYmxlQnVmZmVyOwogY2xhc3MgU2hhcmVkQnVmZmVyIDogcHVibGljIFJlZkNvdW50
ZWQ8U2hhcmVkQnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkQnVmZmVyKTsgfQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKHNpemVfdCBzaXplKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkQnVmZmVyKHNpemUpKTsgfQogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IGNoYXIqIGMsIGludCBpKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU2hhcmVkQnVmZmVyKGMsIGkpKTsgfQogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGMsIGludCBp
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkQnVmZmVyKGMsIGkpKTsgfQogCkBAIC0xMTUs
NiArMTE2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFNoYXJlZEJ1ZmZlcigpOworICAg
IFNoYXJlZEJ1ZmZlcihzaXplX3QpOwogICAgIFNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiwgaW50
KTsKICAgICBTaGFyZWRCdWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciosIGludCk7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1E
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmgKaW5kZXggYzczMGM3NC4uZWE1NDMwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtOTEsNiArOTEsNyBAQCB0eXBl
ZGVmIFVJbnQzMiBBVFNGb250UmVmOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250
RGVzY3JpcHRpb247CitjbGFzcyBTaGFyZWRCdWZmZXI7CiAKICNpZiBPUyhEQVJXSU4pCiBpbmxp
bmUgQ1RGb250UmVmIHRvQ1RGb250UmVmKE5TRm9udCAqbnNGb250KSB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PENURm9udFJlZj4obnNGb250KTsgfQpAQCAtMjc2LDYgKzI3Nyw5IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH0KIAorI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQorICAgIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBvcGVuVHlwZVRhYmxlKHVpbnQzMl90IHRhYmxlKSBjb25z
dDsKKyNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Rm9udERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmgKaW5kZXggZGQ4NmYwMDQuLmZkMmZmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtMTE4LDYgKzExOCw3IEBAIHB1
YmxpYzoKIAogICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIHsgcmV0dXJuIG1fZm9udE1l
dHJpY3M7IH0KICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJl
dHVybiBtX2ZvbnRNZXRyaWNzOyB9CisgICAgZmxvYXQgc2l6ZVBlclVuaXQoKSBjb25zdCB7IHJl
dHVybiBwbGF0Zm9ybURhdGEoKS5zaXplKCkgLyAoZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCkg
PyBmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKSA6IDEpOyB9CiAgICAgCiAgICAgZmxvYXQgbWF4
Q2hhcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhDaGFyV2lkdGg7IH0KICAgICB2b2lkIHNl
dE1heENoYXJXaWR0aChmbG9hdCBtYXhDaGFyV2lkdGgpIHsgbV9tYXhDaGFyV2lkdGggPSBtYXhD
aGFyV2lkdGg7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45ZmM3NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVUeXBlcy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgS29qaSBJc2hpaSA8a29qaWlzaGlAZ21haWwuY29tPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBPcGVuVHlwZVR5cGVzX2gKKyNkZWZpbmUgT3BlblR5cGVUeXBl
c19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBPcGVuVHlwZSB7CisKK3N0cnVj
dCBCaWdFbmRpYW5TaG9ydCB7CisgICAgb3BlcmF0b3Igc2hvcnQoKSBjb25zdCB7IHJldHVybiAo
diAmIDB4MDBmZikgPDwgOCB8IHYgPj4gODsgfQorICAgIEJpZ0VuZGlhblNob3J0KHNob3J0IHUp
IDogdigodSAmIDB4MDBmZikgPDwgOCB8IHUgPj4gOCkgeyB9CisgICAgdW5zaWduZWQgc2hvcnQg
djsKK307CisKK3N0cnVjdCBCaWdFbmRpYW5VU2hvcnQgeworICAgIG9wZXJhdG9yIHVuc2lnbmVk
IHNob3J0KCkgY29uc3QgeyByZXR1cm4gKHYgJiAweDAwZmYpIDw8IDggfCB2ID4+IDg7IH0KKyAg
ICBCaWdFbmRpYW5VU2hvcnQodW5zaWduZWQgc2hvcnQgdSkgOiB2KCh1ICYgMHgwMGZmKSA8PCA4
IHwgdSA+PiA4KSB7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCB2OworfTsKKworc3RydWN0IEJpZ0Vu
ZGlhbkxvbmcgeworICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuICh2ICYgMHhmZikg
PDwgMjQgfCAodiAmIDB4ZmYwMCkgPDwgOCB8ICh2ICYgMHhmZjAwMDApID4+IDggfCB2ID4+IDI0
OyB9CisgICAgQmlnRW5kaWFuTG9uZyhpbnQgdSkgOiB2KCh1ICYgMHhmZikgPDwgMjQgfCAodSAm
IDB4ZmYwMCkgPDwgOCB8ICh1ICYgMHhmZjAwMDApID4+IDggfCB1ID4+IDI0KSB7IH0KKyAgICB1
bnNpZ25lZCB2OworfTsKKworc3RydWN0IEJpZ0VuZGlhblVMb25nIHsKKyAgICBvcGVyYXRvciB1
bnNpZ25lZCgpIGNvbnN0IHsgcmV0dXJuICh2ICYgMHhmZikgPDwgMjQgfCAodiAmIDB4ZmYwMCkg
PDwgOCB8ICh2ICYgMHhmZjAwMDApID4+IDggfCB2ID4+IDI0OyB9CisgICAgQmlnRW5kaWFuVUxv
bmcodW5zaWduZWQgdSkgOiB2KCh1ICYgMHhmZikgPDwgMjQgfCAodSAmIDB4ZmYwMCkgPDwgOCB8
ICh1ICYgMHhmZjAwMDApID4+IDggfCB1ID4+IDI0KSB7IH0KKyAgICB1bnNpZ25lZCB2OworfTsK
KwordHlwZWRlZiBCaWdFbmRpYW5TaG9ydCBJbnQxNjsKK3R5cGVkZWYgQmlnRW5kaWFuVVNob3J0
IFVJbnQxNjsKK3R5cGVkZWYgQmlnRW5kaWFuTG9uZyBJbnQzMjsKK3R5cGVkZWYgQmlnRW5kaWFu
VUxvbmcgVUludDMyOworCit0eXBlZGVmIFVJbnQzMiBGaXhlZDsKK3R5cGVkZWYgVUludDE2IE9m
ZnNldDsKK3R5cGVkZWYgVUludDE2IEdseXBoSUQ7CisKKy8vIE9UVGFnIGlzIG5hdGl2ZSBiZWNh
dXNlIGl0J3Mgb25seSBjb21wYXJlZCBhZ2FpbnN0IGNvbnN0YW50cywgc28gd2UgZG9uJ3QKKy8v
IGRvIGVuZGlhbiBjb252ZXJzaW9uIGhlcmUgYnV0IG1ha2Ugc3VyZSBjb25zdGFudHMgYXJlIGlu
IGJpZy1lbmRpYW4gb3JkZXIuCisvLyBOb3RlIHRoYXQgbXVsdGktY2hhcmFjdGVyIGxpdGVyYWwg
aXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBpbiBDKysweC4KK3R5cGVkZWYgdWludDMyX3QgVGFn
OworI2RlZmluZSBPVF9NQUtFX1RBRyhjaDEsIGNoMiwgY2gzLCBjaDQpICgoKCh1aW50MzJfdCko
Y2g0KSkgPDwgMjQpIHwgKCgodWludDMyX3QpKGNoMykpIDw8IDE2KSB8ICgoKHVpbnQzMl90KShj
aDIpKSA8PCA4KSB8ICgodWludDMyX3QpKGNoMSkpKQorCit9IC8vIG5hbWVzcGFjZSBPcGVuVHlw
ZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gT3BlblR5cGVUeXBlc19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVu
VHlwZVZlcnRpY2FsRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzhlYmNmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcApAQCAtMCww
ICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBLb2ppIElzaGlpIDxrb2ppaXNo
aUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
T3BlblR5cGVWZXJ0aWNhbERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUgIk9wZW5UeXBlVHlwZXMuaCIKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIE9wZW5UeXBlIHsKKworZW51bSB7CisgICAgSGhlYVRhZyA9IE9UX01BS0Vf
VEFHKCdoJywgJ2gnLCAnZScsICdhJyksCisgICAgSG10eFRhZyA9IE9UX01BS0VfVEFHKCdoJywg
J20nLCAndCcsICd4JyksCisgICAgVmhlYVRhZyA9IE9UX01BS0VfVEFHKCd2JywgJ2gnLCAnZScs
ICdhJyksCisgICAgVm10eFRhZyA9IE9UX01BS0VfVEFHKCd2JywgJ20nLCAndCcsICd4JyksCisg
ICAgVk9SR1RhZyA9IE9UX01BS0VfVEFHKCdWJywgJ08nLCAnUicsICdHJyksCit9OworCisjcHJh
Z21hIHBhY2soMSkKKworc3RydWN0IEhoZWFUYWJsZSB7CisgICAgT3BlblR5cGU6OkZpeGVkIHZl
cnNpb247CisgICAgT3BlblR5cGU6OkludDE2IGFzY2VuZGVyOworICAgIE9wZW5UeXBlOjpJbnQx
NiBkZXNjZW5kZXI7CisgICAgT3BlblR5cGU6OkludDE2IGxpbmVHYXA7CisgICAgT3BlblR5cGU6
OkludDE2IGFkdmFuY2VXaWR0aE1heDsKKyAgICBPcGVuVHlwZTo6SW50MTYgbWluTGVmdFNpZGVC
ZWFyaW5nOworICAgIE9wZW5UeXBlOjpJbnQxNiBtaW5SaWdodFNpZGVCZWFyaW5nOworICAgIE9w
ZW5UeXBlOjpJbnQxNiB4TWF4RXh0ZW50OworICAgIE9wZW5UeXBlOjpJbnQxNiBjYXJldFNsb3Bl
UmlzZTsKKyAgICBPcGVuVHlwZTo6SW50MTYgY2FyZXRTbG9wZVJ1bjsKKyAgICBPcGVuVHlwZTo6
SW50MTYgY2FyZXRPZmZzZXQ7CisgICAgT3BlblR5cGU6OkludDE2IHJlc2VydmVkWzRdOworICAg
IE9wZW5UeXBlOjpJbnQxNiBtZXRyaWNEYXRhRm9ybWF0OworICAgIE9wZW5UeXBlOjpVSW50MTYg
bnVtYmVyT2ZITWV0cmljczsKK307CisKK3N0cnVjdCBWaGVhVGFibGUgeworICAgIE9wZW5UeXBl
OjpGaXhlZCB2ZXJzaW9uOworICAgIE9wZW5UeXBlOjpJbnQxNiBhc2NlbnQ7CisgICAgT3BlblR5
cGU6OkludDE2IGRlc2NlbnQ7CisgICAgT3BlblR5cGU6OkludDE2IGxpbmVHYXA7CisgICAgT3Bl
blR5cGU6OkludDE2IGFkdmFuY2VIZWlnaHRNYXg7CisgICAgT3BlblR5cGU6OkludDE2IG1pblRv
cFNpZGVCZWFyaW5nOworICAgIE9wZW5UeXBlOjpJbnQxNiBtaW5Cb3R0b21TaWRlQmVhcmluZzsK
KyAgICBPcGVuVHlwZTo6SW50MTYgeU1heEV4dGVudDsKKyAgICBPcGVuVHlwZTo6SW50MTYgY2Fy
ZXRTbG9wZVJpc2U7CisgICAgT3BlblR5cGU6OkludDE2IGNhcmV0U2xvcGVSdW47CisgICAgT3Bl
blR5cGU6OkludDE2IGNhcmV0T2Zmc2V0OworICAgIE9wZW5UeXBlOjpJbnQxNiByZXNlcnZlZFs0
XTsKKyAgICBPcGVuVHlwZTo6SW50MTYgbWV0cmljRGF0YUZvcm1hdDsKKyAgICBPcGVuVHlwZTo6
VUludDE2IG51bU9mTG9uZ1Zlck1ldHJpY3M7Cit9OworCitzdHJ1Y3QgSG10eFRhYmxlIHsKKyAg
ICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBPcGVuVHlwZTo6VUludDE2IGFkdmFuY2VXaWR0aDsK
KyAgICAgICAgT3BlblR5cGU6OkludDE2IGxzYjsKKyAgICB9IGVudHJpZXNbMV07Cit9OworCitz
dHJ1Y3QgVm10eFRhYmxlIHsKKyAgICBzdHJ1Y3QgRW50cnkgeworICAgICAgICBPcGVuVHlwZTo6
VUludDE2IGFkdmFuY2VIZWlnaHQ7CisgICAgICAgIE9wZW5UeXBlOjpJbnQxNiB0b3BTaWRlQmVh
cmluZzsKKyAgICB9IGVudHJpZXNbMV07Cit9OworCitzdHJ1Y3QgVk9SR1RhYmxlIHsKKyAgICBP
cGVuVHlwZTo6VUludDE2IG1ham9yVmVyc2lvbjsKKyAgICBPcGVuVHlwZTo6VUludDE2IG1pbm9y
VmVyc2lvbjsKKyAgICBPcGVuVHlwZTo6SW50MTYgZGVmYXVsdFZlcnRPcmlnaW5ZOworICAgIE9w
ZW5UeXBlOjpVSW50MTYgbnVtVmVydE9yaWdpbllNZXRyaWNzOworICAgIHN0cnVjdCBWZXJ0T3Jp
Z2luWU1ldHJpY3MgeworICAgICAgICBPcGVuVHlwZTo6VUludDE2IGdseXBoSW5kZXg7CisgICAg
ICAgIE9wZW5UeXBlOjpJbnQxNiB2ZXJ0T3JpZ2luWTsKKyAgICB9IHZlcnRPcmlnaW5ZTWV0cmlj
c1sxXTsKKworICAgIHNpemVfdCByZXF1aXJlZFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplb2Yo
KnRoaXMpICsgc2l6ZW9mKFZlcnRPcmlnaW5ZTWV0cmljcykgKiAobnVtVmVydE9yaWdpbllNZXRy
aWNzIC0gMSk7IH0KK307CisKKyNwcmFnbWEgcGFjaygpCisKK30gLy8gbmFtZXNwYWNlIE9wZW5U
eXBlCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjb25zdCBUKiB2YWxpZGF0ZWRQdHIoY29uc3Qg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlciwgc2l6ZV90IGNvdW50ID0gMSkKK3sKKyAgICBp
ZiAoIWJ1ZmZlciB8fCBidWZmZXItPnNpemUoKSA8IHNpemVvZihUKSAqIGNvdW50KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oYnVmZmVy
LT5kYXRhKCkpOworfQorCitPcGVuVHlwZVZlcnRpY2FsRGF0YTo6T3BlblR5cGVWZXJ0aWNhbERh
dGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQorICAgIDogbV9kZWZhdWx0
VmVydE9yaWdpblkoMCkKK3sKKyAgICAvLyBMb2FkIGhoZWEgYW5kIGhtdHggdG8gZ2V0IHgtY29t
cG9uZW50IG9mIHZlcnRpY2FsIG9yaWdpbnMuCisgICAgLy8gSWYgdGhlc2UgdGFibGVzIGFyZSBt
aXNzaW5nLCBpdCdzIG5vdCBhbiBPcGVuVHlwZSBmb250LgorICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IHBsYXRmb3JtRGF0YS5vcGVuVHlwZVRhYmxlKE9wZW5UeXBlOjpIaGVhVGFn
KTsKKyAgICBjb25zdCBPcGVuVHlwZTo6SGhlYVRhYmxlKiBoaGVhID0gdmFsaWRhdGVkUHRyPE9w
ZW5UeXBlOjpIaGVhVGFibGU+KGJ1ZmZlcik7CisgICAgaWYgKCFoaGVhKQorICAgICAgICByZXR1
cm47CisgICAgdWludDE2X3QgY291bnRIbXR4RW50cmllcyA9IGhoZWEtPm51bWJlck9mSE1ldHJp
Y3M7CisgICAgaWYgKCFjb3VudEhtdHhFbnRyaWVzKSB7CisgICAgICAgIExPR19FUlJPUigiSW52
YWxpZCBudW1iZXJPZkhNZXRyaWNzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBi
dWZmZXIgPSBwbGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6SG10eFRhZyk7Cisg
ICAgY29uc3QgT3BlblR5cGU6OkhtdHhUYWJsZSogaG10eCA9IHZhbGlkYXRlZFB0cjxPcGVuVHlw
ZTo6SG10eFRhYmxlPihidWZmZXIsIGNvdW50SG10eEVudHJpZXMpOworICAgIGlmICghaG10eCkg
eworICAgICAgICBMT0dfRVJST1IoImhoZWEgZXhpc3RzIGJ1dCBobXR4IGRvZXMgbm90IChvciBi
cm9rZW4pIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9hZHZhbmNlV2lkdGhzLnJl
c2l6ZShjb3VudEhtdHhFbnRyaWVzKTsKKyAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgY291
bnRIbXR4RW50cmllczsgKytpKQorICAgICAgICBtX2FkdmFuY2VXaWR0aHNbaV0gPSBobXR4LT5l
bnRyaWVzW2ldLmFkdmFuY2VXaWR0aDsKKworICAgIC8vIExvYWQgdmhlYSBmaXJzdC4gVGhpcyB0
YWJsZSBpcyByZXF1aXJlZCBmb3IgZm9udHMgdGhhdCBzdXBwb3J0IHZlcnRpY2FsIGZsb3cuCisg
ICAgYnVmZmVyID0gcGxhdGZvcm1EYXRhLm9wZW5UeXBlVGFibGUoT3BlblR5cGU6OlZoZWFUYWcp
OworICAgIGNvbnN0IE9wZW5UeXBlOjpWaGVhVGFibGUqIHZoZWEgPSB2YWxpZGF0ZWRQdHI8T3Bl
blR5cGU6OlZoZWFUYWJsZT4oYnVmZmVyKTsKKyAgICBpZiAoIXZoZWEpCisgICAgICAgIHJldHVy
bjsKKyAgICB1aW50MTZfdCBjb3VudFZtdHhFbnRyaWVzID0gdmhlYS0+bnVtT2ZMb25nVmVyTWV0
cmljczsKKyAgICBpZiAoIWNvdW50Vm10eEVudHJpZXMpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJ
bnZhbGlkIG51bU9mTG9uZ1Zlck1ldHJpY3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIExvYWQgVk9SRy4gVGhpcyB0YWJsZSBpcyBvcHRpb25hbC4KKyAgICBidWZmZXIgPSBw
bGF0Zm9ybURhdGEub3BlblR5cGVUYWJsZShPcGVuVHlwZTo6Vk9SR1RhZyk7CisgICAgY29uc3Qg
T3BlblR5cGU6OlZPUkdUYWJsZSogdm9yZyA9IHZhbGlkYXRlZFB0cjxPcGVuVHlwZTo6Vk9SR1Rh
YmxlPihidWZmZXIpOworICAgIGlmICh2b3JnICYmIGJ1ZmZlci0+c2l6ZSgpID49IHZvcmctPnJl
cXVpcmVkU2l6ZSgpKSB7CisgICAgICAgIG1fZGVmYXVsdFZlcnRPcmlnaW5ZID0gdm9yZy0+ZGVm
YXVsdFZlcnRPcmlnaW5ZOworICAgICAgICB1aW50MTZfdCBjb3VudFZlcnRPcmlnaW5ZTWV0cmlj
cyA9IHZvcmctPm51bVZlcnRPcmlnaW5ZTWV0cmljczsKKyAgICAgICAgaWYgKCFjb3VudFZlcnRP
cmlnaW5ZTWV0cmljcykgeworICAgICAgICAgICAgLy8gQWRkIG9uZSBlbnRyeSBzbyB0aGF0IGhh
c1ZPUkcoKSBiZWNvbWVzIHRydWUKKyAgICAgICAgICAgIG1fdmVydE9yaWdpblkuc2V0KDAsIG1f
ZGVmYXVsdFZlcnRPcmlnaW5ZKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAo
dWludDE2X3QgaSA9IDA7IGkgPCBjb3VudFZlcnRPcmlnaW5ZTWV0cmljczsgKytpKSB7CisgICAg
ICAgICAgICAgICAgY29uc3QgT3BlblR5cGU6OlZPUkdUYWJsZTo6VmVydE9yaWdpbllNZXRyaWNz
JiBtZXRyaWNzID0gdm9yZy0+dmVydE9yaWdpbllNZXRyaWNzW2ldOworICAgICAgICAgICAgICAg
IG1fdmVydE9yaWdpblkuc2V0KG1ldHJpY3MuZ2x5cGhJbmRleCwgbWV0cmljcy52ZXJ0T3JpZ2lu
WSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBMb2FkIHZtdHgg
dGhlbi4gVGhpcyB0YWJsZSBpcyByZXF1aXJlZCBmb3IgZm9udHMgdGhhdCBzdXBwb3J0IHZlcnRp
Y2FsIGZsb3cuCisgICAgYnVmZmVyID0gcGxhdGZvcm1EYXRhLm9wZW5UeXBlVGFibGUoT3BlblR5
cGU6OlZtdHhUYWcpOworICAgIGNvbnN0IE9wZW5UeXBlOjpWbXR4VGFibGUqIHZtdHggPSB2YWxp
ZGF0ZWRQdHI8T3BlblR5cGU6OlZtdHhUYWJsZT4oYnVmZmVyLCBjb3VudFZtdHhFbnRyaWVzKTsK
KyAgICBpZiAoIXZtdHgpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJ2aGVhIGV4aXN0cyBidXQgdm10
eCBkb2VzIG5vdCAob3IgYnJva2VuKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
YWR2YW5jZUhlaWdodHMucmVzaXplKGNvdW50Vm10eEVudHJpZXMpOworICAgIGZvciAodWludDE2
X3QgaSA9IDA7IGkgPCBjb3VudFZtdHhFbnRyaWVzOyArK2kpCisgICAgICAgIG1fYWR2YW5jZUhl
aWdodHNbaV0gPSB2bXR4LT5lbnRyaWVzW2ldLmFkdmFuY2VIZWlnaHQ7CisKKyAgICAvLyBWT1JH
IGlzIHByZWZlcnJlZCB3YXkgdG8gY2FsY3VsYXRlIHZlcnRpY2FsIG9yaWdpbiB0aGFuIHZtdHgs
CisgICAgLy8gc28gbG9hZCB0b3BTaWRlQmVhcmluZyBmcm9tIHZtdHggb25seSBpZiBWT1JHIGlz
IG1pc3NpbmcuCisgICAgaWYgKGhhc1ZPUkcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6
ZV90IHNpemVFeHRyYSA9IGJ1ZmZlci0+c2l6ZSgpIC0gc2l6ZW9mKE9wZW5UeXBlOjpWbXR4VGFi
bGU6OkVudHJ5KSAqIGNvdW50Vm10eEVudHJpZXM7CisgICAgaWYgKHNpemVFeHRyYSAlIHNpemVv
ZihPcGVuVHlwZTo6SW50MTYpKSB7CisgICAgICAgIExPR19FUlJPUigidm10eCBoYXMgaW5jb3Jy
ZWN0IHRzYiBjb3VudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBjb3Vu
dFRvcFNpZGVCZWFyaW5ncyA9IGNvdW50Vm10eEVudHJpZXMgKyBzaXplRXh0cmEgLyBzaXplb2Yo
T3BlblR5cGU6OkludDE2KTsKKyAgICBtX3RvcFNpZGVCZWFyaW5ncy5yZXNpemUoY291bnRUb3BT
aWRlQmVhcmluZ3MpOworICAgIHNpemVfdCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudFZt
dHhFbnRyaWVzOyArK2kpCisgICAgICAgIG1fdG9wU2lkZUJlYXJpbmdzW2ldID0gdm10eC0+ZW50
cmllc1tpXS50b3BTaWRlQmVhcmluZzsKKyAgICBpZiAoaSA8IGNvdW50VG9wU2lkZUJlYXJpbmdz
KSB7CisgICAgICAgIGNvbnN0IE9wZW5UeXBlOjpJbnQxNiogcFRvcFNpZGVCZWFyaW5nc0V4dHJh
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBPcGVuVHlwZTo6SW50MTYqPigmdm10eC0+ZW50cmll
c1tjb3VudFZtdHhFbnRyaWVzXSk7CisgICAgICAgIGZvciAoOyBpIDwgY291bnRUb3BTaWRlQmVh
cmluZ3M7ICsraSwgKytwVG9wU2lkZUJlYXJpbmdzRXh0cmEpCisgICAgICAgICAgICBtX3RvcFNp
ZGVCZWFyaW5nc1tpXSA9ICpwVG9wU2lkZUJlYXJpbmdzRXh0cmE7CisgICAgfQorfQorCitmbG9h
dCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6YWR2YW5jZUhlaWdodChjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwgR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgc2l6ZV90IGNvdW50SGVpZ2h0cyA9
IG1fYWR2YW5jZUhlaWdodHMuc2l6ZSgpOworICAgIGlmIChjb3VudEhlaWdodHMpIHsKKyAgICAg
ICAgdWludDE2X3QgYWR2YW5jZUZVbml0ID0gbV9hZHZhbmNlSGVpZ2h0c1tnbHlwaCA8IGNvdW50
SGVpZ2h0cyA/IGdseXBoIDogY291bnRIZWlnaHRzIC0gMV07CisgICAgICAgIGZsb2F0IGFkdmFu
Y2UgPSBhZHZhbmNlRlVuaXQgKiBmb250LT5zaXplUGVyVW5pdCgpOworICAgICAgICByZXR1cm4g
YWR2YW5jZTsKKyAgICB9CisKKyAgICAvLyBObyB2ZXJ0aWNhbCBpbmZvIGluIHRoZSBmb250IGZp
bGU7IHVzZSBoZWlnaHQgYXMgYWR2YW5jZS4KKyAgICByZXR1cm4gZm9udC0+Zm9udE1ldHJpY3Mo
KS5oZWlnaHQoKTsKK30KKwordm9pZCBPcGVuVHlwZVZlcnRpY2FsRGF0YTo6Z2V0VmVydGljYWxU
cmFuc2xhdGlvbnNGb3JHbHlwaHMoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEds
eXBoKiBnbHlwaHMsIHNpemVfdCBjb3VudCwgZmxvYXQqIG91dFhZQXJyYXkpIGNvbnN0Cit7Cisg
ICAgc2l6ZV90IGNvdW50V2lkdGhzID0gbV9hZHZhbmNlV2lkdGhzLnNpemUoKTsKKyAgICBBU1NF
UlQoY291bnRXaWR0aHMgPiAwKTsKKyAgICBjb25zdCBGb250TWV0cmljcyYgbWV0cmljcyA9IGZv
bnQtPmZvbnRNZXRyaWNzKCk7CisgICAgZmxvYXQgc2l6ZVBlclVuaXQgPSBmb250LT5zaXplUGVy
VW5pdCgpOworICAgIGZsb2F0IGFzY2VudCA9IG1ldHJpY3MuYXNjZW50KCk7CisgICAgYm9vbCB1
c2VWT1JHID0gaGFzVk9SRygpOworICAgIHNpemVfdCBjb3VudFRvcFNpZGVCZWFyaW5ncyA9IG1f
dG9wU2lkZUJlYXJpbmdzLnNpemUoKTsKKyAgICBmbG9hdCBkZWZhdWx0VmVydE9yaWdpblkgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgZm9yIChmbG9hdCog
ZW5kID0gJihvdXRYWUFycmF5W2NvdW50ICogMl0pOyBvdXRYWUFycmF5ICE9IGVuZDsgKytnbHlw
aHMsIG91dFhZQXJyYXkgKz0gMikgeworICAgICAgICBHbHlwaCBnbHlwaCA9ICpnbHlwaHM7Cisg
ICAgICAgIHVpbnQxNl90IHdpZHRoRlVuaXQgPSBtX2FkdmFuY2VXaWR0aHNbZ2x5cGggPCBjb3Vu
dFdpZHRocyA/IGdseXBoIDogY291bnRXaWR0aHMgLSAxXTsKKyAgICAgICAgZmxvYXQgd2lkdGgg
PSB3aWR0aEZVbml0ICogc2l6ZVBlclVuaXQ7CisgICAgICAgIG91dFhZQXJyYXlbMF0gPSAtd2lk
dGggLyAyOworCisgICAgICAgIC8vIEZvciBZLCB0cnkgVk9SRyBmaXJzdC4KKyAgICAgICAgaWYg
KHVzZVZPUkcpIHsKKyAgICAgICAgICAgIGludDE2X3QgdmVydE9yaWdpbllGVW5pdCA9IG1fdmVy
dE9yaWdpblkuZ2V0KGdseXBoKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0T3JpZ2luWUZVbml0KSB7
CisgICAgICAgICAgICAgICAgb3V0WFlBcnJheVsxXSA9IC12ZXJ0T3JpZ2luWUZVbml0ICogc2l6
ZVBlclVuaXQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoaXNuYW4oZGVmYXVsdFZlcnRPcmlnaW5ZKSkKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0VmVydE9yaWdpblkgPSAtbV9kZWZhdWx0VmVydE9yaWdpblkgKiBzaXplUGVyVW5pdDsK
KyAgICAgICAgICAgIG91dFhZQXJyYXlbMV0gPSBkZWZhdWx0VmVydE9yaWdpblk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5vIFZPUkcsIHRyeSB2
bXR4IG5leHQuCisgICAgICAgIGlmIChjb3VudFRvcFNpZGVCZWFyaW5ncykgeworICAgICAgICAg
ICAgaW50MTZfdCB0b3BTaWRlQmVhcmluZ0ZVbml0ID0gbV90b3BTaWRlQmVhcmluZ3NbZ2x5cGgg
PCBjb3VudFRvcFNpZGVCZWFyaW5ncyA/IGdseXBoIDogY291bnRUb3BTaWRlQmVhcmluZ3MgLSAx
XTsKKyAgICAgICAgICAgIGZsb2F0IHRvcFNpZGVCZWFyaW5nID0gdG9wU2lkZUJlYXJpbmdGVW5p
dCAqIHNpemVQZXJVbml0OworICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGZvbnQtPmJv
dW5kc0ZvckdseXBoKGdseXBoKTsKKyAgICAgICAgICAgIG91dFhZQXJyYXlbMV0gPSBib3VuZHMu
eSgpIC0gdG9wU2lkZUJlYXJpbmc7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIE5vIHZlcnRpY2FsIGluZm8gaW4gdGhlIGZvbnQgZmlsZTsgdXNlIGFzY2Vu
dCBhcyB2ZXJ0aWNhbCBvcmlnaW4uCisgICAgICAgIG91dFhZQXJyYXlbMV0gPSAtYXNjZW50Owor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGlj
YWxEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlNGVlNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVmVydGljYWxEYXRhLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBLb2ppIElzaGlpIDxrb2ppaXNoaUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE9wZW5UeXBlVmVydGljYWxEYXRhX2gKKyNkZWZpbmUgT3BlblR5cGVWZXJ0aWNhbERh
dGFfaAorCisjaW5jbHVkZSAiR2x5cGguaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250
UGxhdGZvcm1EYXRhOworY2xhc3MgR2x5cGhQYWdlOworY2xhc3MgU2ltcGxlRm9udERhdGE7CisK
K2NsYXNzIE9wZW5UeXBlVmVydGljYWxEYXRhIHsKK3B1YmxpYzoKKyAgICBPcGVuVHlwZVZlcnRp
Y2FsRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CisKKyAgICBib29sIGlzT3BlblR5cGUo
KSBjb25zdCB7IHJldHVybiAhbV9hZHZhbmNlV2lkdGhzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
aGFzVmVydGljYWxNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gIW1fYWR2YW5jZUhlaWdodHMuaXNF
bXB0eSgpOyB9CisgICAgZmxvYXQgYWR2YW5jZUhlaWdodChjb25zdCBTaW1wbGVGb250RGF0YSos
IEdseXBoKSBjb25zdDsKKyAgICB2b2lkIGdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhz
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGgqLCBzaXplX3QsIGZsb2F0KiBvdXRY
WUFycmF5KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIGhhc1ZPUkcoKSBjb25zdCB7IHJl
dHVybiAhbV92ZXJ0T3JpZ2luWS5pc0VtcHR5KCk7IH0KKworICAgIFZlY3Rvcjx1aW50MTZfdD4g
bV9hZHZhbmNlV2lkdGhzOworICAgIFZlY3Rvcjx1aW50MTZfdD4gbV9hZHZhbmNlSGVpZ2h0czsK
KyAgICBWZWN0b3I8aW50MTZfdD4gbV90b3BTaWRlQmVhcmluZ3M7CisgICAgaW50MTZfdCBtX2Rl
ZmF1bHRWZXJ0T3JpZ2luWTsKKyAgICBIYXNoTWFwPEdseXBoLCBpbnQxNl90PiBtX3ZlcnRPcmln
aW5ZOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gT3BlblR5cGVW
ZXJ0aWNhbERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCmluZGV4IDk4NjBkZjYuLjEwODFk
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
UGxhdGZvcm1EYXRhV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNzQsNiArNzUsMjUgQEAgRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShIRk9OVCBmb250LCBmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXEKICAgICBSZXN0b3JlREMoaGRjLCAtMSk7CiB9CiAKKyNpZiBV
U0UoQ0cpCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6b3BlblR5
cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKK3sKKyAgICBIV25kREMgaGRjKDApOworICAg
IEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIGhmb250KCkpOworCisgICAgRFdP
UkQgc2l6ZSA9IEdldEZvbnREYXRhKGhkYywgdGFibGUsIDAsIDAsIDApOworICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGJ1ZmZlcjsKKyAgICBpZiAoc2l6ZSAhPSBHRElfRVJST1IpIHsKKyAgICAg
ICAgYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisgICAgICAgIERXT1JEIHJl
c3VsdCA9IEdldEZvbnREYXRhKGhkYywgdGFibGUsIDAsIChQVk9JRClidWZmZXItPmRhdGEoKSwg
c2l6ZSk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gc2l6ZSk7CisgICAgfQorCisgICAgU2Vs
ZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Cit9
CisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcKIFN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNj
cmlwdGlvbigpIGNvbnN0CiB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>