<?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>121207</bug_id>
          
          <creation_ts>2013-09-11 21:06:24 -0700</creation_ts>
          <short_desc>[mac] Cache rendered image in PDFDocumentImage</short_desc>
          <delta_ts>2023-04-26 10:11:54 -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>PDF</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=255425</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121244</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>japhet</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>928125</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-09-11 21:06:24 -0700</bug_when>
    <thetext>Apparently, PDFKit/CGPDF have a significant fixed cost per paint, regardless of clipping. Therefore, rendering into multiple tiles via TileController, etc. is much more expensive than it would be if we drew into a bitmap. So, let&apos;s do that (up to some size where we think the memory cost of the bitmap is too significant).

This can also provide caching between paints, and a convenient way to hook into the image quality mechanism to make resizing PDFDocumentImage very fast.

&lt;rdar://problem/14930928&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928170</commentid>
    <comment_count>1</comment_count>
      <attachid>211402</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-09-11 23:26:46 -0700</bug_when>
    <thetext>Created attachment 211402
prelim</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928171</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-11 23:28:22 -0700</bug_when>
    <thetext>Attachment 211402 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/loader/cache/CachedImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/Image.h&apos;, u&apos;Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cg/PDFDocumentImage.h&apos;, u&apos;Source/WebCore/rendering/ImageQualityController.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/cg/PDFDocumentImage.h:85:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928336</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-12 09:34:38 -0700</bug_when>
    <thetext>Does this cache ever need to be reset? Perhaps when system antialiasing settings change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928418</commentid>
    <comment_count>4</comment_count>
      <attachid>211457</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-09-12 12:18:12 -0700</bug_when>
    <thetext>Created attachment 211457
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928420</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-09-12 12:19:38 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Does this cache ever need to be reset? Perhaps when system antialiasing settings change?

Maybe! It is currently reset in a few obvious cases. Color-profile changes and antialiasing changes are also interesting cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928440</commentid>
    <comment_count>6</comment_count>
      <attachid>211457</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-09-12 12:51:44 -0700</bug_when>
    <thetext>Comment on attachment 211457
patch

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

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:132
&gt; +    if (dstRect.size() != m_cachedDestinationSize)
&gt; +        return false;
&gt; +
&gt; +    if (srcRect != m_cachedSourceRect)
&gt; +        return false;

You should do these cheap tests before the expensive decompose-based ones

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:156
&gt; +        bufferContext-&gt;scale(FloatSize(hScale, vScale));
&gt; +        bufferContext-&gt;scale(FloatSize(1, -1));

You could just do -vScale on the first line.

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:166
&gt; +        int oldCachedBytes = m_cachedBytes;

size_t

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:170
&gt; +            imageObserver()-&gt;decodedSizeChanged(this, m_cachedBytes - oldCachedBytes);

But beware of unsigned math here.

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.h:59
&gt; +    virtual bool isPDFDocumentImage() const OVERRIDE { return true; }

FINAL?

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.h:85
&gt; +    bool cacheParametersMatch(GraphicsContext*, const FloatRect&amp; dstRect, const FloatRect&amp; srcRect);

can this be const?

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.h:97
&gt; +    int m_cachedBytes;

size_t?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928517</commentid>
    <comment_count>7</comment_count>
      <attachid>211457</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-09-12 15:06:13 -0700</bug_when>
    <thetext>Comment on attachment 211457
patch

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

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:150
&gt; +        m_cachedImageBuffer = context-&gt;createCompatibleBuffer(imageSize);
&gt; +        GraphicsContext* bufferContext = m_cachedImageBuffer-&gt;context();

You should test for a null buffer (it might be giant).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928539</commentid>
    <comment_count>8</comment_count>
      <attachid>211486</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-09-12 15:50:41 -0700</bug_when>
    <thetext>Created attachment 211486
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928542</commentid>
    <comment_count>9</comment_count>
      <attachid>211487</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-09-12 15:58:13 -0700</bug_when>
    <thetext>Created attachment 211487
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928557</commentid>
    <comment_count>10</comment_count>
      <attachid>211487</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-09-12 16:23:56 -0700</bug_when>
    <thetext>Comment on attachment 211487
patch

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

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.h:59
&gt; +    virtual bool isPDFDocumentImage() const OVERRIDE { return true; }

FINAL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928562</commentid>
    <comment_count>11</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-09-12 16:27:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 211487 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=211487&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.h:59
&gt; &gt; +    virtual bool isPDFDocumentImage() const OVERRIDE { return true; }
&gt; 
&gt; FINAL?

I don&apos;t think there&apos;s a reason to do that when the class is FINAL in its entirety, but maybe someone else knows?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928585</commentid>
    <comment_count>12</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-09-12 17:37:16 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/155665</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211402</attachid>
            <date>2013-09-11 23:26:46 -0700</date>
            <delta_ts>2013-09-12 12:18:12 -0700</delta_ts>
            <desc>prelim</desc>
            <filename>pdf-cache.diff</filename>
            <type>text/plain</type>
            <size>11791</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmluZGV4IDVjZDZh
NWEuLjI5YjMxMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcApAQCAtMzE1LDcgKzMxNSw3IEBAIGlubGluZSB2b2lkIENhY2hlZEltYWdlOjpjcmVhdGVJ
bWFnZSgpCiAgICAgICAgIHJldHVybjsKICNpZiBVU0UoQ0cpICYmICFVU0UoV0VCS0lUX0lNQUdF
X0RFQ09ERVJTKQogICAgIGVsc2UgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9PSAiYXBwbGlj
YXRpb24vcGRmIikKLSAgICAgICAgbV9pbWFnZSA9IFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZSgp
OworICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlKHRoaXMpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFNWRykKICAgICBlbHNlIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkg
PT0gImltYWdlL3N2Zyt4bWwiKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaAppbmRleCA3NjhkMGU0Li41ZmM2ZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc1BERkRvY3VtZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSA9IDA7CiAKICAgICAvLyBE
ZXJpdmVkIGNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgaWYgdGhleSBjYW4gYXNzdXJlIHRo
YXQgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDlhZjY5Y2QuLjkxNWY0MWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgVVNFKENHKQogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZU9ic2Vy
dmVyLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBA
IC00NCw4ICs0NSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUERGRG9jdW1lbnRJbWFn
ZTo6UERGRG9jdW1lbnRJbWFnZSgpCi0gICAgOiBJbWFnZSgwKSAvLyBQREZzIGRvbid0IGFuaW1h
dGUKK1BERkRvY3VtZW50SW1hZ2U6OlBERkRvY3VtZW50SW1hZ2UoSW1hZ2VPYnNlcnZlciogb2Jz
ZXJ2ZXIpCisgICAgOiBJbWFnZShvYnNlcnZlcikKICAgICAsIG1fcm90YXRpb24oMC4wZikKICAg
ICAsIG1faGFzUGFnZShmYWxzZSkKIHsKQEAgLTk1LDIzICs5Niw0MiBAQCBib29sIFBERkRvY3Vt
ZW50SW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogCiB2b2lkIFBERkRv
Y3VtZW50SW1hZ2U6OmFwcGx5Um90YXRpb25Gb3JQYWludGluZyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7Ci0gICAgLy8gcm90YXRlIHRoZSBjcm9wIGJveCBhbmQgY2FsY3VsYXRl
IGJvdW5kaW5nIGJveAorICAgIC8vIFJvdGF0ZSB0aGUgY3JvcCBib3ggYW5kIGNhbGN1bGF0ZSBi
b3VuZGluZyBib3guCiAgICAgZmxvYXQgc2luYSA9IHNpbmYoLW1fcm90YXRpb24pOwogICAgIGZs
b2F0IGNvc2EgPSBjb3NmKC1tX3JvdGF0aW9uKTsKICAgICBmbG9hdCB3aWR0aCA9IG1fY3JvcEJv
eC53aWR0aCgpOwogICAgIGZsb2F0IGhlaWdodCA9IG1fY3JvcEJveC5oZWlnaHQoKTsKIAotICAg
IC8vIGNhbGN1bGF0ZSByb3RhdGVkIHggYW5kIHkgZWRnZXMgb2YgdGhlIGNyb3AgYm94LiBpZiB0
aGV5J3JlIG5lZ2F0aXZlLCBpdCBtZWFucyBwYXJ0IG9mIHRoZSBpbWFnZSBoYXMKLSAgICAvLyBi
ZWVuIHJvdGF0ZWQgb3V0c2lkZSBvZiB0aGUgYm91bmRzIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IG92
ZXIgdGhlIGltYWdlIHNvIGl0IGxpZXMgaW5zaWRlIHRoZSBib3VuZHMgYWdhaW4KKyAgICAvLyBD
YWxjdWxhdGUgcm90YXRlZCB4IGFuZCB5IGVkZ2VzIG9mIHRoZSBjcm9wIGJveC4gSWYgdGhleSdy
ZSBuZWdhdGl2ZSwgaXQgbWVhbnMgcGFydCBvZiB0aGUgaW1hZ2UgaGFzCisgICAgLy8gYmVlbiBy
b3RhdGVkIG91dHNpZGUgb2YgdGhlIGJvdW5kcyBhbmQgd2UgbmVlZCB0byBzaGlmdCBvdmVyIHRo
ZSBpbWFnZSBzbyBpdCBsaWVzIGluc2lkZSB0aGUgYm91bmRzIGFnYWluLgogICAgIENHUG9pbnQg
cnggPSBDR1BvaW50TWFrZSh3aWR0aCAqIGNvc2EsIHdpZHRoICogc2luYSk7CiAgICAgQ0dQb2lu
dCByeSA9IENHUG9pbnRNYWtlKC1oZWlnaHQgKiBzaW5hLCBoZWlnaHQgKiBjb3NhKTsKIAotICAg
IC8vIGFkanVzdCBzbyB3ZSBhcmUgYXQgdGhlIGNyb3AgYm94IG9yaWdpbgorICAgIC8vIEFkanVz
dCBzbyB3ZSBhcmUgYXQgdGhlIGNyb3AgYm94IG9yaWdpbi4KICAgICBjb25zdCBDR0Zsb2F0IHpl
cm8gPSAwOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgZmxvb3JmKC1zdGQ6Om1pbih6ZXJvLCBzdGQ6Om1pbihyeC54LCByeS54KSkpLCBmbG9v
cmYoLXN0ZDo6bWluKHplcm8sIHN0ZDo6bWluKHJ4LnksIHJ5LnkpKSkpOworICAgIGNvbnRleHQt
PnRyYW5zbGF0ZShmbG9vcmYoLXN0ZDo6bWluKHplcm8sIHN0ZDo6bWluKHJ4LngsIHJ5LngpKSks
IGZsb29yZigtc3RkOjptaW4oemVybywgc3RkOjptaW4ocngueSwgcnkueSkpKSk7CiAKLSAgICAv
LyByb3RhdGUgLXZlIHRvIHJlbW92ZSByb3RhdGlvbgotICAgIENHQ29udGV4dFJvdGF0ZUNUTShj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgLW1fcm90YXRpb24pOworICAgIC8vIFJlbW92ZSBy
b3RhdGlvbi4KKyAgICBjb250ZXh0LT5yb3RhdGUoLW1fcm90YXRpb24pOworfQorCitib29sIFBE
RkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qp
Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNm
b3JtOworICAgIGNvbnRleHQtPmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNs
dWRlRGV2aWNlU2NhbGUpLmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKworICAgIEFm
ZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsK
KyAgICBtX2NhY2hlZFRyYW5zZm9ybS5kZWNvbXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9y
bSk7CisgICAgaWYgKGRlY29tcG9zZWRUcmFuc2Zvcm0uc2NhbGVYICE9IGNhY2hlZERlY29tcG9z
ZWRUcmFuc2Zvcm0uc2NhbGVYIHx8IGRlY29tcG9zZWRUcmFuc2Zvcm0uc2NhbGVZICE9IGNhY2hl
ZERlY29tcG9zZWRUcmFuc2Zvcm0uc2NhbGVZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoZHN0UmVjdC5zaXplKCkgIT0gbV9jYWNoZWREZXN0aW5hdGlvblNpemUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChzcmNSZWN0ICE9IG1fY2FjaGVkU291cmNlUmVjdCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlKQpAQCAtMTE5LDI5ICsxMzksNjUgQEAgdm9pZCBQ
REZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LAogICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9oYXNQYWdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqY29udGV4dCk7CisgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGlzdGluZyBpbWFn
ZSwgcmV1c2UgaXQgaWYgd2UncmUgZG9pbmcgYSBsb3ctcXVhbGl0eSBwYWludCwgZXZlbiBpZiBj
YWNoZSBwYXJhbWV0ZXJzIGRvbid0IG1hdGNoOworICAgIC8vIHdlJ2xsIHJlcmVuZGVyIHdoZW4g
d2UgZG8gdGhlIHN1YnNlcXVlbnQgaGlnaC1xdWFsaXR5IHBhaW50LgorICAgIEludGVycG9sYXRp
b25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5ID0gY29udGV4dC0+aW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSgpOworICAgIGJvb2wgdXNlTG93UXVhbGl0eUludGVycG9sYXRpb24gPSBpbnRl
cnBvbGF0aW9uUXVhbGl0eSA9PSBJbnRlcnBvbGF0aW9uTm9uZSB8fCBpbnRlcnBvbGF0aW9uUXVh
bGl0eSA9PSBJbnRlcnBvbGF0aW9uTG93OwogCi0gICAgICAgIGNvbnRleHQtPnNldENvbXBvc2l0
ZU9wZXJhdGlvbihvcCk7CisgICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyIHx8ICghY2FjaGVQ
YXJhbWV0ZXJzTWF0Y2goY29udGV4dCwgZHN0UmVjdCwgc3JjUmVjdCkgJiYgIXVzZUxvd1F1YWxp
dHlJbnRlcnBvbGF0aW9uKSkgeworICAgICAgICBJbnRTaXplIGltYWdlU2l6ZSA9IGVuY2xvc2lu
Z0ludFJlY3QoZHN0UmVjdCkuc2l6ZSgpOworICAgICAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0g
Y29udGV4dC0+Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihpbWFnZVNpemUpOworICAgICAgICBHcmFw
aGljc0NvbnRleHQqIGJ1ZmZlckNvbnRleHQgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5jb250ZXh0
KCk7CiAKICAgICAgICAgZmxvYXQgaFNjYWxlID0gZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVjdC53
aWR0aCgpOwogICAgICAgICBmbG9hdCB2U2NhbGUgPSBkc3RSZWN0LmhlaWdodCgpIC8gc3JjUmVj
dC5oZWlnaHQoKTsKKyAgICAgICAgYnVmZmVyQ29udGV4dC0+dHJhbnNsYXRlKHNyY1JlY3QueCgp
ICogaFNjYWxlLCBzcmNSZWN0LnkoKSAqIHZTY2FsZSk7CisgICAgICAgIGJ1ZmZlckNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZShoU2NhbGUsIHZTY2FsZSkpOworICAgICAgICBidWZmZXJDb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICAgICAgYnVmZmVyQ29udGV4dC0+dHJhbnNs
YXRlKDAsIC1zcmNSZWN0LmhlaWdodCgpKTsKKworICAgICAgICBkcmF3UERGUGFnZShidWZmZXJD
b250ZXh0KTsKIAotICAgICAgICAvLyBTY2FsZSBhbmQgdHJhbnNsYXRlIHNvIHRoZSBkb2N1bWVu
dCBpcyByZW5kZXJlZCBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbiwKLSAgICAgICAgLy8gYWNjb3Vu
dGluZyBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgR3JhcGhpY3NDb250ZXh0IGlzIGZsaXBwZWQuCi0g
ICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
ZHN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSAqIGhTY2FsZSwgZHN0UmVjdC55KCkgLSBzcmNSZWN0
LnkoKSAqIHZTY2FsZSk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCBoU2NhbGUsIHZTY2FsZSk7Ci0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RN
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7Ci0gICAgICAgIENHQ29udGV4dFRy
YW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgMCwgLXNyY1JlY3QuaGVpZ2h0
KCkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCBDR1JlY3RJbnRlZ3JhbChzcmNSZWN0KSk7CisgICAgICAgIG1fY2FjaGVkVHJhbnNmb3Jt
ID0gY29udGV4dC0+Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZp
Y2VTY2FsZSk7CisgICAgICAgIG1fY2FjaGVkRGVzdGluYXRpb25TaXplID0gZHN0UmVjdC5zaXpl
KCk7CisgICAgICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CiAKLSAgICAgICAgZHJh
d1BERlBhZ2UoY29udGV4dCk7CisgICAgICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gbV9jYWNo
ZWRJbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGludCBvbGRDYWNoZWRCeXRl
cyA9IG1fY2FjaGVkQnl0ZXM7CisgICAgICAgIG1fY2FjaGVkQnl0ZXMgPSBpbnRlcm5hbFNpemUu
d2lkdGgoKSAqIGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIDQ7CisKKyAgICAgICAgaWYgKGltYWdl
T2JzZXJ2ZXIoKSkKKyAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFu
Z2VkKHRoaXMsIG1fY2FjaGVkQnl0ZXMgLSBvbGRDYWNoZWRCeXRlcyk7CisgICAgfQorCisgICAg
eworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQp
OworICAgICAgICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworICAgICAgICBj
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9jYWNoZWRJbWFnZUJ1ZmZlci5nZXQoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgZHN0UmVjdCk7CiAgICAgfQogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCit2b2lkIFBE
RkRvY3VtZW50SW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sKQoreworICAgIG1fY2FjaGVk
SW1hZ2VCdWZmZXIgPSBudWxscHRyOworCisgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAg
ICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLW1fY2FjaGVkQnl0
ZXMpOworCisgICAgbV9jYWNoZWRCeXRlcyA9IDA7Cit9CisKK3Vuc2lnbmVkIFBERkRvY3VtZW50
SW1hZ2U6OmRlY29kZWRTaXplKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogUERGRG9jdW1lbnRJ
bWFnZSBpcyB1bmRlcnJlcG9ydGluZyBkZWNvZGVkIHNpemVzIGJlY2F1c2UgdGhpcworICAgIC8v
IG9ubHkgaW5jbHVkZXMgdGhlIGNhY2hlZCBpbWFnZSBhbmQgbm90aGluZyBlbHNlLgorCisgICAg
cmV0dXJuIG1fY2FjaGVkQnl0ZXM7Cit9CisKICNpZiAhVVNFKFBERktJVF9GT1JfUERGRE9DVU1F
TlRJTUFHRSkKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlUERGRG9jdW1lbnQoKQogewpA
QCAtMTc1LDcgKzIzMSw3IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogICAgIGFwcGx5Um90YXRpb25Gb3JQYWludGluZyhj
b250ZXh0KTsKIAotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgLW1fY3JvcEJveC54KCksIC1tX2Nyb3BCb3gueSgpKTsKKyAgICBjb250ZXh0LT50
cmFuc2xhdGUoLW1fY3JvcEJveC54KCksIC1tX2Nyb3BCb3gueSgpKTsKIAogICAgIC8vIENHUERG
IHBhZ2VzIGFyZSBpbmRleGVkIGZyb20gMS4KICAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5n
ZXQoKSwgMSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5oCmluZGV4IDExYjQ1MDUuLmZhMDMxYTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUERGRG9jdW1lbnRJbWFnZV9oCiAjZGVmaW5l
IFBERkRvY3VtZW50SW1hZ2VfaAogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUg
IkltYWdlLmgiCkBAIC00MiwyOCArNDMsMjkgQEAgT0JKQ19DTEFTUyBQREZEb2N1bWVudDsKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW1hZ2VC
dWZmZXI7CiAKIGNsYXNzIFBERkRvY3VtZW50SW1hZ2UgOiBwdWJsaWMgSW1hZ2UgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBERkRvY3VtZW50SW1hZ2U+IGNyZWF0ZSgpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UERGRG9jdW1lbnRJbWFnZT4gY3JlYXRlKEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQREZEb2N1bWVu
dEltYWdlKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQREZEb2N1bWVudEltYWdlKG9i
c2VydmVyKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFBERkRvY3VtZW50SW1hZ2UoKTsKKyAg
ICBQREZEb2N1bWVudEltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKICAgICB2aXJ0dWFsIH5QREZEb2N1
bWVudEltYWdlKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNQREZEb2N1bWVudEltYWdlKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5n
bGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkgT1ZFUlJJREU7
CiAKLSAgICAvLyBGSVhNRTogUERGIEltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBz
aXplcyBhbmQgd2lsbCBiZSB1bmFibGUKLSAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1
bmN0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eURlY29kZWREYXRhKGJvb2wgLypkZXN0cm95QWxsKi8gPSB0cnVlKSBPVkVSUklERSB7IH0KLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCAvKmRlc3Ryb3lB
bGwqLyA9IHRydWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUo
KSBjb25zdCBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlSW50cmluc2ljRGlt
ZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdodCwg
RmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbykgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBJbnRTaXpl
IHNpemUoKSBjb25zdCBPVkVSUklERTsKQEAgLTgwLDEyICs4MiwyMCBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIHBhZ2VDb3VudCgpIGNvbnN0OwogICAgIHZvaWQgZHJhd1BERlBhZ2UoR3JhcGhp
Y3NDb250ZXh0Kik7CiAKKyAgICBib29sIGNhY2hlUGFyYW1ldGVyc01hdGNoKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpOworCiAjaWYgVVNFKFBERktJVF9GT1JfUERGRE9DVU1FTlRJTUFHRSkKICAgICBS
ZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAjZWxzZQogICAgIFJldGFpblB0cjxD
R1BERkRvY3VtZW50UmVmPiBtX2RvY3VtZW50OwogI2VuZGlmCiAKKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IG1fY2FjaGVkSW1hZ2VCdWZmZXI7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fY2FjaGVk
VHJhbnNmb3JtOworICAgIEZsb2F0U2l6ZSBtX2NhY2hlZERlc3RpbmF0aW9uU2l6ZTsKKyAgICBG
bG9hdFJlY3QgbV9jYWNoZWRTb3VyY2VSZWN0OworICAgIGludCBtX2NhY2hlZEJ5dGVzOworCiAg
ICAgRmxvYXRSZWN0IG1fbWVkaWFCb3g7CiAgICAgRmxvYXRSZWN0IG1fY3JvcEJveDsKICAgICBm
bG9hdCBtX3JvdGF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lt
YWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ltYWdl
UXVhbGl0eUNvbnRyb2xsZXIuY3BwCmluZGV4IGM2NmU2YTcuLmNjZTNlMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbWFnZVF1YWxpdHlDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHAKQEAg
LTEwMyw3ICsxMDMsNyBAQCBib29sIEltYWdlUXVhbGl0eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50
QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUgogewogICAgIC8vIElmIHRo
ZSBpbWFnZSBpcyBub3QgYSBiaXRtYXAgaW1hZ2UsIHRoZW4gbm9uZSBvZiB0aGlzIGlzIHJlbGV2
YW50IGFuZCB3ZSBqdXN0IHBhaW50IGF0IGhpZ2gKICAgICAvLyBxdWFsaXR5LgotICAgIGlmICgh
aW1hZ2UgfHwgIWltYWdlLT5pc0JpdG1hcEltYWdlKCkgfHwgY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgIGlmICghaW1hZ2UgfHwgIShpbWFnZS0+aXNCaXRtYXBJbWFnZSgpIHx8IGlt
YWdlLT5pc1BERkRvY3VtZW50SW1hZ2UoKSkgfHwgY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2ggKG9iamVjdC0+c3R5bGUoKS0+
aW1hZ2VSZW5kZXJpbmcoKSkgewpAQCAtMTQyLDExICsxNDIsOCBAQCBib29sIEltYWdlUXVhbGl0
eUNvbnRyb2xsZXI6OnNob3VsZFBhaW50QXRMb3dRdWFsaXR5KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgUgogICAgICAgICAgICAgbV9saXZlUmVzaXplT3B0aW1pemF0aW9uSXNBY3RpdmUgPSB0
cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1f
bGl2ZVJlc2l6ZU9wdGltaXphdGlvbklzQWN0aXZlKSB7Ci0gICAgICAgICAgICAvLyBMaXZlIHJl
c2l6ZSBoYXMgZW5kZWQsIHBhaW50IGluIEhRIGFuZCByZW1vdmUgdGhpcyBvYmplY3QgZnJvbSB0
aGUgbGlzdC4KLSAgICAgICAgICAgIHJlbW92ZUxheWVyKG9iamVjdCwgaW5uZXJNYXAsIGxheWVy
KTsKKyAgICAgICAgaWYgKG1fbGl2ZVJlc2l6ZU9wdGltaXphdGlvbklzQWN0aXZlKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgfQogCiAgICAgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBjdXJyZW50VHJhbnNmb3JtID0gY29udGV4dC0+Z2V0Q1RNKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211457</attachid>
            <date>2013-09-12 12:18:12 -0700</date>
            <delta_ts>2013-09-12 15:50:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pdf-cache.diff</filename>
            <type>text/plain</type>
            <size>13765</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYmY3ZGY1Li4xOTJmMDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUg
QEAKKzIwMTMtMDktMTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW21hY10gQ2FjaGUgcmVuZGVyZWQgaW1hZ2UgaW4gUERGRG9jdW1lbnRJbWFnZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMjA3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmNyZWF0ZUlt
YWdlKToKKyAgICAgICAgUERGRG9jdW1lbnRJbWFnZSB0YWtlcyBhIEltYWdlT2JzZXJ2ZXIgbm93
IHNvIHRoYXQgaXQgY2FuIHJlcG9ydAorICAgICAgICBkZWNvZGVkIGRhdGEgc2l6ZSBjaGFuZ2Vz
IHRvIHRoZSBtZW1vcnkgY2FjaGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmlzUERGRG9jdW1lbnRJbWFnZSk6IEFkZGVk
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpQREZEb2N1bWVudEltYWdlKToK
KyAgICAgICAgUERGRG9jdW1lbnRJbWFnZSB0YWtlcyBhIEltYWdlT2JzZXJ2ZXIgbm93IHNvIHRo
YXQgaXQgY2FuIHJlcG9ydAorICAgICAgICBkZWNvZGVkIGRhdGEgc2l6ZSBjaGFuZ2VzIHRvIHRo
ZSBtZW1vcnkgY2FjaGUuCisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmFw
cGx5Um90YXRpb25Gb3JQYWludGluZyk6CisgICAgICAgIEZpeCB1cCBzb21lIGNvbW1lbnRzLCBh
bmQgdXNlIEdyYXBoaWNzQ29udGV4dCBpbnN0ZWFkIG9mIENHIEFQSS4KKworICAgICAgICAoV2Vi
Q29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2gpOgorICAgICAgICBE
ZXRlcm1pbmUgd2hldGhlciBvdXIgY2FjaGVkIGltYWdlIGlzIHN0aWxsIHZhbGlkLCBnaXZlbiB0
aGUgbmV3CisgICAgICAgIGRlc3RpbmF0aW9uJ3Mgc2l6ZSwgQ1RNIHNjYWxlLCBhbmQgc291cmNl
IHJlY3QuCisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRyYXcpOgorICAg
ICAgICBDYWNoZSBhIHJlbmRlcmVkIGJpdG1hcCBvZiB0aGUgUERGLiBJbnZhbGlkYXRlIHRoZSBj
YWNoZSBpZiBjYWNoZVBhcmFtZXRlcnNNYXRjaAorICAgICAgICBkZWNpZGVzIHRoYXQgdGhlIHBh
cmFtZXRlcnMgZG9uJ3QgbWF0Y2gsIHVubGVzcyB3ZSdyZSBwYWludGluZyBpbiBsb3cgcXVhbGl0
eSBtb2RlLAorICAgICAgICBpbiB3aGljaCBjYXNlIHdlJ2xsIHNjYWxlIHRoZSBleGlzdGluZyBp
bWFnZSAoYW5kIHRoZW4gZnVsbHkgcmVwYWludCB3aGVuIHRoZQorICAgICAgICBoaWdoLXF1YWxp
dHkgcmVwYWludCB0aW1lciBmaXJlcykuCisgICAgICAgIEluZm9ybSB0aGUgbWVtb3J5IGNhY2hl
IG9mIG91ciBuZXcgc2l6ZS4KKworICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6
ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAgICAgVGhyb3cgYXdheSB0aGUgY2FjaGVkIGltYWdl
IGlmIHJlcXVlc3RlZC4KKworICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZGVj
b2RlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBh
Z2UpOgorICAgICAgICBEcml2ZS1ieSB1c2UgR3JhcGhpY3NDb250ZXh0IGluc3RlYWQgb2YgQ0cg
ZGlyZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpjcmVhdGUpOgorICAg
ICAgICBPdmVycmlkZSBpc1BERkRvY3VtZW50SW1hZ2UoKS4KKyAgICAgICAgQWRkIHN0b3JhZ2Ug
Zm9yIHRoZSBjYWNoZWQgaW1hZ2UgYnVmZmVyIGFuZCB2YXJpb3VzIGNhY2hlIHBhcmFtZXRlcnMu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVF1YWxpdHlDb250cm9sbGVyOjpzaG91bGRQYWludEF0TG93UXVh
bGl0eSk6CisgICAgICAgIFBERkRvY3VtZW50SW1hZ2UgaXMgYWxzbyBpbnRlcmVzdGVkIGluL2Nh
cGFibGUgb2YgbG93LXF1YWxpdHkgcGFpbnRpbmcgbm93LgorCiAyMDEzLTA5LTEyICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5kb3dzXSBCdWlsZCBm
aXggYWZ0ZXIgcjE1NTYyMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5jcHAKaW5kZXggNWNkNmE1YS4uMjliMzExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCkBAIC0zMTUsNyArMzE1LDcgQEAgaW5saW5lIHZvaWQgQ2Fj
aGVkSW1hZ2U6OmNyZWF0ZUltYWdlKCkKICAgICAgICAgcmV0dXJuOwogI2lmIFVTRShDRykgJiYg
IVVTRShXRUJLSVRfSU1BR0VfREVDT0RFUlMpCiAgICAgZWxzZSBpZiAobV9yZXNwb25zZS5taW1l
VHlwZSgpID09ICJhcHBsaWNhdGlvbi9wZGYiKQotICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1l
bnRJbWFnZTo6Y3JlYXRlKCk7CisgICAgICAgIG1faW1hZ2UgPSBQREZEb2N1bWVudEltYWdlOjpj
cmVhdGUodGhpcyk7CiAjZW5kaWYKICNpZiBFTkFCTEUoU1ZHKQogICAgIGVsc2UgaWYgKG1fcmVz
cG9uc2UubWltZVR5cGUoKSA9PSAiaW1hZ2Uvc3ZnK3htbCIpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCmluZGV4IDJlMzM2NGEuLmIxN2Q5ODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTAwLDYgKzEwMCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNCaXRtYXBJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzUERGRG9jdW1lbnRJbWFnZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgp
ID0gMDsKIAogICAgIC8vIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBpZiB0
aGV5IGNhbiBhc3N1cmUgdGhhdCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggNTY3ZWQ4Ny4uODE0ZTc2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpZiBVU0UoQ0cpCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKQEAgLTQ0LDggKzQ1LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1QREZEb2N1bWVudEltYWdlOjpQREZEb2N1bWVudEltYWdlKCkKLSAgICA6IEltYWdlKDApIC8v
IFBERnMgZG9uJ3QgYW5pbWF0ZQorUERGRG9jdW1lbnRJbWFnZTo6UERGRG9jdW1lbnRJbWFnZShJ
bWFnZU9ic2VydmVyKiBvYnNlcnZlcikKKyAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV9j
YWNoZWRCeXRlcygwKQogICAgICwgbV9yb3RhdGlvbigwLjBmKQogICAgICwgbV9oYXNQYWdlKGZh
bHNlKQogewpAQCAtOTUsMjMgKzk3LDQxIEBAIGJvb2wgUERGRG9jdW1lbnRJbWFnZTo6ZGF0YUNo
YW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6YXBw
bHlSb3RhdGlvbkZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsK
LSAgICAvLyByb3RhdGUgdGhlIGNyb3AgYm94IGFuZCBjYWxjdWxhdGUgYm91bmRpbmcgYm94Cisg
ICAgLy8gUm90YXRlIHRoZSBjcm9wIGJveCBhbmQgY2FsY3VsYXRlIGJvdW5kaW5nIGJveC4KICAg
ICBmbG9hdCBzaW5hID0gc2luZigtbV9yb3RhdGlvbik7CiAgICAgZmxvYXQgY29zYSA9IGNvc2Yo
LW1fcm90YXRpb24pOwogICAgIGZsb2F0IHdpZHRoID0gbV9jcm9wQm94LndpZHRoKCk7CiAgICAg
ZmxvYXQgaGVpZ2h0ID0gbV9jcm9wQm94LmhlaWdodCgpOwogCi0gICAgLy8gY2FsY3VsYXRlIHJv
dGF0ZWQgeCBhbmQgeSBlZGdlcyBvZiB0aGUgY3JvcCBib3guIGlmIHRoZXkncmUgbmVnYXRpdmUs
IGl0IG1lYW5zIHBhcnQgb2YgdGhlIGltYWdlIGhhcwotICAgIC8vIGJlZW4gcm90YXRlZCBvdXRz
aWRlIG9mIHRoZSBib3VuZHMgYW5kIHdlIG5lZWQgdG8gc2hpZnQgb3ZlciB0aGUgaW1hZ2Ugc28g
aXQgbGllcyBpbnNpZGUgdGhlIGJvdW5kcyBhZ2FpbgorICAgIC8vIENhbGN1bGF0ZSByb3RhdGVk
IHggYW5kIHkgZWRnZXMgb2YgdGhlIGNyb3AgYm94LiBJZiB0aGV5J3JlIG5lZ2F0aXZlLCBpdCBt
ZWFucyBwYXJ0IG9mIHRoZSBpbWFnZSBoYXMKKyAgICAvLyBiZWVuIHJvdGF0ZWQgb3V0c2lkZSBv
ZiB0aGUgYm91bmRzIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IG92ZXIgdGhlIGltYWdlIHNvIGl0IGxp
ZXMgaW5zaWRlIHRoZSBib3VuZHMgYWdhaW4uCiAgICAgQ0dQb2ludCByeCA9IENHUG9pbnRNYWtl
KHdpZHRoICogY29zYSwgd2lkdGggKiBzaW5hKTsKICAgICBDR1BvaW50IHJ5ID0gQ0dQb2ludE1h
a2UoLWhlaWdodCAqIHNpbmEsIGhlaWdodCAqIGNvc2EpOwogCi0gICAgLy8gYWRqdXN0IHNvIHdl
IGFyZSBhdCB0aGUgY3JvcCBib3ggb3JpZ2luCisgICAgLy8gQWRqdXN0IHNvIHdlIGFyZSBhdCB0
aGUgY3JvcCBib3ggb3JpZ2luLgogICAgIGNvbnN0IENHRmxvYXQgemVybyA9IDA7Ci0gICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBmbG9vcmYoLXN0
ZDo6bWluKHplcm8sIHN0ZDo6bWluKHJ4LngsIHJ5LngpKSksIGZsb29yZigtc3RkOjptaW4oemVy
bywgc3RkOjptaW4ocngueSwgcnkueSkpKSk7CisgICAgY29udGV4dC0+dHJhbnNsYXRlKGZsb29y
Zigtc3RkOjptaW4oemVybywgc3RkOjptaW4ocngueCwgcnkueCkpKSwgZmxvb3JmKC1zdGQ6Om1p
bih6ZXJvLCBzdGQ6Om1pbihyeC55LCByeS55KSkpKTsKIAotICAgIC8vIHJvdGF0ZSAtdmUgdG8g
cmVtb3ZlIHJvdGF0aW9uCi0gICAgQ0dDb250ZXh0Um90YXRlQ1RNKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLCAtbV9yb3RhdGlvbik7CisgICAgY29udGV4dC0+cm90YXRlKC1tX3JvdGF0aW9u
KTsKK30KKworYm9vbCBQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0KQoreworICAgIEFmZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUg
ZGVjb21wb3NlZFRyYW5zZm9ybTsKKyAgICBjb250ZXh0LT5nZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKS5kZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5z
Zm9ybSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm06OkRlY29tcG9zZWRUeXBlIGNhY2hlZERlY29t
cG9zZWRUcmFuc2Zvcm07CisgICAgbV9jYWNoZWRUcmFuc2Zvcm0uZGVjb21wb3NlKGNhY2hlZERl
Y29tcG9zZWRUcmFuc2Zvcm0pOworICAgIGlmIChkZWNvbXBvc2VkVHJhbnNmb3JtLnNjYWxlWCAh
PSBjYWNoZWREZWNvbXBvc2VkVHJhbnNmb3JtLnNjYWxlWCB8fCBkZWNvbXBvc2VkVHJhbnNmb3Jt
LnNjYWxlWSAhPSBjYWNoZWREZWNvbXBvc2VkVHJhbnNmb3JtLnNjYWxlWSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IG1fY2FjaGVkRGVzdGluYXRp
b25TaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3JjUmVjdCAhPSBtX2Nh
Y2hlZFNvdXJjZVJlY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSkKQEAgLTExOSwyOSAr
MTM5LDY1IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwg
IW1faGFzUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgewotICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOworICAgIC8vIElmIHdlIGhhdmUg
YW4gZXhpc3RpbmcgaW1hZ2UsIHJldXNlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgbG93LXF1YWxpdHkg
cGFpbnQsIGV2ZW4gaWYgY2FjaGUgcGFyYW1ldGVycyBkb24ndCBtYXRjaDsKKyAgICAvLyB3ZSds
bCByZXJlbmRlciB3aGVuIHdlIGRvIHRoZSBzdWJzZXF1ZW50IGhpZ2gtcXVhbGl0eSBwYWludC4K
KyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnRleHQt
PmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsKKyAgICBib29sIHVzZUxvd1F1YWxpdHlJbnRl
cnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvblF1YWxpdHkgPT0gSW50ZXJwb2xhdGlvbk5vbmUgfHwg
aW50ZXJwb2xhdGlvblF1YWxpdHkgPT0gSW50ZXJwb2xhdGlvbkxvdzsKIAotICAgICAgICBjb250
ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworICAgIGlmICghbV9jYWNoZWRJbWFnZUJ1
ZmZlciB8fCAoIWNhY2hlUGFyYW1ldGVyc01hdGNoKGNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3Qp
ICYmICF1c2VMb3dRdWFsaXR5SW50ZXJwb2xhdGlvbikpIHsKKyAgICAgICAgSW50U2l6ZSBpbWFn
ZVNpemUgPSBlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpLnNpemUoKTsKKyAgICAgICAgbV9jYWNo
ZWRJbWFnZUJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoaW1hZ2VTaXpl
KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBidWZmZXJDb250ZXh0ID0gbV9jYWNoZWRJbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpOwogCiAgICAgICAgIGZsb2F0IGhTY2FsZSA9IGRzdFJlY3Qud2lk
dGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKICAgICAgICAgZmxvYXQgdlNjYWxlID0gZHN0UmVjdC5o
ZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgICAgIGJ1ZmZlckNvbnRleHQtPnRyYW5z
bGF0ZShzcmNSZWN0LngoKSAqIGhTY2FsZSwgc3JjUmVjdC55KCkgKiB2U2NhbGUpOworICAgICAg
ICBidWZmZXJDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoaFNjYWxlLCB2U2NhbGUpKTsKKyAgICAg
ICAgYnVmZmVyQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgICAgIGJ1ZmZl
ckNvbnRleHQtPnRyYW5zbGF0ZSgwLCAtc3JjUmVjdC5oZWlnaHQoKSk7CisKKyAgICAgICAgZHJh
d1BERlBhZ2UoYnVmZmVyQ29udGV4dCk7CiAKLSAgICAgICAgLy8gU2NhbGUgYW5kIHRyYW5zbGF0
ZSBzbyB0aGUgZG9jdW1lbnQgaXMgcmVuZGVyZWQgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24sCi0g
ICAgICAgIC8vIGFjY291bnRpbmcgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIEdyYXBoaWNzQ29udGV4
dCBpcyBmbGlwcGVkLgotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIGRzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkgKiBoU2NhbGUsIGRzdFJl
Y3QueSgpIC0gc3JjUmVjdC55KCkgKiB2U2NhbGUpOwotICAgICAgICBDR0NvbnRleHRTY2FsZUNU
TShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgaFNjYWxlLCB2U2NhbGUpOwotICAgICAgICBD
R0NvbnRleHRTY2FsZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgMSwgLTEpOwotICAg
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIDAs
IC1zcmNSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dSZWN0SW50ZWdyYWwoc3JjUmVjdCkpOworICAgICAgICBt
X2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQtPmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmlu
aXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgICAgICBtX2NhY2hlZERlc3RpbmF0aW9uU2l6
ZSA9IGRzdFJlY3Quc2l6ZSgpOworICAgICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0
OwogCi0gICAgICAgIGRyYXdQREZQYWdlKGNvbnRleHQpOworICAgICAgICBJbnRTaXplIGludGVy
bmFsU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOworICAgICAgICBp
bnQgb2xkQ2FjaGVkQnl0ZXMgPSBtX2NhY2hlZEJ5dGVzOworICAgICAgICBtX2NhY2hlZEJ5dGVz
ID0gaW50ZXJuYWxTaXplLndpZHRoKCkgKiBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiA0OworCisg
ICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgICAgICBpbWFnZU9ic2VydmVyKCkt
PmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBtX2NhY2hlZEJ5dGVzIC0gb2xkQ2FjaGVkQnl0ZXMp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKCpjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG9wKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fY2FjaGVkSW1hZ2VCdWZm
ZXIuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QpOwogICAgIH0KIAogICAgIGlm
IChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlz
KTsKIH0KIAordm9pZCBQREZEb2N1bWVudEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkK
K3sKKyAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0gbnVsbHB0cjsKKworICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRo
aXMsIC1tX2NhY2hlZEJ5dGVzKTsKKworICAgIG1fY2FjaGVkQnl0ZXMgPSAwOworfQorCit1bnNp
Z25lZCBQREZEb2N1bWVudEltYWdlOjpkZWNvZGVkU2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFBERkRvY3VtZW50SW1hZ2UgaXMgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBiZWNh
dXNlIHRoaXMKKyAgICAvLyBvbmx5IGluY2x1ZGVzIHRoZSBjYWNoZWQgaW1hZ2UgYW5kIG5vdGhp
bmcgZWxzZS4KKworICAgIHJldHVybiBtX2NhY2hlZEJ5dGVzOworfQorCiAjaWYgIVVTRShQREZL
SVRfRk9SX1BERkRPQ1VNRU5USU1BR0UpCiB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmNyZWF0ZVBE
RkRvY3VtZW50KCkKIHsKQEAgLTE3NCw3ICsyMzAsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6
OmRyYXdQREZQYWdlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBhcHBseVJvdGF0
aW9uRm9yUGFpbnRpbmcoY29udGV4dCk7CiAKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIC1tX2Nyb3BCb3gueCgpLCAtbV9jcm9wQm94LnkoKSk7
CisgICAgY29udGV4dC0+dHJhbnNsYXRlKC1tX2Nyb3BCb3gueCgpLCAtbV9jcm9wQm94LnkoKSk7
CiAKICAgICAvLyBDR1BERiBwYWdlcyBhcmUgaW5kZXhlZCBmcm9tIDEuCiAgICAgQ0dDb250ZXh0
RHJhd1BERlBhZ2UoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQ
YWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAppbmRleCAxMWI0NTA1Li4zOGE2
ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFBERkRvY3VtZW50
SW1hZ2VfaAogI2RlZmluZSBQREZEb2N1bWVudEltYWdlX2gKIAorI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKICNpbmNsdWRlICJJbWFnZS5oIgpAQCAtNDIsMjggKzQzLDI5IEBAIE9CSkNfQ0xBU1Mg
UERGRG9jdW1lbnQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKK2NsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBQREZEb2N1bWVudEltYWdlIDogcHVibGlj
IEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQREZEb2N1bWVudEltYWdl
PiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBERkRvY3VtZW50SW1hZ2U+IGNyZWF0
ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUERGRG9jdW1lbnRJbWFnZSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUERG
RG9jdW1lbnRJbWFnZShvYnNlcnZlcikpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBQREZEb2N1
bWVudEltYWdlKCk7CisgICAgUERGRG9jdW1lbnRJbWFnZShJbWFnZU9ic2VydmVyKik7CiAgICAg
dmlydHVhbCB+UERGRG9jdW1lbnRJbWFnZSgpOwogCisgICAgdmlydHVhbCBib29sIGlzUERGRG9j
dW1lbnRJbWFnZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVj
ZWl2ZWQpIE9WRVJSSURFOwogCi0gICAgLy8gRklYTUU6IFBERiBJbWFnZXMgYXJlIHVuZGVycmVw
b3J0aW5nIGRlY29kZWQgc2l6ZXMgYW5kIHdpbGwgYmUgdW5hYmxlCi0gICAgLy8gdG8gcHJ1bmUg
YmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkg
T1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRh
KGJvb2wgLypkZXN0cm95QWxsKi8gPSB0cnVlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGRlY29kZWRTaXplKCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29t
cHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRyaW5zaWNXaWR0aCwgTGVuZ3RoJiBp
bnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2ljUmF0aW8pIE9WRVJSSURFOwogICAg
IHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgT1ZFUlJJREU7CkBAIC04MCwxMiArODIsMjAg
QEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBwYWdlQ291bnQoKSBjb25zdDsKICAgICB2b2lkIGRy
YXdQREZQYWdlKEdyYXBoaWNzQ29udGV4dCopOwogCisgICAgYm9vbCBjYWNoZVBhcmFtZXRlcnNN
YXRjaChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCk7CisKICNpZiBVU0UoUERGS0lUX0ZPUl9QREZET0NVTUVOVElNQUdF
KQogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9kb2N1bWVudDsKICNlbHNlCiAgICAgUmV0
YWluUHRyPENHUERGRG9jdW1lbnRSZWY+IG1fZG9jdW1lbnQ7CiAjZW5kaWYKIAorICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gbV9jYWNoZWRJbWFnZUJ1ZmZlcjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9jYWNoZWRUcmFuc2Zvcm07CisgICAgRmxvYXRTaXplIG1fY2FjaGVkRGVzdGluYXRpb25TaXpl
OworICAgIEZsb2F0UmVjdCBtX2NhY2hlZFNvdXJjZVJlY3Q7CisgICAgaW50IG1fY2FjaGVkQnl0
ZXM7CisKICAgICBGbG9hdFJlY3QgbV9tZWRpYUJveDsKICAgICBGbG9hdFJlY3QgbV9jcm9wQm94
OwogICAgIGZsb2F0IG1fcm90YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggYzY2ZTZhNy4uNTE0NmQ4ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ltYWdlUXVhbGl0eUNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbWFnZVF1YWxpdHlDb250cm9sbGVy
LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgSW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hv
dWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSCiB7CiAgICAg
Ly8gSWYgdGhlIGltYWdlIGlzIG5vdCBhIGJpdG1hcCBpbWFnZSwgdGhlbiBub25lIG9mIHRoaXMg
aXMgcmVsZXZhbnQgYW5kIHdlIGp1c3QgcGFpbnQgYXQgaGlnaAogICAgIC8vIHF1YWxpdHkuCi0g
ICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSB8fCBjb250ZXh0LT5wYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKCFpbWFnZSB8fCAhKGltYWdlLT5pc0JpdG1hcEltYWdl
KCkgfHwgaW1hZ2UtPmlzUERGRG9jdW1lbnRJbWFnZSgpKSB8fCBjb250ZXh0LT5wYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRjaCAob2JqZWN0LT5z
dHlsZSgpLT5pbWFnZVJlbmRlcmluZygpKSB7Cg==
</data>
<flag name="review"
          id="233559"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211486</attachid>
            <date>2013-09-12 15:50:41 -0700</date>
            <delta_ts>2013-09-12 15:58:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pdf-cache.diff</filename>
            <type>text/plain</type>
            <size>16570</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZDNhN2YxLi5mZThjYmZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDkt
MTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW21h
Y10gQ2FjaGUgcmVuZGVyZWQgaW1hZ2UgaW4gUERGRG9jdW1lbnRJbWFnZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMjA3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgdGVzdCBlbnN1cmluZyB0
aGF0IHZlcnkgbGFyZ2UgUERGLWluLTxpbWc+IGVsZW1lbnRzIGRvbid0IGNyYXNoLgorCisgICAg
ICAgICogZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1iaWctZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtdG9vLWJpZy5odG1sOiBBZGRl
ZC4KKwogMjAxMy0wOS0xMiAgR3VycHJlZXQgS2F1ciAgPGsuZ3VycHJlZXRAc2Ftc3VuZy5jb20+
CiAKICAgICAgICAgQ1NTIFVuaXQgdncgaW4gYm9yZGVyLXdpZHRoIG1hcHMgdG8gMHB4LgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1iaWctZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1iaWct
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMDY2MGMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2Ut
dG9vLWJpZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorVGhpcyB0ZXN0IHNob3VsZCBub3Qg
Y3Jhc2guCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2Ut
dG9vLWJpZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1i
aWcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTEwZDM1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1i
aWcuaHRtbApAQCAtMCwwICsxLDE0IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQ+Cisg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSdtYXJnaW46IDBweCc+Cis8
ZGl2IHN0eWxlPSdiYWNrZ3JvdW5kOiByZWQ7IGhlaWdodDogMTAwMDAwcHg7IHdpZHRoOiAxMDAw
MDBweDsnPgorICAgIDxpbWcgc3JjPSdyZXNvdXJjZXMvZ3JlZW5fcmVjdGFuZ2xlLnBkZicgd2lk
dGg9IjEwMDAwMHB4Ij4KKyAgICBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBjcmFzaC4KKzwvZGl2Pgor
PC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAwYmY3ZGY1Li4wN2E0YjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTMtMDkt
MTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW21h
Y10gQ2FjaGUgcmVuZGVyZWQgaW1hZ2UgaW4gUERGRG9jdW1lbnRJbWFnZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMjA3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvaW1hZ2VzL3Bk
Zi1hcy1pbWFnZS10b28tYmlnLmh0bWwKKworICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UpOgor
ICAgICAgICBQREZEb2N1bWVudEltYWdlIHRha2VzIGEgSW1hZ2VPYnNlcnZlciBub3cgc28gdGhh
dCBpdCBjYW4gcmVwb3J0CisgICAgICAgIGRlY29kZWQgZGF0YSBzaXplIGNoYW5nZXMgdG8gdGhl
IG1lbW9yeSBjYWNoZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZTo6aXNQREZEb2N1bWVudEltYWdlKTogQWRkZWQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OlBERkRvY3VtZW50SW1hZ2UpOgorICAgICAg
ICBQREZEb2N1bWVudEltYWdlIHRha2VzIGEgSW1hZ2VPYnNlcnZlciBub3cgc28gdGhhdCBpdCBj
YW4gcmVwb3J0CisgICAgICAgIGRlY29kZWQgZGF0YSBzaXplIGNoYW5nZXMgdG8gdGhlIG1lbW9y
eSBjYWNoZS4KKworICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6YXBwbHlSb3Rh
dGlvbkZvclBhaW50aW5nKToKKyAgICAgICAgRml4IHVwIHNvbWUgY29tbWVudHMsIGFuZCB1c2Ug
R3JhcGhpY3NDb250ZXh0IGluc3RlYWQgb2YgQ0cgQVBJLgorCisgICAgICAgIChXZWJDb3JlOjpQ
REZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCk6CisgICAgICAgIERldGVybWlu
ZSB3aGV0aGVyIG91ciBjYWNoZWQgaW1hZ2UgaXMgc3RpbGwgdmFsaWQsIGdpdmVuIHRoZSBuZXcK
KyAgICAgICAgZGVzdGluYXRpb24ncyBzaXplLCBDVE0gc2NhbGUsIGFuZCBzb3VyY2UgcmVjdC4K
KworICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtQ29udGV4dEZvclBhaW50aW5nKTogQWRkZWQu
CisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
SWZOZWVkZWQpOgorICAgICAgICBDYWNoZSBhIHJlbmRlcmVkIGJpdG1hcCBvZiB0aGUgUERGLiBJ
bnZhbGlkYXRlIHRoZSBjYWNoZSBpZiBjYWNoZVBhcmFtZXRlcnNNYXRjaAorICAgICAgICBkZWNp
ZGVzIHRoYXQgdGhlIHBhcmFtZXRlcnMgZG9uJ3QgbWF0Y2gsIHVubGVzcyB3ZSdyZSBwYWludGlu
ZyBpbiBsb3cgcXVhbGl0eSBtb2RlLAorICAgICAgICBpbiB3aGljaCBjYXNlIHdlJ2xsIHNjYWxl
IHRoZSBleGlzdGluZyBpbWFnZSAoYW5kIHRoZW4gZnVsbHkgcmVwYWludCB3aGVuIHRoZQorICAg
ICAgICBoaWdoLXF1YWxpdHkgcmVwYWludCB0aW1lciBmaXJlcykuCisgICAgICAgIEluZm9ybSB0
aGUgbWVtb3J5IGNhY2hlIG9mIG91ciBuZXcgc2l6ZS4KKworICAgICAgICAoV2ViQ29yZTo6UERG
RG9jdW1lbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIFVwZGF0ZSB0aGUgY2FjaGVkIGltYWdlIGlm
IG5lZWRlZC4KKyAgICAgICAgUGFpbnQgdGhlIGNhY2hlZCBpbWFnZSBpbnRvIHRoZSBjb250ZXh0
IGlmIGl0J3MgYXZhaWxhYmxlICh3aGljaCBpdCBtaWdodCBub3QgYmUsCisgICAgICAgIGlmIHRo
ZSBpbWFnZSBpcyB3YXkgdG9vIGJpZyBhbmQgdGhlIGFsbG9jYXRpb24gZmFpbHMpLiBPdGhlcndp
c2UsIHBhaW50IHN0cmFpZ2h0CisgICAgICAgIGludG8gdGhlIGNvbnRleHQgYXMgd2UgcHJldmlv
dXNseSBkaWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRlc3Ryb3lE
ZWNvZGVkRGF0YSk6CisgICAgICAgIFRocm93IGF3YXkgdGhlIGNhY2hlZCBpbWFnZSBpZiByZXF1
ZXN0ZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRlY29kZWRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAg
ICAgICAgRHJpdmUtYnkgdXNlIEdyYXBoaWNzQ29udGV4dCBpbnN0ZWFkIG9mIENHIGRpcmVjdGx5
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgT3Zl
cnJpZGUgaXNQREZEb2N1bWVudEltYWdlKCkuCisgICAgICAgIEFkZCBzdG9yYWdlIGZvciB0aGUg
Y2FjaGVkIGltYWdlIGJ1ZmZlciBhbmQgdmFyaW91cyBjYWNoZSBwYXJhbWV0ZXJzLgorCisgICAg
ICAgICogcmVuZGVyaW5nL0ltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkpOgor
ICAgICAgICBQREZEb2N1bWVudEltYWdlIGlzIGFsc28gaW50ZXJlc3RlZCBpbi9jYXBhYmxlIG9m
IGxvdy1xdWFsaXR5IHBhaW50aW5nIG5vdy4KKwogMjAxMy0wOS0xMiAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10gQnVpbGQgZml4IGFmdGVy
IHIxNTU2MjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmlu
ZGV4IDVjZDZhNWEuLjI5YjMxMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmNwcApAQCAtMzE1LDcgKzMxNSw3IEBAIGlubGluZSB2b2lkIENhY2hlZEltYWdl
OjpjcmVhdGVJbWFnZSgpCiAgICAgICAgIHJldHVybjsKICNpZiBVU0UoQ0cpICYmICFVU0UoV0VC
S0lUX0lNQUdFX0RFQ09ERVJTKQogICAgIGVsc2UgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9
PSAiYXBwbGljYXRpb24vcGRmIikKLSAgICAgICAgbV9pbWFnZSA9IFBERkRvY3VtZW50SW1hZ2U6
OmNyZWF0ZSgpOworICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlKHRo
aXMpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNWRykKICAgICBlbHNlIGlmIChtX3Jlc3BvbnNlLm1p
bWVUeXBlKCkgPT0gImltYWdlL3N2Zyt4bWwiKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuaAppbmRleCAyZTMzNjRhLi5iMTdkOTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1BERkRvY3VtZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSA9IDA7CiAK
ICAgICAvLyBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgaWYgdGhleSBjYW4g
YXNzdXJlIHRoYXQgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDU2N2VkODcuLjg5MmY3NjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgVVNFKENHKQogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJ
bWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCkBAIC00NCw4ICs0NSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUERGRG9j
dW1lbnRJbWFnZTo6UERGRG9jdW1lbnRJbWFnZSgpCi0gICAgOiBJbWFnZSgwKSAvLyBQREZzIGRv
bid0IGFuaW1hdGUKK1BERkRvY3VtZW50SW1hZ2U6OlBERkRvY3VtZW50SW1hZ2UoSW1hZ2VPYnNl
cnZlciogb2JzZXJ2ZXIpCisgICAgOiBJbWFnZShvYnNlcnZlcikKKyAgICAsIG1fY2FjaGVkQnl0
ZXMoMCkKICAgICAsIG1fcm90YXRpb24oMC4wZikKICAgICAsIG1faGFzUGFnZShmYWxzZSkKIHsK
QEAgLTk1LDIzICs5Nyw4MyBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogCiB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmFwcGx5Um90YXRp
b25Gb3JQYWludGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgLy8g
cm90YXRlIHRoZSBjcm9wIGJveCBhbmQgY2FsY3VsYXRlIGJvdW5kaW5nIGJveAorICAgIC8vIFJv
dGF0ZSB0aGUgY3JvcCBib3ggYW5kIGNhbGN1bGF0ZSBib3VuZGluZyBib3guCiAgICAgZmxvYXQg
c2luYSA9IHNpbmYoLW1fcm90YXRpb24pOwogICAgIGZsb2F0IGNvc2EgPSBjb3NmKC1tX3JvdGF0
aW9uKTsKICAgICBmbG9hdCB3aWR0aCA9IG1fY3JvcEJveC53aWR0aCgpOwogICAgIGZsb2F0IGhl
aWdodCA9IG1fY3JvcEJveC5oZWlnaHQoKTsKIAotICAgIC8vIGNhbGN1bGF0ZSByb3RhdGVkIHgg
YW5kIHkgZWRnZXMgb2YgdGhlIGNyb3AgYm94LiBpZiB0aGV5J3JlIG5lZ2F0aXZlLCBpdCBtZWFu
cyBwYXJ0IG9mIHRoZSBpbWFnZSBoYXMKLSAgICAvLyBiZWVuIHJvdGF0ZWQgb3V0c2lkZSBvZiB0
aGUgYm91bmRzIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IG92ZXIgdGhlIGltYWdlIHNvIGl0IGxpZXMg
aW5zaWRlIHRoZSBib3VuZHMgYWdhaW4KKyAgICAvLyBDYWxjdWxhdGUgcm90YXRlZCB4IGFuZCB5
IGVkZ2VzIG9mIHRoZSBjcm9wIGJveC4gSWYgdGhleSdyZSBuZWdhdGl2ZSwgaXQgbWVhbnMgcGFy
dCBvZiB0aGUgaW1hZ2UgaGFzCisgICAgLy8gYmVlbiByb3RhdGVkIG91dHNpZGUgb2YgdGhlIGJv
dW5kcyBhbmQgd2UgbmVlZCB0byBzaGlmdCBvdmVyIHRoZSBpbWFnZSBzbyBpdCBsaWVzIGluc2lk
ZSB0aGUgYm91bmRzIGFnYWluLgogICAgIENHUG9pbnQgcnggPSBDR1BvaW50TWFrZSh3aWR0aCAq
IGNvc2EsIHdpZHRoICogc2luYSk7CiAgICAgQ0dQb2ludCByeSA9IENHUG9pbnRNYWtlKC1oZWln
aHQgKiBzaW5hLCBoZWlnaHQgKiBjb3NhKTsKIAotICAgIC8vIGFkanVzdCBzbyB3ZSBhcmUgYXQg
dGhlIGNyb3AgYm94IG9yaWdpbgorICAgIC8vIEFkanVzdCBzbyB3ZSBhcmUgYXQgdGhlIGNyb3Ag
Ym94IG9yaWdpbi4KICAgICBjb25zdCBDR0Zsb2F0IHplcm8gPSAwOwotICAgIENHQ29udGV4dFRy
YW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgZmxvb3JmKC1zdGQ6Om1pbih6
ZXJvLCBzdGQ6Om1pbihyeC54LCByeS54KSkpLCBmbG9vcmYoLXN0ZDo6bWluKHplcm8sIHN0ZDo6
bWluKHJ4LnksIHJ5LnkpKSkpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZShmbG9vcmYoLXN0ZDo6
bWluKHplcm8sIHN0ZDo6bWluKHJ4LngsIHJ5LngpKSksIGZsb29yZigtc3RkOjptaW4oemVybywg
c3RkOjptaW4ocngueSwgcnkueSkpKSk7CiAKLSAgICAvLyByb3RhdGUgLXZlIHRvIHJlbW92ZSBy
b3RhdGlvbgotICAgIENHQ29udGV4dFJvdGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgLW1fcm90YXRpb24pOworICAgIGNvbnRleHQtPnJvdGF0ZSgtbV9yb3RhdGlvbik7Cit9CisK
K2Jvb2wgUERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCkgY29uc3QKK3sKKyAgICBpZiAoZHN0UmVjdC5zaXplKCkgIT0gbV9jYWNoZWREZXN0
aW5hdGlvblNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzcmNSZWN0ICE9
IG1fY2FjaGVkU291cmNlUmVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWZmaW5l
VHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNmb3JtOworICAgIGNvbnRl
eHQtPmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
LmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKworICAgIEFmZmluZVRyYW5zZm9ybTo6
RGVjb21wb3NlZFR5cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsKKyAgICBtX2NhY2hlZFRy
YW5zZm9ybS5kZWNvbXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybSk7CisgICAgaWYgKGRl
Y29tcG9zZWRUcmFuc2Zvcm0uc2NhbGVYICE9IGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm0uc2Nh
bGVYIHx8IGRlY29tcG9zZWRUcmFuc2Zvcm0uc2NhbGVZICE9IGNhY2hlZERlY29tcG9zZWRUcmFu
c2Zvcm0uc2NhbGVZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtQ29udGV4dEZvclBhaW50aW5nKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpCit7CisgICAgZmxvYXQgaFNjYWxlID0gZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVj
dC53aWR0aCgpOworICAgIGZsb2F0IHZTY2FsZSA9IGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0
LmhlaWdodCgpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzcmNSZWN0LngoKSAqIGhTY2FsZSwg
c3JjUmVjdC55KCkgKiB2U2NhbGUpOworICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShoU2Nh
bGUsIC12U2NhbGUpKTsKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoMCwgLXNyY1JlY3QuaGVpZ2h0
KCkpOworfQorCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVk
ZWQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFuIGV4aXN0aW5n
IGltYWdlLCByZXVzZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGxvdy1xdWFsaXR5IHBhaW50LCBldmVu
IGlmIGNhY2hlIHBhcmFtZXRlcnMgZG9uJ3QgbWF0Y2g7CisgICAgLy8gd2UnbGwgcmVyZW5kZXIg
d2hlbiB3ZSBkbyB0aGUgc3Vic2VxdWVudCBoaWdoLXF1YWxpdHkgcGFpbnQuCisgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb250ZXh0LT5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KCk7CisgICAgYm9vbCB1c2VMb3dRdWFsaXR5SW50ZXJwb2xhdGlvbiA9
IGludGVycG9sYXRpb25RdWFsaXR5ID09IEludGVycG9sYXRpb25Ob25lIHx8IGludGVycG9sYXRp
b25RdWFsaXR5ID09IEludGVycG9sYXRpb25Mb3c7CisKKyAgICBpZiAoIW1fY2FjaGVkSW1hZ2VC
dWZmZXIgfHwgKCFjYWNoZVBhcmFtZXRlcnNNYXRjaChjb250ZXh0LCBkc3RSZWN0LCBzcmNSZWN0
KSAmJiAhdXNlTG93UXVhbGl0eUludGVycG9sYXRpb24pKSB7CisgICAgICAgIG1fY2FjaGVkSW1h
Z2VCdWZmZXIgPSBjb250ZXh0LT5jcmVhdGVDb21wYXRpYmxlQnVmZmVyKGVuY2xvc2luZ0ludFJl
Y3QoZHN0UmVjdCkuc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHcmFwaGljc0NvbnRleHQqIGJ1ZmZlckNvbnRl
eHQgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgICAgIGlmICghYnVmZmVy
Q29udGV4dCkgeworICAgICAgICAgICAgbV9jYWNoZWRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2Zvcm1Db250ZXh0
Rm9yUGFpbnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVjdCwgc3JjUmVjdCk7CisgICAgICAgIGRy
YXdQREZQYWdlKGJ1ZmZlckNvbnRleHQpOworCisgICAgICAgIG1fY2FjaGVkVHJhbnNmb3JtID0g
Y29udGV4dC0+Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VT
Y2FsZSk7CisgICAgICAgIG1fY2FjaGVkRGVzdGluYXRpb25TaXplID0gZHN0UmVjdC5zaXplKCk7
CisgICAgICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CisKKyAgICAgICAgSW50U2l6
ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAg
ICAgICAgc2l6ZV90IG9sZENhY2hlZEJ5dGVzID0gbV9jYWNoZWRCeXRlczsKKyAgICAgICAgbV9j
YWNoZWRCeXRlcyA9IGludGVybmFsU2l6ZS53aWR0aCgpICogaW50ZXJuYWxTaXplLmhlaWdodCgp
ICogNDsKKworICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICAgICAgaW1hZ2VP
YnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgc2FmZUNhc3Q8aW50PihtX2NhY2hl
ZEJ5dGVzKSAtIHNhZmVDYXN0PGludD4ob2xkQ2FjaGVkQnl0ZXMpKTsKKyAgICB9CiB9CiAKIHZv
aWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlKQpAQCAtMTE5LDI5ICsxODEsNDIgQEAg
dm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LAogICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9oYXNQYWdl
KQogICAgICAgICByZXR1cm47CiAKKyAgICB1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKGNvbnRl
eHQsIGRzdFJlY3QsIHNyY1JlY3QpOworCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotCiAgICAgICAgIGNvbnRleHQtPnNldENv
bXBvc2l0ZU9wZXJhdGlvbihvcCk7CiAKLSAgICAgICAgZmxvYXQgaFNjYWxlID0gZHN0UmVjdC53
aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpOwotICAgICAgICBmbG9hdCB2U2NhbGUgPSBkc3RSZWN0
LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKTsKLQotICAgICAgICAvLyBTY2FsZSBhbmQgdHJh
bnNsYXRlIHNvIHRoZSBkb2N1bWVudCBpcyByZW5kZXJlZCBpbiB0aGUgY29ycmVjdCBsb2NhdGlv
biwKLSAgICAgICAgLy8gYWNjb3VudGluZyBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgR3JhcGhpY3ND
b250ZXh0IGlzIGZsaXBwZWQuCi0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgZHN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSAqIGhTY2FsZSwg
ZHN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAqIHZTY2FsZSk7Ci0gICAgICAgIENHQ29udGV4dFNj
YWxlQ1RNKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBoU2NhbGUsIHZTY2FsZSk7Ci0gICAg
ICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7
Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgMCwgLXNyY1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RJbnRlZ3JhbChzcmNSZWN0KSk7Ci0KLSAg
ICAgICAgZHJhd1BERlBhZ2UoY29udGV4dCk7CisgICAgICAgIGlmIChtX2NhY2hlZEltYWdlQnVm
ZmVyKQorICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fY2FjaGVkSW1hZ2VC
dWZmZXIuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhjb250ZXh0LCBkc3RS
ZWN0LCBzcmNSZWN0KTsKKyAgICAgICAgICAgIGRyYXdQREZQYWdlKGNvbnRleHQpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1hZ2VPYnNl
cnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRlc3Ry
b3lEZWNvZGVkRGF0YShib29sKQoreworICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBudWxscHRy
OworCisgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5k
ZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLW1fY2FjaGVkQnl0ZXMpOworCisgICAgbV9jYWNoZWRC
eXRlcyA9IDA7Cit9CisKK3Vuc2lnbmVkIFBERkRvY3VtZW50SW1hZ2U6OmRlY29kZWRTaXplKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogUERGRG9jdW1lbnRJbWFnZSBpcyB1bmRlcnJlcG9ydGlu
ZyBkZWNvZGVkIHNpemVzIGJlY2F1c2UgdGhpcworICAgIC8vIG9ubHkgaW5jbHVkZXMgdGhlIGNh
Y2hlZCBpbWFnZSBhbmQgbm90aGluZyBlbHNlLgorCisgICAgcmV0dXJuIG1fY2FjaGVkQnl0ZXM7
Cit9CisKICNpZiAhVVNFKFBERktJVF9GT1JfUERGRE9DVU1FTlRJTUFHRSkKIHZvaWQgUERGRG9j
dW1lbnRJbWFnZTo6Y3JlYXRlUERGRG9jdW1lbnQoKQogewpAQCAtMTc0LDcgKzI0OSw3IEBAIHZv
aWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KQogewogICAgIGFwcGx5Um90YXRpb25Gb3JQYWludGluZyhjb250ZXh0KTsKIAotICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgLW1fY3JvcEJveC54
KCksIC1tX2Nyb3BCb3gueSgpKTsKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoLW1fY3JvcEJveC54
KCksIC1tX2Nyb3BCb3gueSgpKTsKIAogICAgIC8vIENHUERGIHBhZ2VzIGFyZSBpbmRleGVkIGZy
b20gMS4KICAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwgMSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5o
CmluZGV4IDExYjQ1MDUuLjE5NDE4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpZm5kZWYgUERGRG9jdW1lbnRJbWFnZV9oCiAjZGVmaW5lIFBERkRvY3VtZW50SW1hZ2VfaAog
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC00MiwyOCAr
NDMsMjkgQEAgT0JKQ19DTEFTUyBQREZEb2N1bWVudDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW1hZ2VCdWZmZXI7CiAKLWNsYXNzIFBERkRv
Y3VtZW50SW1hZ2UgOiBwdWJsaWMgSW1hZ2UgeworY2xhc3MgUERGRG9jdW1lbnRJbWFnZSBGSU5B
TCA6IHB1YmxpYyBJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UERGRG9j
dW1lbnRJbWFnZT4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQREZEb2N1bWVudElt
YWdlPiBjcmVhdGUoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBERkRvY3VtZW50SW1hZ2UpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFBERkRvY3VtZW50SW1hZ2Uob2JzZXJ2ZXIpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgUERGRG9jdW1lbnRJbWFnZSgpOworICAgIFBERkRvY3VtZW50SW1hZ2UoSW1hZ2VPYnNlcnZl
ciopOwogICAgIHZpcnR1YWwgflBERkRvY3VtZW50SW1hZ2UoKTsKIAorICAgIHZpcnR1YWwgYm9v
bCBpc1BERkRvY3VtZW50SW1hZ2UoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisK
ICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IE9WRVJSSURFOwog
CiAgICAgdmlydHVhbCBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wg
YWxsRGF0YVJlY2VpdmVkKSBPVkVSUklERTsKIAotICAgIC8vIEZJWE1FOiBQREYgSW1hZ2VzIGFy
ZSB1bmRlcnJlcG9ydGluZyBkZWNvZGVkIHNpemVzIGFuZCB3aWxsIGJlIHVuYWJsZQotICAgIC8v
IHRvIHBydW5lIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0
LgotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCAvKmRlc3Ryb3lBbGwq
LyA9IHRydWUpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YShib29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKExlbmd0aCYgaW50cmluc2ljV2lkdGgs
IExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJpbnNpY1JhdGlvKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IE9WRVJSSURFOwpAQCAtODAs
MTIgKzgyLDIxIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgcGFnZUNvdW50KCkgY29uc3Q7CiAg
ICAgdm9pZCBkcmF3UERGUGFnZShHcmFwaGljc0NvbnRleHQqKTsKIAorICAgIHZvaWQgdXBkYXRl
Q2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisgICAgYm9vbCBjYWNoZVBhcmFtZXRl
cnNNYXRjaChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisKICNpZiBVU0UoUERGS0lUX0ZPUl9QREZET0NV
TUVOVElNQUdFKQogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9kb2N1bWVudDsKICNlbHNl
CiAgICAgUmV0YWluUHRyPENHUERGRG9jdW1lbnRSZWY+IG1fZG9jdW1lbnQ7CiAjZW5kaWYKIAor
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9jYWNoZWRJbWFnZUJ1ZmZlcjsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gbV9jYWNoZWRUcmFuc2Zvcm07CisgICAgRmxvYXRTaXplIG1fY2FjaGVkRGVzdGlu
YXRpb25TaXplOworICAgIEZsb2F0UmVjdCBtX2NhY2hlZFNvdXJjZVJlY3Q7CisgICAgc2l6ZV90
IG1fY2FjaGVkQnl0ZXM7CisKICAgICBGbG9hdFJlY3QgbV9tZWRpYUJveDsKICAgICBGbG9hdFJl
Y3QgbV9jcm9wQm94OwogICAgIGZsb2F0IG1fcm90YXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggYzY2ZTZhNy4u
NTE0NmQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ltYWdlUXVhbGl0
eUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbWFnZVF1YWxp
dHlDb250cm9sbGVyLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgSW1hZ2VRdWFsaXR5Q29u
dHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBSCiB7CiAgICAgLy8gSWYgdGhlIGltYWdlIGlzIG5vdCBhIGJpdG1hcCBpbWFnZSwgdGhlbiBu
b25lIG9mIHRoaXMgaXMgcmVsZXZhbnQgYW5kIHdlIGp1c3QgcGFpbnQgYXQgaGlnaAogICAgIC8v
IHF1YWxpdHkuCi0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSB8fCBj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKCFpbWFnZSB8fCAhKGltYWdlLT5p
c0JpdG1hcEltYWdlKCkgfHwgaW1hZ2UtPmlzUERGRG9jdW1lbnRJbWFnZSgpKSB8fCBjb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRj
aCAob2JqZWN0LT5zdHlsZSgpLT5pbWFnZVJlbmRlcmluZygpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211487</attachid>
            <date>2013-09-12 15:58:13 -0700</date>
            <delta_ts>2013-09-12 16:23:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pdf-cache.diff</filename>
            <type>text/plain</type>
            <size>16585</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZDNhN2YxLi5mZThjYmZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDkt
MTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW21h
Y10gQ2FjaGUgcmVuZGVyZWQgaW1hZ2UgaW4gUERGRG9jdW1lbnRJbWFnZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMjA3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgdGVzdCBlbnN1cmluZyB0
aGF0IHZlcnkgbGFyZ2UgUERGLWluLTxpbWc+IGVsZW1lbnRzIGRvbid0IGNyYXNoLgorCisgICAg
ICAgICogZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1iaWctZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtdG9vLWJpZy5odG1sOiBBZGRl
ZC4KKwogMjAxMy0wOS0xMiAgR3VycHJlZXQgS2F1ciAgPGsuZ3VycHJlZXRAc2Ftc3VuZy5jb20+
CiAKICAgICAgICAgQ1NTIFVuaXQgdncgaW4gYm9yZGVyLXdpZHRoIG1hcHMgdG8gMHB4LgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1iaWctZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1iaWct
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMDY2MGMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2Ut
dG9vLWJpZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorVGhpcyB0ZXN0IHNob3VsZCBub3Qg
Y3Jhc2guCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2Ut
dG9vLWJpZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1i
aWcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTEwZDM1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcGRmLWFzLWltYWdlLXRvby1i
aWcuaHRtbApAQCAtMCwwICsxLDE0IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQ+Cisg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSdtYXJnaW46IDBweCc+Cis8
ZGl2IHN0eWxlPSdiYWNrZ3JvdW5kOiByZWQ7IGhlaWdodDogMTAwMDAwcHg7IHdpZHRoOiAxMDAw
MDBweDsnPgorICAgIDxpbWcgc3JjPSdyZXNvdXJjZXMvZ3JlZW5fcmVjdGFuZ2xlLnBkZicgd2lk
dGg9IjEwMDAwMHB4Ij4KKyAgICBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBjcmFzaC4KKzwvZGl2Pgor
PC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAwYmY3ZGY1Li4wN2E0YjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTMtMDkt
MTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW21h
Y10gQ2FjaGUgcmVuZGVyZWQgaW1hZ2UgaW4gUERGRG9jdW1lbnRJbWFnZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxMjA3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvaW1hZ2VzL3Bk
Zi1hcy1pbWFnZS10b28tYmlnLmh0bWwKKworICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y3JlYXRlSW1hZ2UpOgor
ICAgICAgICBQREZEb2N1bWVudEltYWdlIHRha2VzIGEgSW1hZ2VPYnNlcnZlciBub3cgc28gdGhh
dCBpdCBjYW4gcmVwb3J0CisgICAgICAgIGRlY29kZWQgZGF0YSBzaXplIGNoYW5nZXMgdG8gdGhl
IG1lbW9yeSBjYWNoZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZTo6aXNQREZEb2N1bWVudEltYWdlKTogQWRkZWQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OlBERkRvY3VtZW50SW1hZ2UpOgorICAgICAg
ICBQREZEb2N1bWVudEltYWdlIHRha2VzIGEgSW1hZ2VPYnNlcnZlciBub3cgc28gdGhhdCBpdCBj
YW4gcmVwb3J0CisgICAgICAgIGRlY29kZWQgZGF0YSBzaXplIGNoYW5nZXMgdG8gdGhlIG1lbW9y
eSBjYWNoZS4KKworICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6YXBwbHlSb3Rh
dGlvbkZvclBhaW50aW5nKToKKyAgICAgICAgRml4IHVwIHNvbWUgY29tbWVudHMsIGFuZCB1c2Ug
R3JhcGhpY3NDb250ZXh0IGluc3RlYWQgb2YgQ0cgQVBJLgorCisgICAgICAgIChXZWJDb3JlOjpQ
REZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCk6CisgICAgICAgIERldGVybWlu
ZSB3aGV0aGVyIG91ciBjYWNoZWQgaW1hZ2UgaXMgc3RpbGwgdmFsaWQsIGdpdmVuIHRoZSBuZXcK
KyAgICAgICAgZGVzdGluYXRpb24ncyBzaXplLCBDVE0gc2NhbGUsIGFuZCBzb3VyY2UgcmVjdC4K
KworICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtQ29udGV4dEZvclBhaW50aW5nKTogQWRkZWQu
CisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
SWZOZWVkZWQpOgorICAgICAgICBDYWNoZSBhIHJlbmRlcmVkIGJpdG1hcCBvZiB0aGUgUERGLiBJ
bnZhbGlkYXRlIHRoZSBjYWNoZSBpZiBjYWNoZVBhcmFtZXRlcnNNYXRjaAorICAgICAgICBkZWNp
ZGVzIHRoYXQgdGhlIHBhcmFtZXRlcnMgZG9uJ3QgbWF0Y2gsIHVubGVzcyB3ZSdyZSBwYWludGlu
ZyBpbiBsb3cgcXVhbGl0eSBtb2RlLAorICAgICAgICBpbiB3aGljaCBjYXNlIHdlJ2xsIHNjYWxl
IHRoZSBleGlzdGluZyBpbWFnZSAoYW5kIHRoZW4gZnVsbHkgcmVwYWludCB3aGVuIHRoZQorICAg
ICAgICBoaWdoLXF1YWxpdHkgcmVwYWludCB0aW1lciBmaXJlcykuCisgICAgICAgIEluZm9ybSB0
aGUgbWVtb3J5IGNhY2hlIG9mIG91ciBuZXcgc2l6ZS4KKworICAgICAgICAoV2ViQ29yZTo6UERG
RG9jdW1lbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIFVwZGF0ZSB0aGUgY2FjaGVkIGltYWdlIGlm
IG5lZWRlZC4KKyAgICAgICAgUGFpbnQgdGhlIGNhY2hlZCBpbWFnZSBpbnRvIHRoZSBjb250ZXh0
IGlmIGl0J3MgYXZhaWxhYmxlICh3aGljaCBpdCBtaWdodCBub3QgYmUsCisgICAgICAgIGlmIHRo
ZSBpbWFnZSBpcyB3YXkgdG9vIGJpZyBhbmQgdGhlIGFsbG9jYXRpb24gZmFpbHMpLiBPdGhlcndp
c2UsIHBhaW50IHN0cmFpZ2h0CisgICAgICAgIGludG8gdGhlIGNvbnRleHQgYXMgd2UgcHJldmlv
dXNseSBkaWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRlc3Ryb3lE
ZWNvZGVkRGF0YSk6CisgICAgICAgIFRocm93IGF3YXkgdGhlIGNhY2hlZCBpbWFnZSBpZiByZXF1
ZXN0ZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRlY29kZWRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAg
ICAgICAgRHJpdmUtYnkgdXNlIEdyYXBoaWNzQ29udGV4dCBpbnN0ZWFkIG9mIENHIGRpcmVjdGx5
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlKToKKyAgICAgICAgT3Zl
cnJpZGUgaXNQREZEb2N1bWVudEltYWdlKCkuCisgICAgICAgIEFkZCBzdG9yYWdlIGZvciB0aGUg
Y2FjaGVkIGltYWdlIGJ1ZmZlciBhbmQgdmFyaW91cyBjYWNoZSBwYXJhbWV0ZXJzLgorCisgICAg
ICAgICogcmVuZGVyaW5nL0ltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkpOgor
ICAgICAgICBQREZEb2N1bWVudEltYWdlIGlzIGFsc28gaW50ZXJlc3RlZCBpbi9jYXBhYmxlIG9m
IGxvdy1xdWFsaXR5IHBhaW50aW5nIG5vdy4KKwogMjAxMy0wOS0xMiAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luZG93c10gQnVpbGQgZml4IGFmdGVy
IHIxNTU2MjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmlu
ZGV4IDVjZDZhNWEuLjI5YjMxMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmNwcApAQCAtMzE1LDcgKzMxNSw3IEBAIGlubGluZSB2b2lkIENhY2hlZEltYWdl
OjpjcmVhdGVJbWFnZSgpCiAgICAgICAgIHJldHVybjsKICNpZiBVU0UoQ0cpICYmICFVU0UoV0VC
S0lUX0lNQUdFX0RFQ09ERVJTKQogICAgIGVsc2UgaWYgKG1fcmVzcG9uc2UubWltZVR5cGUoKSA9
PSAiYXBwbGljYXRpb24vcGRmIikKLSAgICAgICAgbV9pbWFnZSA9IFBERkRvY3VtZW50SW1hZ2U6
OmNyZWF0ZSgpOworICAgICAgICBtX2ltYWdlID0gUERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlKHRo
aXMpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNWRykKICAgICBlbHNlIGlmIChtX3Jlc3BvbnNlLm1p
bWVUeXBlKCkgPT0gImltYWdlL3N2Zyt4bWwiKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuaAppbmRleCAyZTMzNjRhLi5iMTdkOTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1BERkRvY3VtZW50SW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSA9IDA7CiAK
ICAgICAvLyBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgaWYgdGhleSBjYW4g
YXNzdXJlIHRoYXQgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDU2N2VkODcuLjVmZWMwMWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgVVNFKENHKQogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJ
bWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCkBAIC00NCw4ICs0NSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUERGRG9j
dW1lbnRJbWFnZTo6UERGRG9jdW1lbnRJbWFnZSgpCi0gICAgOiBJbWFnZSgwKSAvLyBQREZzIGRv
bid0IGFuaW1hdGUKK1BERkRvY3VtZW50SW1hZ2U6OlBERkRvY3VtZW50SW1hZ2UoSW1hZ2VPYnNl
cnZlciogb2JzZXJ2ZXIpCisgICAgOiBJbWFnZShvYnNlcnZlcikKKyAgICAsIG1fY2FjaGVkQnl0
ZXMoMCkKICAgICAsIG1fcm90YXRpb24oMC4wZikKICAgICAsIG1faGFzUGFnZShmYWxzZSkKIHsK
QEAgLTk1LDIzICs5Nyw4MyBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogCiB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmFwcGx5Um90YXRp
b25Gb3JQYWludGluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgLy8g
cm90YXRlIHRoZSBjcm9wIGJveCBhbmQgY2FsY3VsYXRlIGJvdW5kaW5nIGJveAorICAgIC8vIFJv
dGF0ZSB0aGUgY3JvcCBib3ggYW5kIGNhbGN1bGF0ZSBib3VuZGluZyBib3guCiAgICAgZmxvYXQg
c2luYSA9IHNpbmYoLW1fcm90YXRpb24pOwogICAgIGZsb2F0IGNvc2EgPSBjb3NmKC1tX3JvdGF0
aW9uKTsKICAgICBmbG9hdCB3aWR0aCA9IG1fY3JvcEJveC53aWR0aCgpOwogICAgIGZsb2F0IGhl
aWdodCA9IG1fY3JvcEJveC5oZWlnaHQoKTsKIAotICAgIC8vIGNhbGN1bGF0ZSByb3RhdGVkIHgg
YW5kIHkgZWRnZXMgb2YgdGhlIGNyb3AgYm94LiBpZiB0aGV5J3JlIG5lZ2F0aXZlLCBpdCBtZWFu
cyBwYXJ0IG9mIHRoZSBpbWFnZSBoYXMKLSAgICAvLyBiZWVuIHJvdGF0ZWQgb3V0c2lkZSBvZiB0
aGUgYm91bmRzIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IG92ZXIgdGhlIGltYWdlIHNvIGl0IGxpZXMg
aW5zaWRlIHRoZSBib3VuZHMgYWdhaW4KKyAgICAvLyBDYWxjdWxhdGUgcm90YXRlZCB4IGFuZCB5
IGVkZ2VzIG9mIHRoZSBjcm9wIGJveC4gSWYgdGhleSdyZSBuZWdhdGl2ZSwgaXQgbWVhbnMgcGFy
dCBvZiB0aGUgaW1hZ2UgaGFzCisgICAgLy8gYmVlbiByb3RhdGVkIG91dHNpZGUgb2YgdGhlIGJv
dW5kcyBhbmQgd2UgbmVlZCB0byBzaGlmdCBvdmVyIHRoZSBpbWFnZSBzbyBpdCBsaWVzIGluc2lk
ZSB0aGUgYm91bmRzIGFnYWluLgogICAgIENHUG9pbnQgcnggPSBDR1BvaW50TWFrZSh3aWR0aCAq
IGNvc2EsIHdpZHRoICogc2luYSk7CiAgICAgQ0dQb2ludCByeSA9IENHUG9pbnRNYWtlKC1oZWln
aHQgKiBzaW5hLCBoZWlnaHQgKiBjb3NhKTsKIAotICAgIC8vIGFkanVzdCBzbyB3ZSBhcmUgYXQg
dGhlIGNyb3AgYm94IG9yaWdpbgorICAgIC8vIEFkanVzdCBzbyB3ZSBhcmUgYXQgdGhlIGNyb3Ag
Ym94IG9yaWdpbi4KICAgICBjb25zdCBDR0Zsb2F0IHplcm8gPSAwOwotICAgIENHQ29udGV4dFRy
YW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgZmxvb3JmKC1zdGQ6Om1pbih6
ZXJvLCBzdGQ6Om1pbihyeC54LCByeS54KSkpLCBmbG9vcmYoLXN0ZDo6bWluKHplcm8sIHN0ZDo6
bWluKHJ4LnksIHJ5LnkpKSkpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZShmbG9vcmYoLXN0ZDo6
bWluKHplcm8sIHN0ZDo6bWluKHJ4LngsIHJ5LngpKSksIGZsb29yZigtc3RkOjptaW4oemVybywg
c3RkOjptaW4ocngueSwgcnkueSkpKSk7CiAKLSAgICAvLyByb3RhdGUgLXZlIHRvIHJlbW92ZSBy
b3RhdGlvbgotICAgIENHQ29udGV4dFJvdGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgLW1fcm90YXRpb24pOworICAgIGNvbnRleHQtPnJvdGF0ZSgtbV9yb3RhdGlvbik7Cit9CisK
K2Jvb2wgUERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCkgY29uc3QKK3sKKyAgICBpZiAoZHN0UmVjdC5zaXplKCkgIT0gbV9jYWNoZWREZXN0
aW5hdGlvblNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzcmNSZWN0ICE9
IG1fY2FjaGVkU291cmNlUmVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQWZmaW5l
VHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNmb3JtOworICAgIGNvbnRl
eHQtPmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
LmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKworICAgIEFmZmluZVRyYW5zZm9ybTo6
RGVjb21wb3NlZFR5cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsKKyAgICBtX2NhY2hlZFRy
YW5zZm9ybS5kZWNvbXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybSk7CisgICAgaWYgKGRl
Y29tcG9zZWRUcmFuc2Zvcm0uc2NhbGVYICE9IGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm0uc2Nh
bGVYIHx8IGRlY29tcG9zZWRUcmFuc2Zvcm0uc2NhbGVZICE9IGNhY2hlZERlY29tcG9zZWRUcmFu
c2Zvcm0uc2NhbGVZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIHZvaWQgdHJhbnNmb3JtQ29udGV4dEZvclBhaW50aW5nKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpCit7CisgICAgZmxvYXQgaFNjYWxlID0gZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVj
dC53aWR0aCgpOworICAgIGZsb2F0IHZTY2FsZSA9IGRzdFJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0
LmhlaWdodCgpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzcmNSZWN0LngoKSAqIGhTY2FsZSwg
c3JjUmVjdC55KCkgKiB2U2NhbGUpOworICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShoU2Nh
bGUsIC12U2NhbGUpKTsKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoMCwgLXNyY1JlY3QuaGVpZ2h0
KCkpOworfQorCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVk
ZWQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFuIGV4aXN0aW5n
IGltYWdlLCByZXVzZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGxvdy1xdWFsaXR5IHBhaW50LCBldmVu
IGlmIGNhY2hlIHBhcmFtZXRlcnMgZG9uJ3QgbWF0Y2g7CisgICAgLy8gd2UnbGwgcmVyZW5kZXIg
d2hlbiB3ZSBkbyB0aGUgc3Vic2VxdWVudCBoaWdoLXF1YWxpdHkgcGFpbnQuCisgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb250ZXh0LT5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KCk7CisgICAgYm9vbCB1c2VMb3dRdWFsaXR5SW50ZXJwb2xhdGlvbiA9
IGludGVycG9sYXRpb25RdWFsaXR5ID09IEludGVycG9sYXRpb25Ob25lIHx8IGludGVycG9sYXRp
b25RdWFsaXR5ID09IEludGVycG9sYXRpb25Mb3c7CisKKyAgICBpZiAoIW1fY2FjaGVkSW1hZ2VC
dWZmZXIgfHwgKCFjYWNoZVBhcmFtZXRlcnNNYXRjaChjb250ZXh0LCBkc3RSZWN0LCBzcmNSZWN0
KSAmJiAhdXNlTG93UXVhbGl0eUludGVycG9sYXRpb24pKSB7CisgICAgICAgIG1fY2FjaGVkSW1h
Z2VCdWZmZXIgPSBjb250ZXh0LT5jcmVhdGVDb21wYXRpYmxlQnVmZmVyKGVuY2xvc2luZ0ludFJl
Y3QoZHN0UmVjdCkuc2l6ZSgpKTsKKyAgICAgICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHcmFwaGljc0NvbnRleHQqIGJ1ZmZlckNvbnRl
eHQgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgICAgIGlmICghYnVmZmVy
Q29udGV4dCkgeworICAgICAgICAgICAgbV9jYWNoZWRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2Zvcm1Db250ZXh0
Rm9yUGFpbnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVjdCwgc3JjUmVjdCk7CisgICAgICAgIGRy
YXdQREZQYWdlKGJ1ZmZlckNvbnRleHQpOworCisgICAgICAgIG1fY2FjaGVkVHJhbnNmb3JtID0g
Y29udGV4dC0+Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VT
Y2FsZSk7CisgICAgICAgIG1fY2FjaGVkRGVzdGluYXRpb25TaXplID0gZHN0UmVjdC5zaXplKCk7
CisgICAgICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CisKKyAgICAgICAgSW50U2l6
ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAg
ICAgICAgc2l6ZV90IG9sZENhY2hlZEJ5dGVzID0gbV9jYWNoZWRCeXRlczsKKyAgICAgICAgbV9j
YWNoZWRCeXRlcyA9IGludGVybmFsU2l6ZS53aWR0aCgpICogaW50ZXJuYWxTaXplLmhlaWdodCgp
ICogNDsKKworICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICAgICAgaW1hZ2VP
YnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgc2FmZUNhc3Q8aW50PihtX2NhY2hl
ZEJ5dGVzKSAtIHNhZmVDYXN0PGludD4ob2xkQ2FjaGVkQnl0ZXMpKTsKKyAgICB9CiB9CiAKIHZv
aWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlKQpAQCAtMTE5LDI5ICsxODEsNDIgQEAg
dm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LAogICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9oYXNQYWdl
KQogICAgICAgICByZXR1cm47CiAKKyAgICB1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKGNvbnRl
eHQsIGRzdFJlY3QsIHNyY1JlY3QpOworCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotCiAgICAgICAgIGNvbnRleHQtPnNldENv
bXBvc2l0ZU9wZXJhdGlvbihvcCk7CiAKLSAgICAgICAgZmxvYXQgaFNjYWxlID0gZHN0UmVjdC53
aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpOwotICAgICAgICBmbG9hdCB2U2NhbGUgPSBkc3RSZWN0
LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKTsKLQotICAgICAgICAvLyBTY2FsZSBhbmQgdHJh
bnNsYXRlIHNvIHRoZSBkb2N1bWVudCBpcyByZW5kZXJlZCBpbiB0aGUgY29ycmVjdCBsb2NhdGlv
biwKLSAgICAgICAgLy8gYWNjb3VudGluZyBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgR3JhcGhpY3ND
b250ZXh0IGlzIGZsaXBwZWQuCi0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgZHN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSAqIGhTY2FsZSwg
ZHN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAqIHZTY2FsZSk7Ci0gICAgICAgIENHQ29udGV4dFNj
YWxlQ1RNKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBoU2NhbGUsIHZTY2FsZSk7Ci0gICAg
ICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAxLCAtMSk7
Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgMCwgLXNyY1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RJbnRlZ3JhbChzcmNSZWN0KSk7Ci0KLSAg
ICAgICAgZHJhd1BERlBhZ2UoY29udGV4dCk7CisgICAgICAgIGlmIChtX2NhY2hlZEltYWdlQnVm
ZmVyKQorICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fY2FjaGVkSW1hZ2VC
dWZmZXIuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhjb250ZXh0LCBkc3RS
ZWN0LCBzcmNSZWN0KTsKKyAgICAgICAgICAgIGRyYXdQREZQYWdlKGNvbnRleHQpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgaW1hZ2VPYnNl
cnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRlc3Ry
b3lEZWNvZGVkRGF0YShib29sKQoreworICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBudWxscHRy
OworCisgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5k
ZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4obV9jYWNoZWRCeXRlcykpOwor
CisgICAgbV9jYWNoZWRCeXRlcyA9IDA7Cit9CisKK3Vuc2lnbmVkIFBERkRvY3VtZW50SW1hZ2U6
OmRlY29kZWRTaXplKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogUERGRG9jdW1lbnRJbWFnZSBp
cyB1bmRlcnJlcG9ydGluZyBkZWNvZGVkIHNpemVzIGJlY2F1c2UgdGhpcworICAgIC8vIG9ubHkg
aW5jbHVkZXMgdGhlIGNhY2hlZCBpbWFnZSBhbmQgbm90aGluZyBlbHNlLgorCisgICAgcmV0dXJu
IG1fY2FjaGVkQnl0ZXM7Cit9CisKICNpZiAhVVNFKFBERktJVF9GT1JfUERGRE9DVU1FTlRJTUFH
RSkKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6Y3JlYXRlUERGRG9jdW1lbnQoKQogewpAQCAtMTc0
LDcgKzI0OSw3IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KQogewogICAgIGFwcGx5Um90YXRpb25Gb3JQYWludGluZyhjb250ZXh0
KTsKIAotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgLW1fY3JvcEJveC54KCksIC1tX2Nyb3BCb3gueSgpKTsKKyAgICBjb250ZXh0LT50cmFuc2xh
dGUoLW1fY3JvcEJveC54KCksIC1tX2Nyb3BCb3gueSgpKTsKIAogICAgIC8vIENHUERGIHBhZ2Vz
IGFyZSBpbmRleGVkIGZyb20gMS4KICAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwg
MSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5oCmluZGV4IDExYjQ1MDUuLjE5NDE4ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUERGRG9jdW1lbnRJbWFnZV9oCiAjZGVmaW5lIFBERkRv
Y3VtZW50SW1hZ2VfaAogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCkBAIC00MiwyOCArNDMsMjkgQEAgT0JKQ19DTEFTUyBQREZEb2N1bWVudDsKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW1hZ2VCdWZmZXI7
CiAKLWNsYXNzIFBERkRvY3VtZW50SW1hZ2UgOiBwdWJsaWMgSW1hZ2UgeworY2xhc3MgUERGRG9j
dW1lbnRJbWFnZSBGSU5BTCA6IHB1YmxpYyBJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8UERGRG9jdW1lbnRJbWFnZT4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQREZEb2N1bWVudEltYWdlPiBjcmVhdGUoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBERkRvY3VtZW50SW1hZ2UpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBERkRvY3VtZW50SW1hZ2Uob2JzZXJ2ZXIpKTsKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgUERGRG9jdW1lbnRJbWFnZSgpOworICAgIFBERkRvY3VtZW50SW1h
Z2UoSW1hZ2VPYnNlcnZlciopOwogICAgIHZpcnR1YWwgflBERkRvY3VtZW50SW1hZ2UoKTsKIAor
ICAgIHZpcnR1YWwgYm9vbCBpc1BERkRvY3VtZW50SW1hZ2UoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNv
bnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2lu
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCBib29sIGRh
dGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBPVkVSUklERTsKIAotICAgIC8vIEZJWE1F
OiBQREYgSW1hZ2VzIGFyZSB1bmRlcnJlcG9ydGluZyBkZWNvZGVkIHNpemVzIGFuZCB3aWxsIGJl
IHVuYWJsZQotICAgIC8vIHRvIHBydW5lIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3Qg
aW1wbGVtZW50ZWQgeWV0LgotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9v
bCAvKmRlc3Ryb3lBbGwqLyA9IHRydWUpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgZGVjb2RlZFNpemUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNEaW1lbnNpb25zKExlbmd0aCYg
aW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBGbG9hdFNpemUmIGludHJp
bnNpY1JhdGlvKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IE9W
RVJSSURFOwpAQCAtODAsMTIgKzgyLDIxIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgcGFnZUNv
dW50KCkgY29uc3Q7CiAgICAgdm9pZCBkcmF3UERGUGFnZShHcmFwaGljc0NvbnRleHQqKTsKIAor
ICAgIHZvaWQgdXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisgICAgYm9v
bCBjYWNoZVBhcmFtZXRlcnNNYXRjaChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisKICNpZiBVU0UoUERG
S0lUX0ZPUl9QREZET0NVTUVOVElNQUdFKQogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9k
b2N1bWVudDsKICNlbHNlCiAgICAgUmV0YWluUHRyPENHUERGRG9jdW1lbnRSZWY+IG1fZG9jdW1l
bnQ7CiAjZW5kaWYKIAorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9jYWNoZWRJbWFnZUJ1ZmZl
cjsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jYWNoZWRUcmFuc2Zvcm07CisgICAgRmxvYXRTaXpl
IG1fY2FjaGVkRGVzdGluYXRpb25TaXplOworICAgIEZsb2F0UmVjdCBtX2NhY2hlZFNvdXJjZVJl
Y3Q7CisgICAgc2l6ZV90IG1fY2FjaGVkQnl0ZXM7CisKICAgICBGbG9hdFJlY3QgbV9tZWRpYUJv
eDsKICAgICBGbG9hdFJlY3QgbV9jcm9wQm94OwogICAgIGZsb2F0IG1fcm90YXRpb247CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW1hZ2VRdWFsaXR5Q29udHJvbGxlci5jcHAK
aW5kZXggYzY2ZTZhNy4uNTE0NmQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0ltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbWFnZVF1YWxpdHlDb250cm9sbGVyLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wg
SW1hZ2VRdWFsaXR5Q29udHJvbGxlcjo6c2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBSCiB7CiAgICAgLy8gSWYgdGhlIGltYWdlIGlzIG5vdCBhIGJpdG1h
cCBpbWFnZSwgdGhlbiBub25lIG9mIHRoaXMgaXMgcmVsZXZhbnQgYW5kIHdlIGp1c3QgcGFpbnQg
YXQgaGlnaAogICAgIC8vIHF1YWxpdHkuCi0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0
bWFwSW1hZ2UoKSB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKCFpbWFn
ZSB8fCAhKGltYWdlLT5pc0JpdG1hcEltYWdlKCkgfHwgaW1hZ2UtPmlzUERGRG9jdW1lbnRJbWFn
ZSgpKSB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHN3aXRjaCAob2JqZWN0LT5zdHlsZSgpLT5pbWFnZVJlbmRlcmluZygpKSB7Cg==
</data>
<flag name="review"
          id="233595"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>