<?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>171701</bug_id>
          
          <creation_ts>2017-05-04 17:34:27 -0700</creation_ts>
          <short_desc>[Mac] Modernize image for dragged link</short_desc>
          <delta_ts>2017-05-04 19:24:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>171706</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>bdakin</cc>
    
    <cc>buildbot</cc>
    
    <cc>dino</cc>
    
    <cc>rmondello</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1304910</commentid>
    <comment_count>0</comment_count>
      <attachid>309118</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-05-04 17:34:27 -0700</bug_when>
    <thetext>Created attachment 309118
patch

[Mac] Modernize image for dragged link</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304912</commentid>
    <comment_count>1</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-04 17:36:58 -0700</bug_when>
    <thetext>Attachment 309118 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 3 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>1304932</commentid>
    <comment_count>2</comment_count>
      <attachid>309124</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-05-04 18:21:33 -0700</bug_when>
    <thetext>Created attachment 309124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304937</commentid>
    <comment_count>3</comment_count>
      <attachid>309118</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-04 18:25:59 -0700</bug_when>
    <thetext>Comment on attachment 309118
patch

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

&gt; Source/WebCore/platform/mac/DragImageMac.mm:161
&gt; +const float linkImagePadding = 10; // Keep in sync with DragController::LinkDragBorderInset.
&gt; +const float linkImageDomainBaselineToTitleBaseline = 18;
&gt; +const float linkImageCornerRadius = 5;
&gt; +const float linkImageMaximumWidth = 400;
&gt; +const float linkImageFontSize = 11;

Some of these should be CGFloats.

&gt; Source/WebCore/platform/mac/DragImageMac.mm:176
&gt; +    void layOutText(NSString *text, NSColor *, NSFont *, CFIndex maximumLines, CTLineTruncationType, CGFloat&amp; maximumAvailableWidth, CGFloat&amp; maximumUsedTextWidth, CGFloat&amp; currentY);

layOutText is hard on my eyes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304945</commentid>
    <comment_count>4</comment_count>
      <attachid>309126</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-05-04 18:46:20 -0700</bug_when>
    <thetext>Created attachment 309126
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304946</commentid>
    <comment_count>5</comment_count>
      <attachid>309126</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-04 18:48:37 -0700</bug_when>
    <thetext>Comment on attachment 309126
Patch

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

&gt; Source/WebCore/platform/mac/DragImageMac.mm:176
&gt; +    void addLine(CTLineRef, Vector&lt;CGPoint&gt;&amp; origins, CFIndex lineIndex, CGFloat x, CGFloat&amp; y, CGFloat&amp; maximumUsedTextWidth, bool isLastLine);

Can origins be const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304951</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-05-04 18:59:12 -0700</bug_when>
    <thetext>Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304957</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-05-04 19:24:27 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/216226/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309118</attachid>
            <date>2017-05-04 17:34:27 -0700</date>
            <delta_ts>2017-05-04 18:25:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>dragimage.diff</filename>
            <type>text/plain</type>
            <size>22061</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNGExMDE3NDhjYy4uNDkxNTNlNjIwMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxNy0wNS0wNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KKworICAgICAgICBbTWFjXSBNb2Rlcm5pemUgaW1hZ2UgZm9yIGRyYWdnZWQgbGluawor
ICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8zMTk3ODgxOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHBhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9EcmFnSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpkcmFnSW1hZ2VTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OnNjYWxlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
c3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFn
SW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0ltYWdlTGF5b3V0OjpMaW5r
SW1hZ2VMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0ltYWdlTGF5b3V0OjpsYXlPdXRU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmtJbWFnZUxheW91dDo6YWRkTGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKToKKyAgICAgICAgKFdlYkNvcmU6
OmZvbnRGcm9tTlNGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNhblVzZUZhc3RS
ZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp3aWR0aFdpdGhGb250KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRyYXdBdFBvaW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmRyYXdEb3VibGVkQXRQb2ludCk6IERlbGV0ZWQuCisgICAgICAgIEltcHJvdmUg
dGhlIGRlc2lnbiBvZiBVUkwgZHJhZyBpbWFnZXMuCisgICAgICAgIFRoZSBtYXJnaW5zIGFyZSBp
bmNyZWFzZWQsIHRoZSBiYWNrZ3JvdW5kIGlzIG5vdyB3aGl0ZSwgdGhlIHRleHQgaXMKKyAgICAg
ICAgbm90IGRyYXduIGRvdWJsZWQtdXAsIHRoZSB0aXRsZSB3aWxsIG5vdyB3cmFwIHRvIHR3byBs
aW5lcywgYW5kIHRoZQorICAgICAgICBkb21haW4gbmFtZSB3aWxsIGFwcGVhciBzaW1wbGlmaWVk
IGFuZCBkZS1wdW55Y29kZWQuCisKKyAgICAgICAgTXVjaCBvZiB0aGUgaW1wbGVtZW50YXRpb24g
b2YgdGV4dCBwYWludGluZyBpcyBib3Jyb3dlZCBmcm9tCisgICAgICAgIDxhdHRhY2htZW50PiBm
b3Igbm93LCBidXQgd2Ugc2hvdWxkIGZpZ3VyZSBvdXQgaG93IHRvIGdlbmVyYWxpemUKKyAgICAg
ICAgaXQgZm9yIFVJLWxpa2UgcGFydHMgb2YgV2ViS2l0IGluIHRoZSBmdXR1cmUuCisKIDIwMTct
MDUtMDIgIEd3YW5nIFlvb24gSHdhbmcgIDx5b29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gUmVjeWNsZSB0ZXh0dXJlcyB3aGlsZSBoYW5kbGluZyB0aWxlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvRHJhZ0NvbnRyb2xsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbQppbmRleCAyNDczYTQzNWVkOS4uZTA4YjU1
ODkyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1t
CkBAIC01MCw3ICs1MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgaW50IERy
YWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gLTI7Citjb25zdCBpbnQgRHJhZ0Nv
bnRyb2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQgPSAtMTA7CiAKIGNvbnN0IGludCBEcmFnQ29u
dHJvbGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAwICogMTUwMDsKIGNvbnN0IGludCBE
cmFnQ29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gNzsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCmluZGV4IDJhOGRmZDNmNWU3Li5lYzMyMzlmN2Q5
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCkBAIC0z
MSwyMiArMzEsMjkgQEAKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAjaW1wb3J0ICJDb3JlR3Jh
cGhpY3NTUEkuaCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKKyNpbXBvcnQgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24u
aCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW1wb3J0ICJJbWFnZS5oIgotI2ltcG9ydCAiVVJMLmgiCisjaW1wb3J0ICJTb2Z0TGlua2lu
Zy5oIgogI2ltcG9ydCAiU3RyaW5nVHJ1bmNhdG9yLmgiCiAjaW1wb3J0ICJUZXh0SW5kaWNhdG9y
LmgiCiAjaW1wb3J0ICJUZXh0UnVuLmgiCisjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEyMDAKKyNpbXBvcnQgPExpbmtQcmVzZW50YXRpb24vTFBOU1VSTEV4dHJhcy5oPgorU09G
VF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKExpbmtQcmVzZW50YXRpb24pCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBJbnRTaXplIGRyYWdJbWFnZVNpemUoUmV0YWluUHRyPE5TSW1h
Z2U+IGltYWdlKQogewotICAgIHJldHVybiAoSW50U2l6ZSlbaW1hZ2UuZ2V0KCkgc2l6ZV07Cisg
ICAgcmV0dXJuIChJbnRTaXplKVtpbWFnZSBzaXplXTsKIH0KIAogdm9pZCBkZWxldGVEcmFnSW1h
Z2UoUmV0YWluUHRyPE5TSW1hZ2U+KQpAQCAtNTcsMTUgKzY0LDE1IEBAIHZvaWQgZGVsZXRlRHJh
Z0ltYWdlKFJldGFpblB0cjxOU0ltYWdlPikKIAogUmV0YWluUHRyPE5TSW1hZ2U+IHNjYWxlRHJh
Z0ltYWdlKFJldGFpblB0cjxOU0ltYWdlPiBpbWFnZSwgRmxvYXRTaXplIHNjYWxlKQogewotICAg
IE5TU2l6ZSBvcmlnaW5hbFNpemUgPSBbaW1hZ2UuZ2V0KCkgc2l6ZV07CisgICAgTlNTaXplIG9y
aWdpbmFsU2l6ZSA9IFtpbWFnZSBzaXplXTsKICAgICBOU1NpemUgbmV3U2l6ZSA9IE5TTWFrZVNp
emUoKG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNjYWxlLndpZHRoKCkpLCAob3JpZ2luYWxTaXplLmhl
aWdodCAqIHNjYWxlLmhlaWdodCgpKSk7CiAgICAgbmV3U2l6ZS53aWR0aCA9IHJvdW5kZihuZXdT
aXplLndpZHRoKTsKICAgICBuZXdTaXplLmhlaWdodCA9IHJvdW5kZihuZXdTaXplLmhlaWdodCk7
CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgW2ltYWdlLmdldCgpIHNl
dFNjYWxlc1doZW5SZXNpemVkOllFU107CisgICAgW2ltYWdlIHNldFNjYWxlc1doZW5SZXNpemVk
OllFU107CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgW2ltYWdlLmdldCgpIHNl
dFNpemU6bmV3U2l6ZV07CisgICAgW2ltYWdlIHNldFNpemU6bmV3U2l6ZV07CiAgICAgcmV0dXJu
IGltYWdlOwogfQogICAgIApAQCAtNzQsMTEgKzgxLDExIEBAIFJldGFpblB0cjxOU0ltYWdlPiBk
aXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBmbG9h
dCBkCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJldGFpblB0
cjxOU0ltYWdlPiBkaXNzb2x2ZWRJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0
V2l0aFNpemU6W2ltYWdlLmdldCgpIHNpemVdXSk7CisgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRp
c3NvbHZlZEltYWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTpbaW1h
Z2Ugc2l6ZV1dKTsKICAgICAKLSAgICBbZGlzc29sdmVkSW1hZ2UuZ2V0KCkgbG9ja0ZvY3VzXTsK
LSAgICBbaW1hZ2UuZ2V0KCkgZHJhd0F0UG9pbnQ6TlNaZXJvUG9pbnQgZnJvbVJlY3Q6TlNNYWtl
UmVjdCgwLCAwLCBbaW1hZ2Ugc2l6ZV0ud2lkdGgsIFtpbWFnZSBzaXplXS5oZWlnaHQpIG9wZXJh
dGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uQ29weSBmcmFjdGlvbjpkZWx0YV07Ci0gICAgW2Rp
c3NvbHZlZEltYWdlLmdldCgpIHVubG9ja0ZvY3VzXTsKKyAgICBbZGlzc29sdmVkSW1hZ2UgbG9j
a0ZvY3VzXTsKKyAgICBbaW1hZ2UgZHJhd0F0UG9pbnQ6TlNaZXJvUG9pbnQgZnJvbVJlY3Q6TlNN
YWtlUmVjdCgwLCAwLCBbaW1hZ2Ugc2l6ZV0ud2lkdGgsIFtpbWFnZSBzaXplXS5oZWlnaHQpIG9w
ZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uQ29weSBmcmFjdGlvbjpkZWx0YV07CisgICAg
W2Rpc3NvbHZlZEltYWdlIHVubG9ja0ZvY3VzXTsKIAogICAgIHJldHVybiBkaXNzb2x2ZWRJbWFn
ZTsKIH0KQEAgLTEwMCw3ICsxMDcsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0lt
YWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaQogICAgICAg
ICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZVJlc3BlY3RpbmdPcmll
bnRhdGlvbik7CiAKICAgICAgICAgICAgIFJldGFpblB0cjxOU0ltYWdlPiByb3RhdGVkRHJhZ0lt
YWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTooTlNTaXplKShzaXpl
UmVzcGVjdGluZ09yaWVudGF0aW9uKV0pOwotICAgICAgICAgICAgW3JvdGF0ZWREcmFnSW1hZ2Uu
Z2V0KCkgbG9ja0ZvY3VzXTsKKyAgICAgICAgICAgIFtyb3RhdGVkRHJhZ0ltYWdlIGxvY2tGb2N1
c107CiAKICAgICAgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gdXNlcyB0b3AtbGVmdCBjb29y
ZGluYXRlcywgbmVlZCB0byBmbGlwIHRvIGJvdHRvbS1sZWZ0LCBhcHBseS4uLgogICAgICAgICAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJh
bnNsYXRpb24oMCwgZGVzdFJlY3QuaGVpZ2h0KCkpOwpAQCAtMTE1LDE5ICsxMjIsMTkgQEAgUmV0
YWluUHRyPE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIElt
YWdlT3JpZW50YXRpb25EZXNjcmkKICAgICAgICAgICAgIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJh
bnNmb3JtU2NhbGUodHJhbnNmb3JtLCAxLCAtMSk7CiAKICAgICAgICAgICAgIFJldGFpblB0cjxO
U0FmZmluZVRyYW5zZm9ybT4gY29jb2FUcmFuc2Zvcm0gPSBhZG9wdE5TKFtbTlNBZmZpbmVUcmFu
c2Zvcm0gYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAgIFtjb2NvYVRyYW5zZm9ybS5nZXQoKSBz
ZXRUcmFuc2Zvcm1TdHJ1Y3Q6KihOU0FmZmluZVRyYW5zZm9ybVN0cnVjdCopJnRyYW5zZm9ybV07
Ci0gICAgICAgICAgICBbY29jb2FUcmFuc2Zvcm0uZ2V0KCkgY29uY2F0XTsKKyAgICAgICAgICAg
IFtjb2NvYVRyYW5zZm9ybSBzZXRUcmFuc2Zvcm1TdHJ1Y3Q6KihOU0FmZmluZVRyYW5zZm9ybVN0
cnVjdCopJnRyYW5zZm9ybV07CisgICAgICAgICAgICBbY29jb2FUcmFuc2Zvcm0gY29uY2F0XTsK
IAogICAgICAgICAgICAgW2ltYWdlLT5zbmFwc2hvdE5TSW1hZ2UoKSBkcmF3SW5SZWN0OmRlc3RS
ZWN0IGZyb21SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KSBvcGVyYXRpb246TlNDb21wb3NpdGluZ09wZXJhdGlvblNvdXJjZU92ZXIgZnJhY3Rpb246MS4w
XTsKIAotICAgICAgICAgICAgW3JvdGF0ZWREcmFnSW1hZ2UuZ2V0KCkgdW5sb2NrRm9jdXNdOwor
ICAgICAgICAgICAgW3JvdGF0ZWREcmFnSW1hZ2UgdW5sb2NrRm9jdXNdOwogCiAgICAgICAgICAg
ICByZXR1cm4gcm90YXRlZERyYWdJbWFnZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8g
ZHJhZ0ltYWdlID0gaW1hZ2UtPnNuYXBzaG90TlNJbWFnZSgpOwotICAgIFtkcmFnSW1hZ2UuZ2V0
KCkgc2V0U2l6ZTooTlNTaXplKXNpemVdOworICAgIFtkcmFnSW1hZ2Ugc2V0U2l6ZTooTlNTaXpl
KXNpemVdOwogICAgIHJldHVybiBkcmFnSW1hZ2U7CiB9CiAgICAgCkBAIC0xNDcsMjAwICsxNTQs
MTUyIEBAIFJldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1h
Z2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVuCiB9CiAKIAotY29uc3QgZmxvYXQgRHJhZ0xh
YmVsQm9yZGVyWCA9IDQ7Ci0vL0tlZXAgYm9yZGVyX3kgaW4gc3luY2ggd2l0aCBEcmFnQ29udHJv
bGxlcjo6TGlua0RyYWdCb3JkZXJJbnNldAotY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWSA9
IDI7Ci1jb25zdCBmbG9hdCBEcmFnTGFiZWxSYWRpdXMgPSA1OwotY29uc3QgZmxvYXQgTGFiZWxC
b3JkZXJZT2Zmc2V0ID0gMjsKK2NvbnN0IGZsb2F0IGxpbmtJbWFnZVBhZGRpbmcgPSAxMDsgLy8g
S2VlcCBpbiBzeW5jIHdpdGggRHJhZ0NvbnRyb2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQuCitj
b25zdCBmbG9hdCBsaW5rSW1hZ2VEb21haW5CYXNlbGluZVRvVGl0bGVCYXNlbGluZSA9IDE4Owor
Y29uc3QgZmxvYXQgbGlua0ltYWdlQ29ybmVyUmFkaXVzID0gNTsKK2NvbnN0IGZsb2F0IGxpbmtJ
bWFnZU1heGltdW1XaWR0aCA9IDQwMDsKK2NvbnN0IGZsb2F0IGxpbmtJbWFnZUZvbnRTaXplID0g
MTE7Citjb25zdCBDRkluZGV4IGxpbmtJbWFnZVRpdGxlTWF4aW11bUxpbmVDb3VudCA9IDI7CiAK
LWNvbnN0IGZsb2F0IE1pbkRyYWdMYWJlbFdpZHRoQmVmb3JlQ2xpcCA9IDEyMDsKLWNvbnN0IGZs
b2F0IE1heERyYWdMYWJlbFdpZHRoID0gMzIwOworc3RydWN0IExpbmtJbWFnZUxheW91dCB7Cisg
ICAgTGlua0ltYWdlTGF5b3V0KFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogCi1jb25zdCBm
bG9hdCBEcmFnTGlua0xhYmVsRm9udHNpemUgPSAxMTsKLWNvbnN0IGZsb2F0IERyYWdMaW5rVXJs
Rm9udFNpemUgPSAxMDsKKyAgICBzdHJ1Y3QgTGFiZWxMaW5lIHsKKyAgICAgICAgRmxvYXRQb2lu
dCBvcmlnaW47CisgICAgICAgIFJldGFpblB0cjxDVExpbmVSZWY+IGxpbmU7CisgICAgfTsKKyAg
ICBWZWN0b3I8TGFiZWxMaW5lPiBsaW5lczsKIAotLy8gRklYTUUgLSB3ZSBzaG91bGQgbW92ZSBh
bGwgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgTlNTdHJpbmcgZXh0cmFzIHRvIFdlYkNvcmUKLSAgICAK
LXN0YXRpYyBGb250Q2FzY2FkZSYgZm9udEZyb21OU0ZvbnQoTlNGb250ICpmb250KQotewotICAg
IEFTU0VSVChmb250KTsKLSAgICBzdGF0aWMgTlNGb250ICpjdXJyZW50Rm9udDsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhc2NhZGU+IGN1cnJlbnRSZW5kZXJlcjsKLSAgICAKLSAg
ICBpZiAoW2ZvbnQgaXNFcXVhbDpjdXJyZW50Rm9udF0pCi0gICAgICAgIHJldHVybiBjdXJyZW50
UmVuZGVyZXI7Ci0gICAgaWYgKGN1cnJlbnRGb250KQotICAgICAgICBDRlJlbGVhc2UoY3VycmVu
dEZvbnQpOwotICAgIGN1cnJlbnRGb250ID0gZm9udDsKLSAgICBDRlJldGFpbihjdXJyZW50Rm9u
dCk7Ci0gICAgY3VycmVudFJlbmRlcmVyLmdldCgpID0gRm9udENhc2NhZGUoRm9udFBsYXRmb3Jt
RGF0YSh0b0NURm9udChmb250KSwgW2ZvbnQgcG9pbnRTaXplXSkpOwotICAgIHJldHVybiBjdXJy
ZW50UmVuZGVyZXI7Ci19CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKIAotc3RhdGljIGJv
b2wgY2FuVXNlRmFzdFJlbmRlcmVyKGNvbnN0IFVuaUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHVuc2lnbmVkIGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbiA9IHVfY2hhckRpcmVjdGlvbihi
dWZmZXJbaV0pOwotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFVfUklHSFRfVE9fTEVGVCB8fCBk
aXJlY3Rpb24gPiBVX09USEVSX05FVVRSQUwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotICAgIAotc3RhdGljIGZsb2F0IHdpZHRoV2l0aEZv
bnQoTlNTdHJpbmcgKnN0cmluZywgTlNGb250ICpmb250KQotewotICAgIGlmICghZm9udCkKLSAg
ICAgICAgcmV0dXJuIDA7Citwcml2YXRlOgorICAgIHZvaWQgbGF5T3V0VGV4dChOU1N0cmluZyAq
dGV4dCwgTlNDb2xvciAqLCBOU0ZvbnQgKiwgQ0ZJbmRleCBtYXhpbXVtTGluZXMsIENUTGluZVRy
dW5jYXRpb25UeXBlLCBDR0Zsb2F0JiBtYXhpbXVtQXZhaWxhYmxlV2lkdGgsIENHRmxvYXQmIG1h
eGltdW1Vc2VkVGV4dFdpZHRoLCBDR0Zsb2F0JiBjdXJyZW50WSk7CisgICAgdm9pZCBhZGRMaW5l
KENUTGluZVJlZiwgVmVjdG9yPENHUG9pbnQ+JiBvcmlnaW5zLCBDRkluZGV4IGxpbmVJbmRleCwg
Q0dGbG9hdCB4LCBDR0Zsb2F0JiB5LCBDR0Zsb2F0JiBtYXhpbXVtVXNlZFRleHRXaWR0aCwgYm9v
bCBpc0xhc3RMaW5lKTsKK307CiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBbc3RyaW5nIGxlbmd0
aF07Ci0gICAgVmVjdG9yPFVuaUNoYXIsIDIwNDg+IGJ1ZmZlcihsZW5ndGgpOwotICAgIAotICAg
IFtzdHJpbmcgZ2V0Q2hhcmFjdGVyczpidWZmZXIuZGF0YSgpXTsKLSAgICAKLSAgICBpZiAoY2Fu
VXNlRmFzdFJlbmRlcmVyKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpIHsKLSAgICAgICAgRm9udENh
c2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YSh0b0NURm9udChmb250KSwgW2ZvbnQg
cG9pbnRTaXplXSkpOwotICAgICAgICBUZXh0UnVuIHJ1bihTdHJpbmdWaWV3KGJ1ZmZlci5kYXRh
KCksIGxlbmd0aCkpOwotICAgICAgICByZXR1cm4gd2ViQ29yZUZvbnQud2lkdGgocnVuKTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIFtzdHJpbmcgc2l6ZVdpdGhBdHRyaWJ1dGVzOltOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpmb250LCBOU0ZvbnRBdHRyaWJ1dGVO
YW1lLCBuaWxdXS53aWR0aDsKLX0KLSAgICAKLXN0YXRpYyB2b2lkIGRyYXdBdFBvaW50KE5TU3Ry
aW5nICpzdHJpbmcsIE5TUG9pbnQgcG9pbnQsIE5TRm9udCAqZm9udCwgTlNDb2xvciAqdGV4dENv
bG9yKQorTGlua0ltYWdlTGF5b3V0OjpMaW5rSW1hZ2VMYXlvdXQoVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdGl0bGVTdHJpbmcpCiB7Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm47Cisg
ICAgTlNTdHJpbmcgKnRpdGxlID0gbnNTdHJpbmdOaWxJZkVtcHR5KHRpdGxlU3RyaW5nKTsKKyAg
ICBOU1VSTCAqY29jb2FVUkwgPSB1cmw7CisgICAgTlNTdHJpbmcgKmFic29sdXRlVVJMU3RyaW5n
ID0gW2NvY29hVVJMIGFic29sdXRlU3RyaW5nXTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IFtz
dHJpbmcgbGVuZ3RoXTsKLSAgICBWZWN0b3I8VW5pQ2hhciwgMjA0OD4gYnVmZmVyKGxlbmd0aCk7
Ci0gICAgCi0gICAgW3N0cmluZyBnZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCldOwotICAgIAot
ICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewotICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGEgaGFsZi1hc3NlZCBhdHRlbXB0IHRvIG1hdGNoIEFw
cEtpdCdzIHJvdW5kaW5nIHJ1bGVzIGZvciBkcmF3QXRQb2ludC4KLSAgICAgICAgLy8gSXQncyBw
cm9iYWJseSBpbmNvcnJlY3QgZm9yIGhpZ2ggRFBJLgotICAgICAgICAvLyBJZiB5b3UgY2hhbmdl
IHRoaXMsIGJlIHN1cmUgdG8gdGVzdCBhbGwgdGhlIHRleHQgZHJhd24gdGhpcyB3YXkgaW4gU2Fm
YXJpLCBpbmNsdWRpbmcKLSAgICAgICAgLy8gdGhlIHN0YXR1cyBiYXIsIGJvb2ttYXJrcyBiYXIs
IHRhYiBiYXIsIGFuZCBhY3Rpdml0eSB3aW5kb3cuCi0gICAgICAgIHBvaW50LnkgPSBDR0NlaWxp
bmcocG9pbnQueSk7Ci0gICAgICAgIAotICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250
ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKLSAgICAgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IHN0YXRpY19jYXN0PENHQ29udGV4dFJlZj4oW25zQ29udGV4dCBn
cmFwaGljc1BvcnRdKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChj
Z0NvbnRleHQpOyAgICAKLSAgICAgICAgCi0gICAgICAgIC8vIFNhZmFyaSBkb2Vzbid0IGZsaXAg
dGhlIE5TR3JhcGhpY3NDb250ZXh0IGJlZm9yZSBjYWxsaW5nIFdlYktpdCwgeWV0IFdlYkNvcmUg
cmVxdWlyZXMgYSBmbGlwcGVkIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgICAgIEJPT0wgZmxpcHBl
ZCA9IFtuc0NvbnRleHQgaXNGbGlwcGVkXTsKLSAgICAgICAgaWYgKCFmbGlwcGVkKQotICAgICAg
ICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7Ci0KLSAgICAgICAgRm9u
dENhc2NhZGUgd2ViQ29yZUZvbnQoRm9udFBsYXRmb3JtRGF0YSh0b0NURm9udChmb250KSwgW2Zv
bnQgcG9pbnRTaXplXSksIEFudGlhbGlhc2VkKTsKLSAgICAgICAgVGV4dFJ1biBydW4oU3RyaW5n
VmlldyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpKTsKLQotICAgICAgICBDR0Zsb2F0IHJlZDsKLSAg
ICAgICAgQ0dGbG9hdCBncmVlbjsKLSAgICAgICAgQ0dGbG9hdCBibHVlOwotICAgICAgICBDR0Zs
b2F0IGFscGhhOwotICAgICAgICBbW3RleHRDb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6
TlNEZXZpY2VSR0JDb2xvclNwYWNlXSBnZXRSZWQ6JnJlZCBncmVlbjomZ3JlZW4gYmx1ZTomYmx1
ZSBhbHBoYTomYWxwaGFdOwotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKG1h
a2VSR0JBKHJlZCAqIDI1NSwgZ3JlZW4gKiAyNTUsIGJsdWUgKiAyNTUsIGFscGhhICogMjU1KSk7
Ci0gICAgICAgIAotICAgICAgICB3ZWJDb3JlRm9udC5kcmF3VGV4dChncmFwaGljc0NvbnRleHQs
IHJ1biwgRmxvYXRQb2ludChwb2ludC54LCAoZmxpcHBlZCA/IHBvaW50LnkgOiAoLTEgKiBwb2lu
dC55KSkpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZmxpcHBlZCkKLSAgICAgICAgICAgIENH
Q29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMSwgLTEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIFRoZSBnaXZlbiBwb2ludCBpcyBvbiB0aGUgYmFzZWxpbmUuCi0gICAgICAgIGlmIChbW05T
VmlldyBmb2N1c1ZpZXddIGlzRmxpcHBlZF0pCi0gICAgICAgICAgICBwb2ludC55IC09IFtmb250
IGFzY2VuZGVyXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcG9pbnQueSArPSBbZm9udCBk
ZXNjZW5kZXJdOwotICAgICAgICAgICAgICAgIAotICAgICAgICBbc3RyaW5nIGRyYXdBdFBvaW50
OnBvaW50IHdpdGhBdHRyaWJ1dGVzOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Rz
QW5kS2V5czpmb250LCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLCB0ZXh0Q29sb3IsIE5TRm9yZWdyb3Vu
ZENvbG9yQXR0cmlidXRlTmFtZSwgbmlsXV07CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDEyMDAKKyAgICBMaW5rUHJlc2VudGF0aW9uTGlicmFyeSgpOworICAgIE5T
U3RyaW5nICpkb21haW4gPSBbY29jb2FVUkwgX2xwX3NpbXBsaWZpZWREaXNwbGF5U3RyaW5nXTsK
KyNlbHNlCisgICAgTlNTdHJpbmcgKmRvbWFpbiA9IGFic29sdXRlVVJMU3RyaW5nOworI2VuZGlm
CisKKyAgICBpZiAoW3RpdGxlIGlzRXF1YWxUb1N0cmluZzphYnNvbHV0ZVVSTFN0cmluZ10pCisg
ICAgICAgIHRpdGxlID0gbmlsOworCisgICAgTlNGb250ICp0aXRsZUZvbnQgPSBbTlNGb250IGJv
bGRTeXN0ZW1Gb250T2ZTaXplOmxpbmtJbWFnZUZvbnRTaXplXTsKKyAgICBOU0ZvbnQgKmRvbWFp
bkZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6bGlua0ltYWdlRm9udFNpemVdOworCisg
ICAgQ0dGbG9hdCBtYXhpbXVtQXZhaWxhYmxlV2lkdGggPSBsaW5rSW1hZ2VNYXhpbXVtV2lkdGgg
LSBsaW5rSW1hZ2VQYWRkaW5nICogMjsKKworICAgIENHRmxvYXQgY3VycmVudFkgPSBsaW5rSW1h
Z2VQYWRkaW5nOworICAgIENHRmxvYXQgbWF4aW11bVVzZWRUZXh0V2lkdGggPSAwOworCisgICAg
aWYgKHRpdGxlKQorICAgICAgICBsYXlPdXRUZXh0KHRpdGxlLCBbTlNDb2xvciBsYWJlbENvbG9y
XSwgdGl0bGVGb250LCBsaW5rSW1hZ2VUaXRsZU1heGltdW1MaW5lQ291bnQsIGtDVExpbmVUcnVu
Y2F0aW9uRW5kLCBtYXhpbXVtQXZhaWxhYmxlV2lkdGgsIG1heGltdW1Vc2VkVGV4dFdpZHRoLCBj
dXJyZW50WSk7CisKKyAgICBpZiAodGl0bGUgJiYgZG9tYWluKQorICAgICAgICBjdXJyZW50WSAr
PSBsaW5rSW1hZ2VEb21haW5CYXNlbGluZVRvVGl0bGVCYXNlbGluZSAtIChkb21haW5Gb250LmFz
Y2VuZGVyIC0gZG9tYWluRm9udC5kZXNjZW5kZXIpOworCisgICAgaWYgKGRvbWFpbikgeworICAg
ICAgICBsYXlPdXRUZXh0KGRvbWFpbiwgW05TQ29sb3Igc2Vjb25kYXJ5TGFiZWxDb2xvcl0sIGRv
bWFpbkZvbnQsIDEsIGtDVExpbmVUcnVuY2F0aW9uTWlkZGxlLCBtYXhpbXVtQXZhaWxhYmxlV2lk
dGgsIG1heGltdW1Vc2VkVGV4dFdpZHRoLCBjdXJyZW50WSk7CiAgICAgfQotfQotICAgIAotc3Rh
dGljIHZvaWQgZHJhd0RvdWJsZWRBdFBvaW50KE5TU3RyaW5nICpzdHJpbmcsIE5TUG9pbnQgdGV4
dFBvaW50LCBOU0NvbG9yICp0b3BDb2xvciwgTlNDb2xvciAqYm90dG9tQ29sb3IsIE5TRm9udCAq
Zm9udCkKLXsKLSAgICAgICAgLy8gdHVybiBvZmYgZm9udCBzbW9vdGhpbmcgc28gdHJhbnNsdWNl
bnQgdGV4dCBkcmF3cyBjb3JyZWN0bHkgKFJhZGFyIDMxMTg0NTUpCi0gICAgICAgIGRyYXdBdFBv
aW50KHN0cmluZywgdGV4dFBvaW50LCBmb250LCBib3R0b21Db2xvcik7Ci0gICAgICAgIAotICAg
ICAgICB0ZXh0UG9pbnQueSArPSAxOwotICAgICAgICBkcmF3QXRQb2ludChzdHJpbmcsIHRleHRQ
b2ludCwgZm9udCwgdG9wQ29sb3IpOworCisgICAgY3VycmVudFkgKz0gbGlua0ltYWdlUGFkZGlu
ZzsKKworICAgIGJvdW5kaW5nUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCBtYXhpbXVtVXNlZFRleHRX
aWR0aCArIGxpbmtJbWFnZVBhZGRpbmcgKiAyLCBjdXJyZW50WSk7CiB9CiAKLURyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmLCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgVGV4dEluZGljYXRvckRhdGEmLCBGb250UmVuZGVyaW5nTW9kZSwgZmxvYXQpCit2
b2lkIExpbmtJbWFnZUxheW91dDo6bGF5T3V0VGV4dChOU1N0cmluZyAqdGV4dCwgTlNDb2xvciAq
Y29sb3IsIE5TRm9udCAqZm9udCwgQ0ZJbmRleCBtYXhpbXVtTGluZXMsIENUTGluZVRydW5jYXRp
b25UeXBlIHRydW5jYXRpb25UeXBlLCBDR0Zsb2F0JiBtYXhpbXVtQXZhaWxhYmxlV2lkdGgsIENH
RmxvYXQmIG1heGltdW1Vc2VkVGV4dFdpZHRoLCBDR0Zsb2F0JiBjdXJyZW50WSkKIHsKLSAgICBO
U1N0cmluZyAqbGFiZWwgPSBuc1N0cmluZ05pbElmRW1wdHkodGl0bGUpOwotICAgIE5TVVJMICpj
b2NvYVVSTCA9IHVybDsKLSAgICBOU1N0cmluZyAqdXJsU3RyaW5nID0gW2NvY29hVVJMIGFic29s
dXRlU3RyaW5nXTsKKyAgICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsKKyAgICAg
ICAgKGlkKWtDVEZvbnRBdHRyaWJ1dGVOYW1lOiBmb250LAorICAgICAgICAoaWQpa0NURm9yZWdy
b3VuZENvbG9yQXR0cmlidXRlTmFtZTogY29sb3IKKyAgICB9OworICAgIFJldGFpblB0cjxOU0F0
dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRUZXh0ID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dCBhdHRyaWJ1dGVzOnRleHRBdHRyaWJ1dGVz
XSk7CisgICAgUmV0YWluUHRyPENURnJhbWVzZXR0ZXJSZWY+IHRpdGxlRnJhbWVzZXR0ZXIgPSBh
ZG9wdENGKENURnJhbWVzZXR0ZXJDcmVhdGVXaXRoQXR0cmlidXRlZFN0cmluZygoQ0ZBdHRyaWJ1
dGVkU3RyaW5nUmVmKWF0dHJpYnV0ZWRUZXh0LmdldCgpKSk7CisKKyAgICBDRlJhbmdlIGZpdFJh
bmdlOworICAgIENHU2l6ZSB0aXRsZVRleHRTaXplID0gQ1RGcmFtZXNldHRlclN1Z2dlc3RGcmFt
ZVNpemVXaXRoQ29uc3RyYWludHModGl0bGVGcmFtZXNldHRlci5nZXQoKSwgQ0ZSYW5nZU1ha2Uo
MCwgMCksIG51bGxwdHIsIENHU2l6ZU1ha2UobWF4aW11bUF2YWlsYWJsZVdpZHRoLCBDR0ZMT0FU
X01BWCksICZmaXRSYW5nZSk7CisKKyAgICBSZXRhaW5QdHI8Q0dQYXRoUmVmPiB0aXRsZVBhdGgg
PSBhZG9wdENGKENHUGF0aENyZWF0ZVdpdGhSZWN0KENHUmVjdE1ha2UoMCwgMCwgdGl0bGVUZXh0
U2l6ZS53aWR0aCwgdGl0bGVUZXh0U2l6ZS5oZWlnaHQpLCBudWxscHRyKSk7CisgICAgUmV0YWlu
UHRyPENURnJhbWVSZWY+IHRpdGxlRnJhbWUgPSBhZG9wdENGKENURnJhbWVzZXR0ZXJDcmVhdGVG
cmFtZSh0aXRsZUZyYW1lc2V0dGVyLmdldCgpLCBmaXRSYW5nZSwgdGl0bGVQYXRoLmdldCgpLCBu
dWxscHRyKSk7CisKKyAgICBDRkFycmF5UmVmIGN0TGluZXMgPSBDVEZyYW1lR2V0TGluZXModGl0
bGVGcmFtZS5nZXQoKSk7CisgICAgQ0ZJbmRleCBsaW5lQ291bnQgPSBDRkFycmF5R2V0Q291bnQo
Y3RMaW5lcyk7CisgICAgaWYgKCFsaW5lQ291bnQpCisgICAgICAgIHJldHVybjsKIAotICAgIEJP
T0wgZHJhd1VSTFN0cmluZyA9IFlFUzsKLSAgICBCT09MIGNsaXBVUkxTdHJpbmcgPSBOTzsKLSAg
ICBCT09MIGNsaXBMYWJlbFN0cmluZyA9IE5POworICAgIFZlY3RvcjxDR1BvaW50PiBvcmlnaW5z
KGxpbmVDb3VudCk7CisgICAgQ1RGcmFtZUdldExpbmVPcmlnaW5zKHRpdGxlRnJhbWUuZ2V0KCks
IENGUmFuZ2VNYWtlKDAsIDApLCBvcmlnaW5zLmRhdGEoKSk7CiAKLSAgICBpZiAoIWxhYmVsKSB7
Ci0gICAgICAgIGRyYXdVUkxTdHJpbmcgPSBOTzsKLSAgICAgICAgbGFiZWwgPSB1cmxTdHJpbmc7
CisgICAgLy8gTGF5IG91dCBhbmQgcmVjb3JkIHRoZSBmaXJzdCAobWF4aW11bUxpbmVzIC0gMSkg
bGluZXMuCisgICAgQ0ZJbmRleCBsaW5lSW5kZXggPSAwOworICAgIGZvciAoOyBsaW5lSW5kZXgg
PCBzdGQ6Om1pbihtYXhpbXVtTGluZXMgLSAxLCBsaW5lQ291bnQpOyArK2xpbmVJbmRleCkgewor
ICAgICAgICBDVExpbmVSZWYgbGluZSA9IChDVExpbmVSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChjdExpbmVzLCBsaW5lSW5kZXgpOworICAgICAgICBhZGRMaW5lKGxpbmUsIG9yaWdpbnMsIGxp
bmVJbmRleCwgbGlua0ltYWdlUGFkZGluZywgY3VycmVudFksIG1heGltdW1Vc2VkVGV4dFdpZHRo
LCBsaW5lSW5kZXggPT0gbGluZUNvdW50IC0gMSk7CiAgICAgfQogCi0gICAgTlNGb250ICpsYWJl
bEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250OltO
U0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEcmFnTGlua0xhYmVsRm9udHNpemVdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSGF2ZVRy
YWl0Ok5TQm9sZEZvbnRNYXNrXTsKLSAgICBOU0ZvbnQgKnVybEZvbnQgPSBbTlNGb250IHN5c3Rl
bUZvbnRPZlNpemU6RHJhZ0xpbmtVcmxGb250U2l6ZV07CisgICAgaWYgKGxpbmVJbmRleCA9PSBs
aW5lQ291bnQpCisgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChsYWJlbEZvbnQpOwotICAg
IEFTU0VSVCh1cmxGb250KTsKKyAgICAvLyBXZSBoYWQgdGV4dCB0aGF0IGRpZG4ndCBmaXQgaW4g
dGhlIGZpcnN0IChtYXhpbXVtTGluZXMgLSAxKSBsaW5lcy4KKyAgICAvLyBDb21iaW5lIGl0IGlu
dG8gb25lIGxhc3QgbGluZSwgYW5kIHRydW5jYXRlIGl0LgorICAgIENUTGluZVJlZiBmaXJzdFJl
bWFpbmluZ0xpbmUgPSAoQ1RMaW5lUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY3RMaW5lcywg
bGluZUluZGV4KTsKKyAgICBDRkluZGV4IHJlbWFpbmluZ1JhbmdlU3RhcnQgPSBDVExpbmVHZXRT
dHJpbmdSYW5nZShmaXJzdFJlbWFpbmluZ0xpbmUpLmxvY2F0aW9uOworICAgIE5TUmFuZ2UgcmVt
YWluaW5nUmFuZ2UgPSBOU01ha2VSYW5nZShyZW1haW5pbmdSYW5nZVN0YXJ0LCBbYXR0cmlidXRl
ZFRleHQgbGVuZ3RoXSAtIHJlbWFpbmluZ1JhbmdlU3RhcnQpOworICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqcmVtYWluaW5nU3RyaW5nID0gW2F0dHJpYnV0ZWRUZXh0IGF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2U6cmVtYWluaW5nUmFuZ2VdOworICAgIFJldGFpblB0cjxDVExpbmVSZWY+IHJl
bWFpbmluZ0xpbmUgPSBhZG9wdENGKENUTGluZUNyZWF0ZVdpdGhBdHRyaWJ1dGVkU3RyaW5nKChD
RkF0dHJpYnV0ZWRTdHJpbmdSZWYpcmVtYWluaW5nU3RyaW5nKSk7CisgICAgUmV0YWluUHRyPE5T
QXR0cmlidXRlZFN0cmluZz4gZWxsaXBzaXNTdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIlx1MjAyNiIgYXR0cmlidXRlczp0ZXh0QXR0
cmlidXRlc10pOworICAgIFJldGFpblB0cjxDVExpbmVSZWY+IGVsbGlwc2lzTGluZSA9IGFkb3B0
Q0YoQ1RMaW5lQ3JlYXRlV2l0aEF0dHJpYnV0ZWRTdHJpbmcoKENGQXR0cmlidXRlZFN0cmluZ1Jl
ZillbGxpcHNpc1N0cmluZy5nZXQoKSkpOworICAgIFJldGFpblB0cjxDVExpbmVSZWY+IHRydW5j
YXRlZExpbmUgPSBhZG9wdENGKENUTGluZUNyZWF0ZVRydW5jYXRlZExpbmUocmVtYWluaW5nTGlu
ZS5nZXQoKSwgbWF4aW11bUF2YWlsYWJsZVdpZHRoLCB0cnVuY2F0aW9uVHlwZSwgZWxsaXBzaXNM
aW5lLmdldCgpKSk7CisKKyAgICBpZiAoIXRydW5jYXRlZExpbmUpCisgICAgICAgIHRydW5jYXRl
ZExpbmUgPSByZW1haW5pbmdMaW5lOworICAgIAorICAgIGFkZExpbmUodHJ1bmNhdGVkTGluZS5n
ZXQoKSwgb3JpZ2lucywgbGluZUluZGV4LCBsaW5rSW1hZ2VQYWRkaW5nLCBjdXJyZW50WSwgbWF4
aW11bVVzZWRUZXh0V2lkdGgsIHRydWUpOworfQogCi0gICAgTlNTaXplIGxhYmVsU2l6ZTsKLSAg
ICBsYWJlbFNpemUud2lkdGggPSB3aWR0aFdpdGhGb250KGxhYmVsLCBsYWJlbEZvbnQpOwotICAg
IGxhYmVsU2l6ZS5oZWlnaHQgPSBbbGFiZWxGb250IGFzY2VuZGVyXSAtIFtsYWJlbEZvbnQgZGVz
Y2VuZGVyXTsKLSAgICBpZiAobGFiZWxTaXplLndpZHRoID4gTWF4RHJhZ0xhYmVsV2lkdGgpewot
ICAgICAgICBsYWJlbFNpemUud2lkdGggPSBNYXhEcmFnTGFiZWxXaWR0aDsKLSAgICAgICAgY2xp
cExhYmVsU3RyaW5nID0gWUVTOwotICAgIH0KK3ZvaWQgTGlua0ltYWdlTGF5b3V0OjphZGRMaW5l
KENUTGluZVJlZiBjdExpbmUsIFZlY3RvcjxDR1BvaW50PiYgb3JpZ2lucywgQ0ZJbmRleCBsaW5l
SW5kZXgsIENHRmxvYXQgeCwgQ0dGbG9hdCYgeSwgQ0dGbG9hdCYgbWF4aW11bVVzZWRUZXh0V2lk
dGgsIGJvb2wgaXNMYXN0TGluZSkKK3sKKyAgICBDR1JlY3QgbGluZUJvdW5kcyA9IENUTGluZUdl
dEJvdW5kc1dpdGhPcHRpb25zKGN0TGluZSwgMCk7CisgICAgQ0dGbG9hdCB0cmFpbGluZ1doaXRl
c3BhY2VXaWR0aCA9IENUTGluZUdldFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKGN0TGluZSk7Cisg
ICAgQ0dGbG9hdCBsaW5lV2lkdGhJZ25vcmluZ1RyYWlsaW5nV2hpdGVzcGFjZSA9IGxpbmVCb3Vu
ZHMuc2l6ZS53aWR0aCAtIHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOworICAgIG1heGltdW1Vc2Vk
VGV4dFdpZHRoID0gc3RkOjptYXgobWF4aW11bVVzZWRUZXh0V2lkdGgsIGxpbmVXaWR0aElnbm9y
aW5nVHJhaWxpbmdXaGl0ZXNwYWNlKTsKIAotICAgIE5TU2l6ZSBpbWFnZVNpemU7Ci0gICAgaW1h
Z2VTaXplLndpZHRoID0gbGFiZWxTaXplLndpZHRoICsgRHJhZ0xhYmVsQm9yZGVyWCAqIDI7Ci0g
ICAgaW1hZ2VTaXplLmhlaWdodCA9IGxhYmVsU2l6ZS5oZWlnaHQgKyBEcmFnTGFiZWxCb3JkZXJZ
ICogMjsKLSAgICBpZiAoZHJhd1VSTFN0cmluZykgewotICAgICAgICBOU1NpemUgdXJsU3RyaW5n
U2l6ZTsKLSAgICAgICAgdXJsU3RyaW5nU2l6ZS53aWR0aCA9IHdpZHRoV2l0aEZvbnQodXJsU3Ry
aW5nLCB1cmxGb250KTsKLSAgICAgICAgdXJsU3RyaW5nU2l6ZS5oZWlnaHQgPSBbdXJsRm9udCBh
c2NlbmRlcl0gLSBbdXJsRm9udCBkZXNjZW5kZXJdOwotICAgICAgICBpbWFnZVNpemUuaGVpZ2h0
ICs9IHVybFN0cmluZ1NpemUuaGVpZ2h0OwotICAgICAgICBpZiAodXJsU3RyaW5nU2l6ZS53aWR0
aCA+IE1heERyYWdMYWJlbFdpZHRoKSB7Ci0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBz
dGQ6Om1heChNYXhEcmFnTGFiZWxXaWR0aCArIERyYWdMYWJlbEJvcmRlclkgKiAyLCBNaW5EcmFn
TGFiZWxXaWR0aEJlZm9yZUNsaXApOwotICAgICAgICAgICAgY2xpcFVSTFN0cmluZyA9IFlFUzsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBzdGQ6Om1heChs
YWJlbFNpemUud2lkdGggKyBEcmFnTGFiZWxCb3JkZXJYICogMiwgdXJsU3RyaW5nU2l6ZS53aWR0
aCArIERyYWdMYWJlbEJvcmRlclggKiAyKTsKLSAgICB9Ci0gICAgTlNJbWFnZSAqZHJhZ0ltYWdl
ID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOiBpbWFnZVNpemVdIGF1dG9yZWxlYXNl
XTsKLSAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107CisgICAgaWYgKGxpbmVJbmRleCkKKyAgICAg
ICAgeSArPSBvcmlnaW5zW2xpbmVJbmRleCAtIDFdLnkgLSBvcmlnaW5zW2xpbmVJbmRleF0ueTsK
IAotICAgIFtbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6IDAuN2YgZ3JlZW46IDAuN2YgYmx1
ZTogMC43ZiBhbHBoYTogMC44Zl0gc2V0XTsKKyAgICBMaW5rSW1hZ2VMYXlvdXQ6OkxhYmVsTGlu
ZSBsaW5lOworICAgIGxpbmUubGluZSA9IGN0TGluZTsKKyAgICBsaW5lLm9yaWdpbiA9IEZsb2F0
UG9pbnQoeCwgeSk7CisgICAgbGluZXMuYXBwZW5kKGxpbmUpOwogCi0gICAgLy8gRHJhZyBhIHJl
Y3RhbmdsZSB3aXRoIHJvdW5kZWQgY29ybmVycwotICAgIE5TQmV6aWVyUGF0aCAqcGF0aCA9IFtO
U0JlemllclBhdGggYmV6aWVyUGF0aF07Ci0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhP
dmFsSW5SZWN0OiBOU01ha2VSZWN0KDAsIDAsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJl
bFJhZGl1cyAqIDIpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6
IE5TTWFrZVJlY3QoMCwgaW1hZ2VTaXplLmhlaWdodCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIERy
YWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKLSAgICBbcGF0aCBhcHBl
bmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0g
RHJhZ0xhYmVsUmFkaXVzICogMiwgaW1hZ2VTaXplLmhlaWdodCAtIERyYWdMYWJlbFJhZGl1cyAq
IDIsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKLSAgICBbcGF0
aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndp
ZHRoIC0gRHJhZ0xhYmVsUmFkaXVzICogMiwgMCwgRHJhZ0xhYmVsUmFkaXVzICogMiwgRHJhZ0xh
YmVsUmFkaXVzICogMildOworICAgIGlmIChpc0xhc3RMaW5lKQorICAgICAgICB5ICs9IGxpbmVC
b3VuZHMuc2l6ZS5oZWlnaHQ7Cit9CiAKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJl
Y3Q6IE5TTWFrZVJlY3QoRHJhZ0xhYmVsUmFkaXVzLCAwLCBpbWFnZVNpemUud2lkdGggLSBEcmFn
TGFiZWxSYWRpdXMgKiAyLCBpbWFnZVNpemUuaGVpZ2h0KV07Ci0gICAgW3BhdGggYXBwZW5kQmV6
aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KDAsIERyYWdMYWJlbFJhZGl1cywgRHJhZ0xhYmVs
UmFkaXVzICsgMTAsIGltYWdlU2l6ZS5oZWlnaHQgLSAyICogRHJhZ0xhYmVsUmFkaXVzKV07Ci0g
ICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53
aWR0aCAtIERyYWdMYWJlbFJhZGl1cyAtIDIwLCBEcmFnTGFiZWxSYWRpdXMsIERyYWdMYWJlbFJh
ZGl1cyArIDIwLCBpbWFnZVNpemUuaGVpZ2h0IC0gMiAqIERyYWdMYWJlbFJhZGl1cyldOwotICAg
IFtwYXRoIGZpbGxdOworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVu
dCYsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBUZXh0SW5kaWNhdG9yRGF0YSYsIEZv
bnRSZW5kZXJpbmdNb2RlLCBmbG9hdCkKK3sKKyAgICBMaW5rSW1hZ2VMYXlvdXQgbGF5b3V0KHVy
bCwgdGl0bGUpOwogCi0gICAgTlNDb2xvciAqdG9wQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhE
ZXZpY2VXaGl0ZTowLjBmIGFscGhhOjAuNzVmXTsKLSAgICBOU0NvbG9yICpib3R0b21Db2xvciA9
IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjEuMGYgYWxwaGE6MC41Zl07Ci0gICAgaWYg
KGRyYXdVUkxTdHJpbmcgJiYgdXJsRm9udCkgewotICAgICAgICBpZiAoY2xpcFVSTFN0cmluZykK
LSAgICAgICAgICAgIHVybFN0cmluZyA9IFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUo
dXJsU3RyaW5nLCBpbWFnZVNpemUud2lkdGggLSAoRHJhZ0xhYmVsQm9yZGVyWCAqIDIpLCBmb250
RnJvbU5TRm9udCh1cmxGb250KSk7CisgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdJbWFnZSA9
IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6bGF5b3V0LmJvdW5kaW5nUmVj
dC5zaXplKCldKTsKKyAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107CiAKLSAgICAgICBkcmF3RG91
YmxlZEF0UG9pbnQodXJsU3RyaW5nLCBOU01ha2VQb2ludChEcmFnTGFiZWxCb3JkZXJYLCBEcmFn
TGFiZWxCb3JkZXJZIC0gW3VybEZvbnQgZGVzY2VuZGVyXSksIHRvcENvbG9yLCBib3R0b21Db2xv
ciwgdXJsRm9udCk7Ci0gICAgfQorICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KChDR0NvbnRl
eHRSZWYpW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XS5ncmFwaGljc1BvcnQpOwor
ICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJvdW5k
aW5nUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVzKSks
IENvbG9yOjp3aGl0ZSk7CiAKLSAgICBpZiAobGFiZWxGb250KSB7Ci0gICAgICAgIGlmIChjbGlw
TGFiZWxTdHJpbmcpCi0gICAgICAgICAgICBsYWJlbCA9IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRU
cnVuY2F0ZShsYWJlbCwgaW1hZ2VTaXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclggKiAyKSwg
Zm9udEZyb21OU0ZvbnQobGFiZWxGb250KSk7Ci0gICAgICAgIGRyYXdEb3VibGVkQXRQb2ludChs
YWJlbCwgTlNNYWtlUG9pbnQoRHJhZ0xhYmVsQm9yZGVyWCwgaW1hZ2VTaXplLmhlaWdodCAtIExh
YmVsQm9yZGVyWU9mZnNldCAtIFtsYWJlbEZvbnQgcG9pbnRTaXplXSksIHRvcENvbG9yLCBib3R0
b21Db2xvciwgbGFiZWxGb250KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmUgOiBsYXlvdXQu
bGluZXMpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0
KTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUobGluZS5vcmlnaW4ueCgpLCBsYXlvdXQuYm91
bmRpbmdSZWN0LmhlaWdodCgpIC0gbGluZS5vcmlnaW4ueSgpIC0gbGlua0ltYWdlUGFkZGluZyk7
CisgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCAwLCAwKTsKKyAgICAgICAgQ1RMaW5lRHJhdyhsaW5lLmxpbmUuZ2V0KCksIGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCkpOwogICAgIH0KIAogICAgIFtkcmFnSW1hZ2UgdW5sb2NrRm9jdXNd
Owo=
</data>
<flag name="review"
          id="330293"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309124</attachid>
            <date>2017-05-04 18:21:33 -0700</date>
            <delta_ts>2017-05-04 18:46:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171701-20170504182131.patch</filename>
            <type>text/plain</type>
            <size>22175</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRhMTAxNzQ4Y2M5MDMy
ZmNhZTYwNmU3OGI3YWVlNTNiMzI5N2MxOC4uYjQzODZiMWJhYjBmNTkwZWQzODFhNWQ0ZjdiZmFk
Yzg3YjhiYmQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE3LTA1LTA0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIE1vZGVy
bml6ZSBpbWFnZSBmb3IgZHJhZ2dlZCBsaW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE3MDEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxOTc4
ODE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGFnZS9tYWMvRHJhZ0NvbnRyb2xsZXJNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Ry
YWdJbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRyYWdJbWFnZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6c2NhbGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzc29sdmVE
cmFnSW1hZ2VUb0ZyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZy
b21JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSW1hZ2VMYXlvdXQ6OkxpbmtJbWFnZUxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5rSW1hZ2VMYXlvdXQ6OmxheU91dFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGlua0ltYWdlTGF5b3V0OjphZGRMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6Zm9udEZy
b21OU0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FuVXNlRmFzdFJlbmRlcmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OndpZHRoV2l0aEZvbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZHJhd0F0UG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6ZHJhd0RvdWJsZWRBdFBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgSW1wcm92ZSB0aGUgZGVz
aWduIG9mIFVSTCBkcmFnIGltYWdlcy4KKyAgICAgICAgVGhlIG1hcmdpbnMgYXJlIGluY3JlYXNl
ZCwgdGhlIGJhY2tncm91bmQgaXMgbm93IHdoaXRlLCB0aGUgdGV4dCBpcworICAgICAgICBub3Qg
ZHJhd24gZG91YmxlZC11cCwgdGhlIHRpdGxlIHdpbGwgbm93IHdyYXAgdG8gdHdvIGxpbmVzLCBh
bmQgdGhlCisgICAgICAgIGRvbWFpbiBuYW1lIHdpbGwgYXBwZWFyIHNpbXBsaWZpZWQgYW5kIGRl
LXB1bnljb2RlZC4KKworICAgICAgICBNdWNoIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0ZXh0
IHBhaW50aW5nIGlzIGJvcnJvd2VkIGZyb20KKyAgICAgICAgPGF0dGFjaG1lbnQ+IGZvciBub3cs
IGJ1dCB3ZSBzaG91bGQgZmlndXJlIG91dCBob3cgdG8gZ2VuZXJhbGl6ZQorICAgICAgICBpdCBm
b3IgVUktbGlrZSBwYXJ0cyBvZiBXZWJLaXQgaW4gdGhlIGZ1dHVyZS4KKwogMjAxNy0wNS0wMiAg
R3dhbmcgWW9vbiBId2FuZyAgPHlvb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBSZWN5
Y2xlIHRleHR1cmVzIHdoaWxlIGhhbmRsaW5nIHRpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCmluZGV4IDI0NzNhNDM1ZWQ5MGUwNDQxZjk1M2RlNWQ1
MDE3Nzg3ZDM3ZWVkNWIuLmUwOGI1NTg5MjQ3ODVjMzU3MjJmMjg1ZDQ4OTM4NmVhN2Q5ZmVmNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCkBAIC01
MCw3ICs1MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgaW50IERyYWdDb250
cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gLTI7Citjb25zdCBpbnQgRHJhZ0NvbnRyb2xs
ZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQgPSAtMTA7CiAKIGNvbnN0IGludCBEcmFnQ29udHJvbGxl
cjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAwICogMTUwMDsKIGNvbnN0IGludCBEcmFnQ29u
dHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gNzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRHJhZ0ltYWdlTWFjLm1tCmluZGV4IDJhOGRmZDNmNWU3YTllNDEwMGU4ODg1ZjQzNGQ5
N2JkNzlhNzdiMzEuLjc2NTIyZmUyYWI5YmZiNDc3YjdmNDZhZDk3MWI4NDhkYTIxZGViYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQpAQCAtMzEsMjIg
KzMxLDI5IEBACiAjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgogI2ltcG9ydCAiQ29yZUdyYXBoaWNz
U1BJLmgiCiAjaW1wb3J0ICJFbGVtZW50LmgiCisjaW1wb3J0ICJGbG9hdFJvdW5kZWRSZWN0Lmgi
CiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAj
aW1wb3J0ICJGb250U2VsZWN0b3IuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKLSNpbXBvcnQgIlVSTC5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcuaCIK
ICNpbXBvcnQgIlN0cmluZ1RydW5jYXRvci5oIgogI2ltcG9ydCAiVGV4dEluZGljYXRvci5oIgog
I2ltcG9ydCAiVGV4dFJ1bi5oIgorI2ltcG9ydCAiVVJMLmgiCiAjaW1wb3J0IDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KIAorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAx
MjAwCisjaW1wb3J0IDxMaW5rUHJlc2VudGF0aW9uL0xQTlNVUkxFeHRyYXMuaD4KK1NPRlRfTElO
S19QUklWQVRFX0ZSQU1FV09SSyhMaW5rUHJlc2VudGF0aW9uKQorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSW50U2l6ZSBkcmFnSW1hZ2VTaXplKFJldGFpblB0cjxOU0ltYWdlPiBp
bWFnZSkKIHsKLSAgICByZXR1cm4gKEludFNpemUpW2ltYWdlLmdldCgpIHNpemVdOworICAgIHJl
dHVybiAoSW50U2l6ZSlbaW1hZ2Ugc2l6ZV07CiB9CiAKIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKFJl
dGFpblB0cjxOU0ltYWdlPikKQEAgLTU3LDE1ICs2NCwxNSBAQCB2b2lkIGRlbGV0ZURyYWdJbWFn
ZShSZXRhaW5QdHI8TlNJbWFnZT4pCiAKIFJldGFpblB0cjxOU0ltYWdlPiBzY2FsZURyYWdJbWFn
ZShSZXRhaW5QdHI8TlNJbWFnZT4gaW1hZ2UsIEZsb2F0U2l6ZSBzY2FsZSkKIHsKLSAgICBOU1Np
emUgb3JpZ2luYWxTaXplID0gW2ltYWdlLmdldCgpIHNpemVdOworICAgIE5TU2l6ZSBvcmlnaW5h
bFNpemUgPSBbaW1hZ2Ugc2l6ZV07CiAgICAgTlNTaXplIG5ld1NpemUgPSBOU01ha2VTaXplKChv
cmlnaW5hbFNpemUud2lkdGggKiBzY2FsZS53aWR0aCgpKSwgKG9yaWdpbmFsU2l6ZS5oZWlnaHQg
KiBzY2FsZS5oZWlnaHQoKSkpOwogICAgIG5ld1NpemUud2lkdGggPSByb3VuZGYobmV3U2l6ZS53
aWR0aCk7CiAgICAgbmV3U2l6ZS5oZWlnaHQgPSByb3VuZGYobmV3U2l6ZS5oZWlnaHQpOwogI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgIFtpbWFnZS5nZXQoKSBzZXRTY2Fs
ZXNXaGVuUmVzaXplZDpZRVNdOworICAgIFtpbWFnZSBzZXRTY2FsZXNXaGVuUmVzaXplZDpZRVNd
OwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotICAgIFtpbWFnZS5nZXQoKSBzZXRTaXpl
Om5ld1NpemVdOworICAgIFtpbWFnZSBzZXRTaXplOm5ld1NpemVdOwogICAgIHJldHVybiBpbWFn
ZTsKIH0KICAgICAKQEAgLTc0LDExICs4MSwxMSBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gZGlzc29s
dmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKFJldGFpblB0cjxOU0ltYWdlPiBpbWFnZSwgZmxvYXQgZAog
ICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZXRhaW5QdHI8TlNJ
bWFnZT4gZGlzc29sdmVkSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhT
aXplOltpbWFnZS5nZXQoKSBzaXplXV0pOworICAgIFJldGFpblB0cjxOU0ltYWdlPiBkaXNzb2x2
ZWRJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6W2ltYWdlIHNp
emVdXSk7CiAgICAgCi0gICAgW2Rpc3NvbHZlZEltYWdlLmdldCgpIGxvY2tGb2N1c107Ci0gICAg
W2ltYWdlLmdldCgpIGRyYXdBdFBvaW50Ok5TWmVyb1BvaW50IGZyb21SZWN0Ok5TTWFrZVJlY3Qo
MCwgMCwgW2ltYWdlIHNpemVdLndpZHRoLCBbaW1hZ2Ugc2l6ZV0uaGVpZ2h0KSBvcGVyYXRpb246
TlNDb21wb3NpdGluZ09wZXJhdGlvbkNvcHkgZnJhY3Rpb246ZGVsdGFdOwotICAgIFtkaXNzb2x2
ZWRJbWFnZS5nZXQoKSB1bmxvY2tGb2N1c107CisgICAgW2Rpc3NvbHZlZEltYWdlIGxvY2tGb2N1
c107CisgICAgW2ltYWdlIGRyYXdBdFBvaW50Ok5TWmVyb1BvaW50IGZyb21SZWN0Ok5TTWFrZVJl
Y3QoMCwgMCwgW2ltYWdlIHNpemVdLndpZHRoLCBbaW1hZ2Ugc2l6ZV0uaGVpZ2h0KSBvcGVyYXRp
b246TlNDb21wb3NpdGluZ09wZXJhdGlvbkNvcHkgZnJhY3Rpb246ZGVsdGFdOworICAgIFtkaXNz
b2x2ZWRJbWFnZSB1bmxvY2tGb2N1c107CiAKICAgICByZXR1cm4gZGlzc29sdmVkSW1hZ2U7CiB9
CkBAIC0xMDAsNyArMTA3LDcgQEAgUmV0YWluUHRyPE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUZy
b21JbWFnZShJbWFnZSogaW1hZ2UsIEltYWdlT3JpZW50YXRpb25EZXNjcmkKICAgICAgICAgICAg
IEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIHNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24pOwogCiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gcm90YXRlZERyYWdJbWFnZSA9
IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6KE5TU2l6ZSkoc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbildKTsKLSAgICAgICAgICAgIFtyb3RhdGVkRHJhZ0ltYWdlLmdldCgp
IGxvY2tGb2N1c107CisgICAgICAgICAgICBbcm90YXRlZERyYWdJbWFnZSBsb2NrRm9jdXNdOwog
CiAgICAgICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIHVzZXMgdG9wLWxlZnQgY29vcmRpbmF0
ZXMsIG5lZWQgdG8gZmxpcCB0byBib3R0b20tbGVmdCwgYXBwbHkuLi4KICAgICAgICAgICAgIENH
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0
aW9uKDAsIGRlc3RSZWN0LmhlaWdodCgpKTsKQEAgLTExNSwxOSArMTIyLDE5IEBAIFJldGFpblB0
cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpCiAgICAgICAgICAgICB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9y
bVNjYWxlKHRyYW5zZm9ybSwgMSwgLTEpOwogCiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNBZmZp
bmVUcmFuc2Zvcm0+IGNvY29hVHJhbnNmb3JtID0gYWRvcHROUyhbW05TQWZmaW5lVHJhbnNmb3Jt
IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBbY29jb2FUcmFuc2Zvcm0uZ2V0KCkgc2V0VHJh
bnNmb3JtU3RydWN0OiooTlNBZmZpbmVUcmFuc2Zvcm1TdHJ1Y3QqKSZ0cmFuc2Zvcm1dOwotICAg
ICAgICAgICAgW2NvY29hVHJhbnNmb3JtLmdldCgpIGNvbmNhdF07CisgICAgICAgICAgICBbY29j
b2FUcmFuc2Zvcm0gc2V0VHJhbnNmb3JtU3RydWN0OiooTlNBZmZpbmVUcmFuc2Zvcm1TdHJ1Y3Qq
KSZ0cmFuc2Zvcm1dOworICAgICAgICAgICAgW2NvY29hVHJhbnNmb3JtIGNvbmNhdF07CiAKICAg
ICAgICAgICAgIFtpbWFnZS0+c25hcHNob3ROU0ltYWdlKCkgZHJhd0luUmVjdDpkZXN0UmVjdCBm
cm9tUmVjdDpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkgb3Bl
cmF0aW9uOk5TQ29tcG9zaXRpbmdPcGVyYXRpb25Tb3VyY2VPdmVyIGZyYWN0aW9uOjEuMF07CiAK
LSAgICAgICAgICAgIFtyb3RhdGVkRHJhZ0ltYWdlLmdldCgpIHVubG9ja0ZvY3VzXTsKKyAgICAg
ICAgICAgIFtyb3RhdGVkRHJhZ0ltYWdlIHVubG9ja0ZvY3VzXTsKIAogICAgICAgICAgICAgcmV0
dXJuIHJvdGF0ZWREcmFnSW1hZ2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRvIGRyYWdJ
bWFnZSA9IGltYWdlLT5zbmFwc2hvdE5TSW1hZ2UoKTsKLSAgICBbZHJhZ0ltYWdlLmdldCgpIHNl
dFNpemU6KE5TU2l6ZSlzaXplXTsKKyAgICBbZHJhZ0ltYWdlIHNldFNpemU6KE5TU2l6ZSlzaXpl
XTsKICAgICByZXR1cm4gZHJhZ0ltYWdlOwogfQogICAgIApAQCAtMTQ3LDIwMCArMTU0LDE1MiBA
QCBSZXRhaW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlRmls
ZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbgogfQogCiAKLWNvbnN0IGZsb2F0IERyYWdMYWJlbEJv
cmRlclggPSA0OwotLy9LZWVwIGJvcmRlcl95IGluIHN5bmNoIHdpdGggRHJhZ0NvbnRyb2xsZXI6
OkxpbmtEcmFnQm9yZGVySW5zZXQKLWNvbnN0IGZsb2F0IERyYWdMYWJlbEJvcmRlclkgPSAyOwot
Y29uc3QgZmxvYXQgRHJhZ0xhYmVsUmFkaXVzID0gNTsKLWNvbnN0IGZsb2F0IExhYmVsQm9yZGVy
WU9mZnNldCA9IDI7Citjb25zdCBmbG9hdCBsaW5rSW1hZ2VQYWRkaW5nID0gMTA7IC8vIEtlZXAg
aW4gc3luYyB3aXRoIERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0LgorY29uc3Qg
ZmxvYXQgbGlua0ltYWdlRG9tYWluQmFzZWxpbmVUb1RpdGxlQmFzZWxpbmUgPSAxODsKK2NvbnN0
IGZsb2F0IGxpbmtJbWFnZUNvcm5lclJhZGl1cyA9IDU7Citjb25zdCBmbG9hdCBsaW5rSW1hZ2VN
YXhpbXVtV2lkdGggPSA0MDA7Citjb25zdCBmbG9hdCBsaW5rSW1hZ2VGb250U2l6ZSA9IDExOwor
Y29uc3QgQ0ZJbmRleCBsaW5rSW1hZ2VUaXRsZU1heGltdW1MaW5lQ291bnQgPSAyOwogCi1jb25z
dCBmbG9hdCBNaW5EcmFnTGFiZWxXaWR0aEJlZm9yZUNsaXAgPSAxMjA7Ci1jb25zdCBmbG9hdCBN
YXhEcmFnTGFiZWxXaWR0aCA9IDMyMDsKK3N0cnVjdCBMaW5rSW1hZ2VMYXlvdXQgeworICAgIExp
bmtJbWFnZUxheW91dChVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKIAotY29uc3QgZmxvYXQg
RHJhZ0xpbmtMYWJlbEZvbnRzaXplID0gMTE7Ci1jb25zdCBmbG9hdCBEcmFnTGlua1VybEZvbnRT
aXplID0gMTA7CisgICAgc3RydWN0IExhYmVsTGluZSB7CisgICAgICAgIEZsb2F0UG9pbnQgb3Jp
Z2luOworICAgICAgICBSZXRhaW5QdHI8Q1RMaW5lUmVmPiBsaW5lOworICAgIH07CisgICAgVmVj
dG9yPExhYmVsTGluZT4gbGluZXM7CiAKLS8vIEZJWE1FIC0gd2Ugc2hvdWxkIG1vdmUgYWxsIHRo
ZSBmdW5jdGlvbmFsaXR5IG9mIE5TU3RyaW5nIGV4dHJhcyB0byBXZWJDb3JlCi0gICAgCi1zdGF0
aWMgRm9udENhc2NhZGUmIGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9udCkKLXsKLSAgICBBU1NF
UlQoZm9udCk7Ci0gICAgc3RhdGljIE5TRm9udCAqY3VycmVudEZvbnQ7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEZvbnRDYXNjYWRlPiBjdXJyZW50UmVuZGVyZXI7Ci0gICAgCi0gICAgaWYg
KFtmb250IGlzRXF1YWw6Y3VycmVudEZvbnRdKQotICAgICAgICByZXR1cm4gY3VycmVudFJlbmRl
cmVyOwotICAgIGlmIChjdXJyZW50Rm9udCkKLSAgICAgICAgQ0ZSZWxlYXNlKGN1cnJlbnRGb250
KTsKLSAgICBjdXJyZW50Rm9udCA9IGZvbnQ7Ci0gICAgQ0ZSZXRhaW4oY3VycmVudEZvbnQpOwot
ICAgIGN1cnJlbnRSZW5kZXJlci5nZXQoKSA9IEZvbnRDYXNjYWRlKEZvbnRQbGF0Zm9ybURhdGEo
dG9DVEZvbnQoZm9udCksIFtmb250IHBvaW50U2l6ZV0pKTsKLSAgICByZXR1cm4gY3VycmVudFJl
bmRlcmVyOwotfQorICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7CiAKLXN0YXRpYyBib29sIGNh
blVzZUZhc3RSZW5kZXJlcihjb25zdCBVbmlDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rpb24oYnVmZmVy
W2ldKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgZGlyZWN0
aW9uID4gVV9PVEhFUl9ORVVUUkFMKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLXN0YXRpYyBmbG9hdCB3aWR0aFdpdGhGb250KE5T
U3RyaW5nICpzdHJpbmcsIE5TRm9udCAqZm9udCkKLXsKLSAgICBpZiAoIWZvbnQpCi0gICAgICAg
IHJldHVybiAwOworcHJpdmF0ZToKKyAgICB2b2lkIGFkZExpbmUoQ1RMaW5lUmVmLCBWZWN0b3I8
Q0dQb2ludD4mIG9yaWdpbnMsIENGSW5kZXggbGluZUluZGV4LCBDR0Zsb2F0IHgsIENHRmxvYXQm
IHksIENHRmxvYXQmIG1heGltdW1Vc2VkVGV4dFdpZHRoLCBib29sIGlzTGFzdExpbmUpOworfTsK
IAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKLSAgICBWZWN0b3I8VW5p
Q2hhciwgMjA0OD4gYnVmZmVyKGxlbmd0aCk7Ci0gICAgCi0gICAgW3N0cmluZyBnZXRDaGFyYWN0
ZXJzOmJ1ZmZlci5kYXRhKCldOwotICAgIAotICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVm
ZmVyLmRhdGEoKSwgbGVuZ3RoKSkgewotICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChG
b250UGxhdGZvcm1EYXRhKHRvQ1RGb250KGZvbnQpLCBbZm9udCBwb2ludFNpemVdKSk7Ci0gICAg
ICAgIFRleHRSdW4gcnVuKFN0cmluZ1ZpZXcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSk7Ci0gICAg
ICAgIHJldHVybiB3ZWJDb3JlRm9udC53aWR0aChydW4pOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gW3N0cmluZyBzaXplV2l0aEF0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOmZvbnQsIE5TRm9udEF0dHJpYnV0ZU5hbWUsIG5pbF1dLndpZHRoOwot
fQotICAgIAotc3RhdGljIHZvaWQgZHJhd0F0UG9pbnQoTlNTdHJpbmcgKnN0cmluZywgTlNQb2lu
dCBwb2ludCwgTlNGb250ICpmb250LCBOU0NvbG9yICp0ZXh0Q29sb3IpCitMaW5rSW1hZ2VMYXlv
dXQ6OkxpbmtJbWFnZUxheW91dChVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZVN0cmluZykK
IHsKLSAgICBpZiAoIWZvbnQpCi0gICAgICAgIHJldHVybjsKKyAgICBOU1N0cmluZyAqdGl0bGUg
PSBuc1N0cmluZ05pbElmRW1wdHkodGl0bGVTdHJpbmcpOworICAgIE5TVVJMICpjb2NvYVVSTCA9
IHVybDsKKyAgICBOU1N0cmluZyAqYWJzb2x1dGVVUkxTdHJpbmcgPSBbY29jb2FVUkwgYWJzb2x1
dGVTdHJpbmddOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOwotICAg
IFZlY3RvcjxVbmlDaGFyLCAyMDQ4PiBidWZmZXIobGVuZ3RoKTsKLSAgICAKLSAgICBbc3RyaW5n
IGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07Ci0gICAgCi0gICAgaWYgKGNhblVzZUZhc3RS
ZW5kZXJlcihidWZmZXIuZGF0YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIC8vIFRoZSBmb2xsb3dp
bmcgaXMgYSBoYWxmLWFzc2VkIGF0dGVtcHQgdG8gbWF0Y2ggQXBwS2l0J3Mgcm91bmRpbmcgcnVs
ZXMgZm9yIGRyYXdBdFBvaW50LgotICAgICAgICAvLyBJdCdzIHByb2JhYmx5IGluY29ycmVjdCBm
b3IgaGlnaCBEUEkuCi0gICAgICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcywgYmUgc3VyZSB0byB0
ZXN0IGFsbCB0aGUgdGV4dCBkcmF3biB0aGlzIHdheSBpbiBTYWZhcmksIGluY2x1ZGluZwotICAg
ICAgICAvLyB0aGUgc3RhdHVzIGJhciwgYm9va21hcmtzIGJhciwgdGFiIGJhciwgYW5kIGFjdGl2
aXR5IHdpbmRvdy4KLSAgICAgICAgcG9pbnQueSA9IENHQ2VpbGluZyhwb2ludC55KTsKLSAgICAg
ICAgCi0gICAgICAgIE5TR3JhcGhpY3NDb250ZXh0ICpuc0NvbnRleHQgPSBbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHRdOwotICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
c3RhdGljX2Nhc3Q8Q0dDb250ZXh0UmVmPihbbnNDb250ZXh0IGdyYXBoaWNzUG9ydF0pOwotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7ICAgIAotICAg
ICAgICAKLSAgICAgICAgLy8gU2FmYXJpIGRvZXNuJ3QgZmxpcCB0aGUgTlNHcmFwaGljc0NvbnRl
eHQgYmVmb3JlIGNhbGxpbmcgV2ViS2l0LCB5ZXQgV2ViQ29yZSByZXF1aXJlcyBhIGZsaXBwZWQg
Z3JhcGhpY3MgY29udGV4dC4KLSAgICAgICAgQk9PTCBmbGlwcGVkID0gW25zQ29udGV4dCBpc0Zs
aXBwZWRdOwotICAgICAgICBpZiAoIWZsaXBwZWQpCi0gICAgICAgICAgICBDR0NvbnRleHRTY2Fs
ZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKLQotICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9u
dChGb250UGxhdGZvcm1EYXRhKHRvQ1RGb250KGZvbnQpLCBbZm9udCBwb2ludFNpemVdKSwgQW50
aWFsaWFzZWQpOwotICAgICAgICBUZXh0UnVuIHJ1bihTdHJpbmdWaWV3KGJ1ZmZlci5kYXRhKCks
IGxlbmd0aCkpOwotCi0gICAgICAgIENHRmxvYXQgcmVkOwotICAgICAgICBDR0Zsb2F0IGdyZWVu
OwotICAgICAgICBDR0Zsb2F0IGJsdWU7Ci0gICAgICAgIENHRmxvYXQgYWxwaGE7Ci0gICAgICAg
IFtbdGV4dENvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3Bh
Y2VdIGdldFJlZDomcmVkIGdyZWVuOiZncmVlbiBibHVlOiZibHVlIGFscGhhOiZhbHBoYV07Ci0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVJHQkEocmVkICogMjU1LCBn
cmVlbiAqIDI1NSwgYmx1ZSAqIDI1NSwgYWxwaGEgKiAyNTUpKTsKLSAgICAgICAgCi0gICAgICAg
IHdlYkNvcmVGb250LmRyYXdUZXh0KGdyYXBoaWNzQ29udGV4dCwgcnVuLCBGbG9hdFBvaW50KHBv
aW50LngsIChmbGlwcGVkID8gcG9pbnQueSA6ICgtMSAqIHBvaW50LnkpKSkpOworI2lmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCisgICAgTGlua1ByZXNlbnRhdGlv
bkxpYnJhcnkoKTsKKyAgICBOU1N0cmluZyAqZG9tYWluID0gW2NvY29hVVJMIF9scF9zaW1wbGlm
aWVkRGlzcGxheVN0cmluZ107CisjZWxzZQorICAgIE5TU3RyaW5nICpkb21haW4gPSBhYnNvbHV0
ZVVSTFN0cmluZzsKKyNlbmRpZgorCisgICAgaWYgKFt0aXRsZSBpc0VxdWFsVG9TdHJpbmc6YWJz
b2x1dGVVUkxTdHJpbmddKQorICAgICAgICB0aXRsZSA9IG5pbDsKKworICAgIE5TRm9udCAqdGl0
bGVGb250ID0gW05TRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZTpsaW5rSW1hZ2VGb250U2l6ZV07
CisgICAgTlNGb250ICpkb21haW5Gb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOmxpbmtJ
bWFnZUZvbnRTaXplXTsKKworICAgIE5TQ29sb3IgKnRpdGxlQ29sb3IgPSBbTlNDb2xvciBsYWJl
bENvbG9yXTsKKyAgICBOU0NvbG9yICpkb21haW5Db2xvciA9IFtOU0NvbG9yIHNlY29uZGFyeUxh
YmVsQ29sb3JdOworCisgICAgQ0dGbG9hdCBtYXhpbXVtQXZhaWxhYmxlV2lkdGggPSBsaW5rSW1h
Z2VNYXhpbXVtV2lkdGggLSBsaW5rSW1hZ2VQYWRkaW5nICogMjsKKworICAgIENHRmxvYXQgY3Vy
cmVudFkgPSBsaW5rSW1hZ2VQYWRkaW5nOworICAgIENHRmxvYXQgbWF4aW11bVVzZWRUZXh0V2lk
dGggPSAwOworCisgICAgYXV0byBsYXlPdXRUZXh0ID0gW3RoaXMsIG1heGltdW1BdmFpbGFibGVX
aWR0aCwgJm1heGltdW1Vc2VkVGV4dFdpZHRoLCAmY3VycmVudFldIChOU1N0cmluZyAqdGV4dCwg
TlNDb2xvciAqY29sb3IsIE5TRm9udCAqZm9udCwgQ0ZJbmRleCBtYXhpbXVtTGluZXMsIENUTGlu
ZVRydW5jYXRpb25UeXBlIHRydW5jYXRpb25UeXBlKSB7CisgICAgICAgIE5TRGljdGlvbmFyeSAq
dGV4dEF0dHJpYnV0ZXMgPSBAeworICAgICAgICAgICAgKGlkKWtDVEZvbnRBdHRyaWJ1dGVOYW1l
OiBmb250LAorICAgICAgICAgICAgKGlkKWtDVEZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6
IGNvbG9yCisgICAgICAgIH07CisgICAgICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+
IGF0dHJpYnV0ZWRUZXh0ID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6dGV4dCBhdHRyaWJ1dGVzOnRleHRBdHRyaWJ1dGVzXSk7CisgICAgICAgIFJl
dGFpblB0cjxDVEZyYW1lc2V0dGVyUmVmPiB0ZXh0RnJhbWVzZXR0ZXIgPSBhZG9wdENGKENURnJh
bWVzZXR0ZXJDcmVhdGVXaXRoQXR0cmlidXRlZFN0cmluZygoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVm
KWF0dHJpYnV0ZWRUZXh0LmdldCgpKSk7CisKKyAgICAgICAgQ0ZSYW5nZSBmaXRSYW5nZTsKKyAg
ICAgICAgQ0dTaXplIHRleHRTaXplID0gQ1RGcmFtZXNldHRlclN1Z2dlc3RGcmFtZVNpemVXaXRo
Q29uc3RyYWludHModGV4dEZyYW1lc2V0dGVyLmdldCgpLCBDRlJhbmdlTWFrZSgwLCAwKSwgbnVs
bHB0ciwgQ0dTaXplTWFrZShtYXhpbXVtQXZhaWxhYmxlV2lkdGgsIENHRkxPQVRfTUFYKSwgJmZp
dFJhbmdlKTsKKworICAgICAgICBSZXRhaW5QdHI8Q0dQYXRoUmVmPiB0ZXh0UGF0aCA9IGFkb3B0
Q0YoQ0dQYXRoQ3JlYXRlV2l0aFJlY3QoQ0dSZWN0TWFrZSgwLCAwLCB0ZXh0U2l6ZS53aWR0aCwg
dGV4dFNpemUuaGVpZ2h0KSwgbnVsbHB0cikpOworICAgICAgICBSZXRhaW5QdHI8Q1RGcmFtZVJl
Zj4gdGV4dEZyYW1lID0gYWRvcHRDRihDVEZyYW1lc2V0dGVyQ3JlYXRlRnJhbWUodGV4dEZyYW1l
c2V0dGVyLmdldCgpLCBmaXRSYW5nZSwgdGV4dFBhdGguZ2V0KCksIG51bGxwdHIpKTsKKworICAg
ICAgICBDRkFycmF5UmVmIGN0TGluZXMgPSBDVEZyYW1lR2V0TGluZXModGV4dEZyYW1lLmdldCgp
KTsKKyAgICAgICAgQ0ZJbmRleCBsaW5lQ291bnQgPSBDRkFycmF5R2V0Q291bnQoY3RMaW5lcyk7
CisgICAgICAgIGlmICghbGluZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IFZlY3RvcjxDR1BvaW50PiBvcmlnaW5zKGxpbmVDb3VudCk7CisgICAgICAgIENURnJhbWVHZXRM
aW5lT3JpZ2lucyh0ZXh0RnJhbWUuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIDApLCBvcmlnaW5zLmRh
dGEoKSk7CisKKyAgICAgICAgLy8gTGF5IG91dCBhbmQgcmVjb3JkIHRoZSBmaXJzdCAobWF4aW11
bUxpbmVzIC0gMSkgbGluZXMuCisgICAgICAgIENGSW5kZXggbGluZUluZGV4ID0gMDsKKyAgICAg
ICAgZm9yICg7IGxpbmVJbmRleCA8IHN0ZDo6bWluKG1heGltdW1MaW5lcyAtIDEsIGxpbmVDb3Vu
dCk7ICsrbGluZUluZGV4KSB7CisgICAgICAgICAgICBDVExpbmVSZWYgbGluZSA9IChDVExpbmVS
ZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjdExpbmVzLCBsaW5lSW5kZXgpOworICAgICAgICAg
ICAgYWRkTGluZShsaW5lLCBvcmlnaW5zLCBsaW5lSW5kZXgsIGxpbmtJbWFnZVBhZGRpbmcsIGN1
cnJlbnRZLCBtYXhpbXVtVXNlZFRleHRXaWR0aCwgbGluZUluZGV4ID09IGxpbmVDb3VudCAtIDEp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbmVJbmRleCA9PSBsaW5lQ291bnQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2UgaGFkIHRleHQgdGhhdCBkaWRuJ3QgZml0
IGluIHRoZSBmaXJzdCAobWF4aW11bUxpbmVzIC0gMSkgbGluZXMuCisgICAgICAgIC8vIENvbWJp
bmUgaXQgaW50byBvbmUgbGFzdCBsaW5lLCBhbmQgdHJ1bmNhdGUgaXQuCisgICAgICAgIENUTGlu
ZVJlZiBmaXJzdFJlbWFpbmluZ0xpbmUgPSAoQ1RMaW5lUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoY3RMaW5lcywgbGluZUluZGV4KTsKKyAgICAgICAgQ0ZJbmRleCByZW1haW5pbmdSYW5nZVN0
YXJ0ID0gQ1RMaW5lR2V0U3RyaW5nUmFuZ2UoZmlyc3RSZW1haW5pbmdMaW5lKS5sb2NhdGlvbjsK
KyAgICAgICAgTlNSYW5nZSByZW1haW5pbmdSYW5nZSA9IE5TTWFrZVJhbmdlKHJlbWFpbmluZ1Jh
bmdlU3RhcnQsIFthdHRyaWJ1dGVkVGV4dCBsZW5ndGhdIC0gcmVtYWluaW5nUmFuZ2VTdGFydCk7
CisgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmVtYWluaW5nU3RyaW5nID0gW2F0dHJpYnV0
ZWRUZXh0IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6cmVtYWluaW5nUmFuZ2VdOworICAg
ICAgICBSZXRhaW5QdHI8Q1RMaW5lUmVmPiByZW1haW5pbmdMaW5lID0gYWRvcHRDRihDVExpbmVD
cmVhdGVXaXRoQXR0cmlidXRlZFN0cmluZygoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmKXJlbWFpbmlu
Z1N0cmluZykpOworICAgICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBlbGxpcHNp
c1N0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOkAiXHUyMDI2IiBhdHRyaWJ1dGVzOnRleHRBdHRyaWJ1dGVzXSk7CisgICAgICAgIFJldGFp
blB0cjxDVExpbmVSZWY+IGVsbGlwc2lzTGluZSA9IGFkb3B0Q0YoQ1RMaW5lQ3JlYXRlV2l0aEF0
dHJpYnV0ZWRTdHJpbmcoKENGQXR0cmlidXRlZFN0cmluZ1JlZillbGxpcHNpc1N0cmluZy5nZXQo
KSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RMaW5lUmVmPiB0cnVuY2F0ZWRMaW5lID0gYWRvcHRD
RihDVExpbmVDcmVhdGVUcnVuY2F0ZWRMaW5lKHJlbWFpbmluZ0xpbmUuZ2V0KCksIG1heGltdW1B
dmFpbGFibGVXaWR0aCwgdHJ1bmNhdGlvblR5cGUsIGVsbGlwc2lzTGluZS5nZXQoKSkpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKCFmbGlwcGVkKQotICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVD
VE0oY2dDb250ZXh0LCAxLCAtMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIGdpdmVu
IHBvaW50IGlzIG9uIHRoZSBiYXNlbGluZS4KLSAgICAgICAgaWYgKFtbTlNWaWV3IGZvY3VzVmll
d10gaXNGbGlwcGVkXSkKLSAgICAgICAgICAgIHBvaW50LnkgLT0gW2ZvbnQgYXNjZW5kZXJdOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBwb2ludC55ICs9IFtmb250IGRlc2NlbmRlcl07Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgIFtzdHJpbmcgZHJhd0F0UG9pbnQ6cG9pbnQgd2l0aEF0
dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOmZvbnQs
IE5TRm9udEF0dHJpYnV0ZU5hbWUsIHRleHRDb2xvciwgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lLCBuaWxdXTsKLSAgICB9Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBkcmF3RG91YmxlZEF0
UG9pbnQoTlNTdHJpbmcgKnN0cmluZywgTlNQb2ludCB0ZXh0UG9pbnQsIE5TQ29sb3IgKnRvcENv
bG9yLCBOU0NvbG9yICpib3R0b21Db2xvciwgTlNGb250ICpmb250KQotewotICAgICAgICAvLyB0
dXJuIG9mZiBmb250IHNtb290aGluZyBzbyB0cmFuc2x1Y2VudCB0ZXh0IGRyYXdzIGNvcnJlY3Rs
eSAoUmFkYXIgMzExODQ1NSkKLSAgICAgICAgZHJhd0F0UG9pbnQoc3RyaW5nLCB0ZXh0UG9pbnQs
IGZvbnQsIGJvdHRvbUNvbG9yKTsKKyAgICAgICAgaWYgKCF0cnVuY2F0ZWRMaW5lKQorICAgICAg
ICAgICAgdHJ1bmNhdGVkTGluZSA9IHJlbWFpbmluZ0xpbmU7CiAgICAgICAgIAotICAgICAgICB0
ZXh0UG9pbnQueSArPSAxOwotICAgICAgICBkcmF3QXRQb2ludChzdHJpbmcsIHRleHRQb2ludCwg
Zm9udCwgdG9wQ29sb3IpOwotfQorICAgICAgICBhZGRMaW5lKHRydW5jYXRlZExpbmUuZ2V0KCks
IG9yaWdpbnMsIGxpbmVJbmRleCwgbGlua0ltYWdlUGFkZGluZywgY3VycmVudFksIG1heGltdW1V
c2VkVGV4dFdpZHRoLCB0cnVlKTsKKyAgICB9OwogCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlRm9yTGluayhFbGVtZW50JiwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFRleHRJ
bmRpY2F0b3JEYXRhJiwgRm9udFJlbmRlcmluZ01vZGUsIGZsb2F0KQotewotICAgIE5TU3RyaW5n
ICpsYWJlbCA9IG5zU3RyaW5nTmlsSWZFbXB0eSh0aXRsZSk7Ci0gICAgTlNVUkwgKmNvY29hVVJM
ID0gdXJsOwotICAgIE5TU3RyaW5nICp1cmxTdHJpbmcgPSBbY29jb2FVUkwgYWJzb2x1dGVTdHJp
bmddOworICAgIGlmICh0aXRsZSkKKyAgICAgICAgbGF5T3V0VGV4dCh0aXRsZSwgdGl0bGVDb2xv
ciwgdGl0bGVGb250LCBsaW5rSW1hZ2VUaXRsZU1heGltdW1MaW5lQ291bnQsIGtDVExpbmVUcnVu
Y2F0aW9uRW5kKTsKIAotICAgIEJPT0wgZHJhd1VSTFN0cmluZyA9IFlFUzsKLSAgICBCT09MIGNs
aXBVUkxTdHJpbmcgPSBOTzsKLSAgICBCT09MIGNsaXBMYWJlbFN0cmluZyA9IE5POworICAgIGlm
ICh0aXRsZSAmJiBkb21haW4pCisgICAgICAgIGN1cnJlbnRZICs9IGxpbmtJbWFnZURvbWFpbkJh
c2VsaW5lVG9UaXRsZUJhc2VsaW5lIC0gKGRvbWFpbkZvbnQuYXNjZW5kZXIgLSBkb21haW5Gb250
LmRlc2NlbmRlcik7CiAKLSAgICBpZiAoIWxhYmVsKSB7Ci0gICAgICAgIGRyYXdVUkxTdHJpbmcg
PSBOTzsKLSAgICAgICAgbGFiZWwgPSB1cmxTdHJpbmc7Ci0gICAgfQorICAgIGlmIChkb21haW4p
CisgICAgICAgIGxheU91dFRleHQoZG9tYWluLCBkb21haW5Db2xvciwgZG9tYWluRm9udCwgMSwg
a0NUTGluZVRydW5jYXRpb25NaWRkbGUpOwogCi0gICAgTlNGb250ICpsYWJlbEZvbnQgPSBbW05T
Rm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250OltOU0ZvbnQgc3lzdGVt
Rm9udE9mU2l6ZTpEcmFnTGlua0xhYmVsRm9udHNpemVdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSGF2ZVRyYWl0Ok5TQm9sZEZv
bnRNYXNrXTsKLSAgICBOU0ZvbnQgKnVybEZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6
RHJhZ0xpbmtVcmxGb250U2l6ZV07CisgICAgY3VycmVudFkgKz0gbGlua0ltYWdlUGFkZGluZzsK
IAotICAgIEFTU0VSVChsYWJlbEZvbnQpOwotICAgIEFTU0VSVCh1cmxGb250KTsKKyAgICBib3Vu
ZGluZ1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgbWF4aW11bVVzZWRUZXh0V2lkdGggKyBsaW5rSW1h
Z2VQYWRkaW5nICogMiwgY3VycmVudFkpOworfQogCi0gICAgTlNTaXplIGxhYmVsU2l6ZTsKLSAg
ICBsYWJlbFNpemUud2lkdGggPSB3aWR0aFdpdGhGb250KGxhYmVsLCBsYWJlbEZvbnQpOwotICAg
IGxhYmVsU2l6ZS5oZWlnaHQgPSBbbGFiZWxGb250IGFzY2VuZGVyXSAtIFtsYWJlbEZvbnQgZGVz
Y2VuZGVyXTsKLSAgICBpZiAobGFiZWxTaXplLndpZHRoID4gTWF4RHJhZ0xhYmVsV2lkdGgpewot
ICAgICAgICBsYWJlbFNpemUud2lkdGggPSBNYXhEcmFnTGFiZWxXaWR0aDsKLSAgICAgICAgY2xp
cExhYmVsU3RyaW5nID0gWUVTOwotICAgIH0KK3ZvaWQgTGlua0ltYWdlTGF5b3V0OjphZGRMaW5l
KENUTGluZVJlZiBjdExpbmUsIFZlY3RvcjxDR1BvaW50PiYgb3JpZ2lucywgQ0ZJbmRleCBsaW5l
SW5kZXgsIENHRmxvYXQgeCwgQ0dGbG9hdCYgeSwgQ0dGbG9hdCYgbWF4aW11bVVzZWRUZXh0V2lk
dGgsIGJvb2wgaXNMYXN0TGluZSkKK3sKKyAgICBDR1JlY3QgbGluZUJvdW5kcyA9IENUTGluZUdl
dEJvdW5kc1dpdGhPcHRpb25zKGN0TGluZSwgMCk7CisgICAgQ0dGbG9hdCB0cmFpbGluZ1doaXRl
c3BhY2VXaWR0aCA9IENUTGluZUdldFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKGN0TGluZSk7Cisg
ICAgQ0dGbG9hdCBsaW5lV2lkdGhJZ25vcmluZ1RyYWlsaW5nV2hpdGVzcGFjZSA9IGxpbmVCb3Vu
ZHMuc2l6ZS53aWR0aCAtIHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOworICAgIG1heGltdW1Vc2Vk
VGV4dFdpZHRoID0gc3RkOjptYXgobWF4aW11bVVzZWRUZXh0V2lkdGgsIGxpbmVXaWR0aElnbm9y
aW5nVHJhaWxpbmdXaGl0ZXNwYWNlKTsKIAotICAgIE5TU2l6ZSBpbWFnZVNpemU7Ci0gICAgaW1h
Z2VTaXplLndpZHRoID0gbGFiZWxTaXplLndpZHRoICsgRHJhZ0xhYmVsQm9yZGVyWCAqIDI7Ci0g
ICAgaW1hZ2VTaXplLmhlaWdodCA9IGxhYmVsU2l6ZS5oZWlnaHQgKyBEcmFnTGFiZWxCb3JkZXJZ
ICogMjsKLSAgICBpZiAoZHJhd1VSTFN0cmluZykgewotICAgICAgICBOU1NpemUgdXJsU3RyaW5n
U2l6ZTsKLSAgICAgICAgdXJsU3RyaW5nU2l6ZS53aWR0aCA9IHdpZHRoV2l0aEZvbnQodXJsU3Ry
aW5nLCB1cmxGb250KTsKLSAgICAgICAgdXJsU3RyaW5nU2l6ZS5oZWlnaHQgPSBbdXJsRm9udCBh
c2NlbmRlcl0gLSBbdXJsRm9udCBkZXNjZW5kZXJdOwotICAgICAgICBpbWFnZVNpemUuaGVpZ2h0
ICs9IHVybFN0cmluZ1NpemUuaGVpZ2h0OwotICAgICAgICBpZiAodXJsU3RyaW5nU2l6ZS53aWR0
aCA+IE1heERyYWdMYWJlbFdpZHRoKSB7Ci0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBz
dGQ6Om1heChNYXhEcmFnTGFiZWxXaWR0aCArIERyYWdMYWJlbEJvcmRlclkgKiAyLCBNaW5EcmFn
TGFiZWxXaWR0aEJlZm9yZUNsaXApOwotICAgICAgICAgICAgY2xpcFVSTFN0cmluZyA9IFlFUzsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBzdGQ6Om1heChs
YWJlbFNpemUud2lkdGggKyBEcmFnTGFiZWxCb3JkZXJYICogMiwgdXJsU3RyaW5nU2l6ZS53aWR0
aCArIERyYWdMYWJlbEJvcmRlclggKiAyKTsKLSAgICB9Ci0gICAgTlNJbWFnZSAqZHJhZ0ltYWdl
ID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOiBpbWFnZVNpemVdIGF1dG9yZWxlYXNl
XTsKLSAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107CisgICAgaWYgKGxpbmVJbmRleCkKKyAgICAg
ICAgeSArPSBvcmlnaW5zW2xpbmVJbmRleCAtIDFdLnkgLSBvcmlnaW5zW2xpbmVJbmRleF0ueTsK
IAotICAgIFtbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6IDAuN2YgZ3JlZW46IDAuN2YgYmx1
ZTogMC43ZiBhbHBoYTogMC44Zl0gc2V0XTsKKyAgICBMaW5rSW1hZ2VMYXlvdXQ6OkxhYmVsTGlu
ZSBsaW5lOworICAgIGxpbmUubGluZSA9IGN0TGluZTsKKyAgICBsaW5lLm9yaWdpbiA9IEZsb2F0
UG9pbnQoeCwgeSk7CisgICAgbGluZXMuYXBwZW5kKGxpbmUpOwogCi0gICAgLy8gRHJhZyBhIHJl
Y3RhbmdsZSB3aXRoIHJvdW5kZWQgY29ybmVycwotICAgIE5TQmV6aWVyUGF0aCAqcGF0aCA9IFtO
U0JlemllclBhdGggYmV6aWVyUGF0aF07Ci0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhP
dmFsSW5SZWN0OiBOU01ha2VSZWN0KDAsIDAsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJl
bFJhZGl1cyAqIDIpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6
IE5TTWFrZVJlY3QoMCwgaW1hZ2VTaXplLmhlaWdodCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIERy
YWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKLSAgICBbcGF0aCBhcHBl
bmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0g
RHJhZ0xhYmVsUmFkaXVzICogMiwgaW1hZ2VTaXplLmhlaWdodCAtIERyYWdMYWJlbFJhZGl1cyAq
IDIsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKLSAgICBbcGF0
aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndp
ZHRoIC0gRHJhZ0xhYmVsUmFkaXVzICogMiwgMCwgRHJhZ0xhYmVsUmFkaXVzICogMiwgRHJhZ0xh
YmVsUmFkaXVzICogMildOworICAgIGlmIChpc0xhc3RMaW5lKQorICAgICAgICB5ICs9IGxpbmVC
b3VuZHMuc2l6ZS5oZWlnaHQ7Cit9CiAKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJl
Y3Q6IE5TTWFrZVJlY3QoRHJhZ0xhYmVsUmFkaXVzLCAwLCBpbWFnZVNpemUud2lkdGggLSBEcmFn
TGFiZWxSYWRpdXMgKiAyLCBpbWFnZVNpemUuaGVpZ2h0KV07Ci0gICAgW3BhdGggYXBwZW5kQmV6
aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KDAsIERyYWdMYWJlbFJhZGl1cywgRHJhZ0xhYmVs
UmFkaXVzICsgMTAsIGltYWdlU2l6ZS5oZWlnaHQgLSAyICogRHJhZ0xhYmVsUmFkaXVzKV07Ci0g
ICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53
aWR0aCAtIERyYWdMYWJlbFJhZGl1cyAtIDIwLCBEcmFnTGFiZWxSYWRpdXMsIERyYWdMYWJlbFJh
ZGl1cyArIDIwLCBpbWFnZVNpemUuaGVpZ2h0IC0gMiAqIERyYWdMYWJlbFJhZGl1cyldOwotICAg
IFtwYXRoIGZpbGxdOworRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVu
dCYsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBUZXh0SW5kaWNhdG9yRGF0YSYsIEZv
bnRSZW5kZXJpbmdNb2RlLCBmbG9hdCkKK3sKKyAgICBMaW5rSW1hZ2VMYXlvdXQgbGF5b3V0KHVy
bCwgdGl0bGUpOwogCi0gICAgTlNDb2xvciAqdG9wQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhE
ZXZpY2VXaGl0ZTowLjBmIGFscGhhOjAuNzVmXTsKLSAgICBOU0NvbG9yICpib3R0b21Db2xvciA9
IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjEuMGYgYWxwaGE6MC41Zl07Ci0gICAgaWYg
KGRyYXdVUkxTdHJpbmcgJiYgdXJsRm9udCkgewotICAgICAgICBpZiAoY2xpcFVSTFN0cmluZykK
LSAgICAgICAgICAgIHVybFN0cmluZyA9IFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUo
dXJsU3RyaW5nLCBpbWFnZVNpemUud2lkdGggLSAoRHJhZ0xhYmVsQm9yZGVyWCAqIDIpLCBmb250
RnJvbU5TRm9udCh1cmxGb250KSk7CisgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdJbWFnZSA9
IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6bGF5b3V0LmJvdW5kaW5nUmVj
dC5zaXplKCldKTsKKyAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107CiAKLSAgICAgICBkcmF3RG91
YmxlZEF0UG9pbnQodXJsU3RyaW5nLCBOU01ha2VQb2ludChEcmFnTGFiZWxCb3JkZXJYLCBEcmFn
TGFiZWxCb3JkZXJZIC0gW3VybEZvbnQgZGVzY2VuZGVyXSksIHRvcENvbG9yLCBib3R0b21Db2xv
ciwgdXJsRm9udCk7Ci0gICAgfQorICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KChDR0NvbnRl
eHRSZWYpW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XS5ncmFwaGljc1BvcnQpOwor
ICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJvdW5k
aW5nUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVzKSks
IENvbG9yOjp3aGl0ZSk7CiAKLSAgICBpZiAobGFiZWxGb250KSB7Ci0gICAgICAgIGlmIChjbGlw
TGFiZWxTdHJpbmcpCi0gICAgICAgICAgICBsYWJlbCA9IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRU
cnVuY2F0ZShsYWJlbCwgaW1hZ2VTaXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclggKiAyKSwg
Zm9udEZyb21OU0ZvbnQobGFiZWxGb250KSk7Ci0gICAgICAgIGRyYXdEb3VibGVkQXRQb2ludChs
YWJlbCwgTlNNYWtlUG9pbnQoRHJhZ0xhYmVsQm9yZGVyWCwgaW1hZ2VTaXplLmhlaWdodCAtIExh
YmVsQm9yZGVyWU9mZnNldCAtIFtsYWJlbEZvbnQgcG9pbnRTaXplXSksIHRvcENvbG9yLCBib3R0
b21Db2xvciwgbGFiZWxGb250KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmUgOiBsYXlvdXQu
bGluZXMpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0
KTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUobGluZS5vcmlnaW4ueCgpLCBsYXlvdXQuYm91
bmRpbmdSZWN0LmhlaWdodCgpIC0gbGluZS5vcmlnaW4ueSgpIC0gbGlua0ltYWdlUGFkZGluZyk7
CisgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCAwLCAwKTsKKyAgICAgICAgQ1RMaW5lRHJhdyhsaW5lLmxpbmUuZ2V0KCksIGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCkpOwogICAgIH0KIAogICAgIFtkcmFnSW1hZ2UgdW5sb2NrRm9jdXNd
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309126</attachid>
            <date>2017-05-04 18:46:20 -0700</date>
            <delta_ts>2017-05-04 18:46:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171701-20170504184619.patch</filename>
            <type>text/plain</type>
            <size>27822</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTRhMTAxNzQ4Y2M5MDMy
ZmNhZTYwNmU3OGI3YWVlNTNiMzI5N2MxOC4uNWJjMmZiMDdlYmEyOGRhYzAxMDRmZmI3NWVhZTI3
ZDcyNDE3MzEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE3LTA1LTA0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIE1vZGVy
bml6ZSBpbWFnZSBmb3IgZHJhZ2dlZCBsaW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE3MDEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMxOTc4
ODE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICAqIHBh
Z2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9EcmFn
SW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpkcmFnSW1hZ2VTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OnNjYWxlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3NvbHZlRHJh
Z0ltYWdlVG9GcmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9t
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0ltYWdlTGF5b3V0OjpMaW5rSW1hZ2VMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6TGlua0ltYWdlTGF5b3V0OjpsYXlPdXRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmtJbWFnZUxheW91dDo6YWRkTGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRGcm9t
TlNGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNhblVzZUZhc3RSZW5kZXJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp3aWR0aFdpdGhGb250KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRyYXdBdFBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdEb3VibGVkQXRQb2ludCk6IERlbGV0ZWQuCisgICAgICAgIEltcHJvdmUgdGhlIGRlc2ln
biBvZiBVUkwgZHJhZyBpbWFnZXMuCisgICAgICAgIFRoZSBtYXJnaW5zIGFyZSBpbmNyZWFzZWQs
IHRoZSBiYWNrZ3JvdW5kIGlzIG5vdyB3aGl0ZSwgdGhlIHRleHQgaXMKKyAgICAgICAgbm90IGRy
YXduIGRvdWJsZWQtdXAsIHRoZSB0aXRsZSB3aWxsIG5vdyB3cmFwIHRvIHR3byBsaW5lcywgYW5k
IHRoZQorICAgICAgICBkb21haW4gbmFtZSB3aWxsIGFwcGVhciBzaW1wbGlmaWVkIGFuZCBkZS1w
dW55Y29kZWQuCisKKyAgICAgICAgTXVjaCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGV4dCBw
YWludGluZyBpcyBib3Jyb3dlZCBmcm9tCisgICAgICAgIDxhdHRhY2htZW50PiBmb3Igbm93LCBi
dXQgd2Ugc2hvdWxkIGZpZ3VyZSBvdXQgaG93IHRvIGdlbmVyYWxpemUKKyAgICAgICAgaXQgZm9y
IFVJLWxpa2UgcGFydHMgb2YgV2ViS2l0IGluIHRoZSBmdXR1cmUuCisKIDIwMTctMDUtMDIgIEd3
YW5nIFlvb24gSHdhbmcgIDx5b29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUmVjeWNs
ZSB0ZXh0dXJlcyB3aGlsZSBoYW5kbGluZyB0aWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU0NjgwYWEyMmMwNGEzZmNjZGY0
YWQ3MWM1NGQ4NWQ1MjQyYWU2MTcuLjIzNmJiMjEwNDg2ZjYyYWNjNTQzZWQwMWExNjBjYWYwMjhi
MDU1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTExODksNiArMTE4OSw3IEBACiAJCTJENDgxRjAyMTQ2QjVDNTUwMEFBNzgz
NCAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkQyRkMwNTUxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFk
ZUdlbmVyYXRlZEltYWdlLmggKi87IH07CiAJCTJENDgxRjAzMTQ2QjVDNjUwMEFBNzgzNCAvKiBH
cmFkaWVudEltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEMkZDMDU2MTQ2MENENkYwMDI2MzYzMyAvKiBHcmFkaWVudEltYWdlLmNwcCAqLzsg
fTsKIAkJMkQ0ODFGMDQxNDZCNUM2QjAwQUE3ODM0IC8qIEdyYWRpZW50SW1hZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEMkZDMDU3MTQ2MENENkYw
MDI2MzYzMyAvKiBHcmFkaWVudEltYWdlLmggKi87IH07CisJCTJENEFFQTAzMUVCQzBGRTkwMEM0
QTkzQSAvKiBMaW5rUHJlc2VudGF0aW9uU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDRBRUEwMjFFQkMwRkU5MDBDNEE5M0EgLyogTGlua1ByZXNl
bnRhdGlvblNQSS5oICovOyB9OwogCQkyRDRGOTZGNTFBMUVDQzI0MDA5OEJGODggLyogVGV4dElu
ZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRDRGOTZGMTFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5jcHAgKi87IH07CiAJ
CTJENEY5NkY2MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDRGOTZGMjFBMUVDQzI0MDA5OEJG
ODggLyogVGV4dEluZGljYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTJENEY5NkY3MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9y
V2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RDRGOTZGMzFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvcldpbmRvdy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NzA5LDYgKzg3MTAs
NyBAQAogCQkyRDQxM0Y2MDFBMTg3QTNGMDA0MUE1MjEgLyogTG9va3VwU1BJLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvb2t1cFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDQ2RjA0RDE3Qjk2RkJEMDA1NjQ3RjAgLyogSW50UG9pbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50UG9pbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyRDQ2RjA0RjE3Qjk2RkQyMDA1NjQ3RjAgLyogSW50U2l6ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRTaXplLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ0QUVBMDIxRUJDMEZFOTAwQzRBOTNBIC8qIExp
bmtQcmVzZW50YXRpb25TUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlu
a1ByZXNlbnRhdGlvblNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDRGOTZG
MTFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0SW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkQ0Rjk2RjIxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEluZGljYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDRGOTZGMzFBMUVDQzI0MDA5OEJGODggLyogVGV4dElu
ZGljYXRvcldpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0SW5k
aWNhdG9yV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODY5MCw2ICsx
ODY5Miw3IEBACiAJCQkJNDRERUY2NDIxQTZGRjkyNzAwRDQ1RUVDIC8qIElPUmV0dXJuU1BJLmgg
Ki8sCiAJCQkJNDRERkY2NDIxQTZGRjkyNzAwRDQ1RUVDIC8qIElPU3VyZmFjZVNQSS5oICovLAog
CQkJCTQ0RUZGNjQyMUE2RkY5MjcwMEQ0NUVFQyAvKiBJT1R5cGVzU1BJLmggKi8sCisJCQkJMkQ0
QUVBMDIxRUJDMEZFOTAwQzRBOTNBIC8qIExpbmtQcmVzZW50YXRpb25TUEkuaCAqLywKIAkJCQlD
RTEyNTI0RTFBMUE3OEQyMDA4NjQ0ODAgLyogTWFjaFZNU1BJLmggKi8sCiAJCQkJQTE5RDkzNDQx
QTlGRUM3MjAwQjQ2QzI0IC8qIE5FRmlsdGVyU291cmNlU1BJLmggKi8sCiAJCQkJOUJCNzM3NjQx
QjQxQzAzNTAwQUUxM0VCIC8qIE5TQXR0cmlidXRlZFN0cmluZ1NQSS5oICovLApAQCAtMjg1MzUs
NiArMjg1MzgsNyBAQAogCQkJCUNFMTI1MjQ5MUExNkMzQkMwMDg2NDQ4MCAvKiBNb2JpbGVHZXN0
YWx0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYyQjAxMTE4MjA1NDA2MDBGMkI0MjQgLyog
TW9ja0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3MjQxRTAzQkY4MTAwRTIzNUEyIC8q
IE1vY2tDRE1GYWN0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkyRDRBRUEwMzFFQkMwRkU5MDBD
NEE5M0EgLyogTGlua1ByZXNlbnRhdGlvblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3
MjAxRTAzQkY2RjAwRTIzNUEyIC8qIE1vY2tDRE1GYWN0b3J5LmlkbCBpbiBIZWFkZXJzICovLAog
CQkJCTUxMDU4QUUwMUQ2N0MyMjkwMDlBNTM4QyAvKiBNb2NrR2FtZXBhZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTEwNThBRTIxRDY3QzIyOTAwOUE1MzhDIC8qIE1vY2tHYW1lcGFkUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRHJh
Z0NvbnRyb2xsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxl
ck1hYy5tbQppbmRleCAyNDczYTQzNWVkOTBlMDQ0MWY5NTNkZTVkNTAxNzc4N2QzN2VlZDViLi5l
MDhiNTU4OTI0Nzg1YzM1NzIyZjI4NWQ0ODkzODZlYTdkOWZlZjU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbQpAQCAtNTAsNyArNTAsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdC
b3JkZXJJbnNldCA9IC0yOworY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRl
ckluc2V0ID0gLTEwOwogCiBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6Ok1heE9yaWdpbmFsSW1h
Z2VBcmVhID0gMTUwMCAqIDE1MDA7CiBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29u
UmlnaHRJbnNldCA9IDc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RHJhZ0ltYWdlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1h
Yy5tbQppbmRleCAyYThkZmQzZjVlN2E5ZTQxMDBlODg4NWY0MzRkOTdiZDc5YTc3YjMxLi43YzFk
ZDllOGU5NmRkNjEwMWZhNjFkYmI3NzBiOTcwYWQ1Y2JkZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KQEAgLTMxLDIyICszMSwyOSBAQAogI2ltcG9y
dCAiQml0bWFwSW1hZ2UuaCIKICNpbXBvcnQgIkNvcmVHcmFwaGljc1NQSS5oIgogI2ltcG9ydCAi
RWxlbWVudC5oIgorI2ltcG9ydCAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2ltcG9ydCAiRm9udENh
c2NhZGUuaCIKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiRm9udFNlbGVj
dG9yLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkltYWdlLmgiCi0j
aW1wb3J0ICJVUkwuaCIKKyNpbXBvcnQgIkxpbmtQcmVzZW50YXRpb25TUEkuaCIKKyNpbXBvcnQg
IlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0ICJTdHJpbmdUcnVuY2F0b3IuaCIKICNpbXBvcnQgIlRl
eHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIlRleHRSdW4uaCIKKyNpbXBvcnQgIlVSTC5oIgogI2lt
cG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwMTIwMAorU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKExpbmtQcmVz
ZW50YXRpb24pCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJbnRTaXplIGRyYWdJ
bWFnZVNpemUoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlKQogewotICAgIHJldHVybiAoSW50U2l6
ZSlbaW1hZ2UuZ2V0KCkgc2l6ZV07CisgICAgcmV0dXJuIChJbnRTaXplKVtpbWFnZSBzaXplXTsK
IH0KIAogdm9pZCBkZWxldGVEcmFnSW1hZ2UoUmV0YWluUHRyPE5TSW1hZ2U+KQpAQCAtNTcsMTUg
KzY0LDE1IEBAIHZvaWQgZGVsZXRlRHJhZ0ltYWdlKFJldGFpblB0cjxOU0ltYWdlPikKIAogUmV0
YWluUHRyPE5TSW1hZ2U+IHNjYWxlRHJhZ0ltYWdlKFJldGFpblB0cjxOU0ltYWdlPiBpbWFnZSwg
RmxvYXRTaXplIHNjYWxlKQogewotICAgIE5TU2l6ZSBvcmlnaW5hbFNpemUgPSBbaW1hZ2UuZ2V0
KCkgc2l6ZV07CisgICAgTlNTaXplIG9yaWdpbmFsU2l6ZSA9IFtpbWFnZSBzaXplXTsKICAgICBO
U1NpemUgbmV3U2l6ZSA9IE5TTWFrZVNpemUoKG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNjYWxlLndp
ZHRoKCkpLCAob3JpZ2luYWxTaXplLmhlaWdodCAqIHNjYWxlLmhlaWdodCgpKSk7CiAgICAgbmV3
U2l6ZS53aWR0aCA9IHJvdW5kZihuZXdTaXplLndpZHRoKTsKICAgICBuZXdTaXplLmhlaWdodCA9
IHJvdW5kZihuZXdTaXplLmhlaWdodCk7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAog
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlv
bnMiCi0gICAgW2ltYWdlLmdldCgpIHNldFNjYWxlc1doZW5SZXNpemVkOllFU107CisgICAgW2lt
YWdlIHNldFNjYWxlc1doZW5SZXNpemVkOllFU107CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCi0gICAgW2ltYWdlLmdldCgpIHNldFNpemU6bmV3U2l6ZV07CisgICAgW2ltYWdlIHNldFNp
emU6bmV3U2l6ZV07CiAgICAgcmV0dXJuIGltYWdlOwogfQogICAgIApAQCAtNzQsMTEgKzgxLDEx
IEBAIFJldGFpblB0cjxOU0ltYWdlPiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oUmV0YWlu
UHRyPE5TSW1hZ2U+IGltYWdlLCBmbG9hdCBkCiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIFJldGFpblB0cjxOU0ltYWdlPiBkaXNzb2x2ZWRJbWFnZSA9IGFkb3B0
TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6W2ltYWdlLmdldCgpIHNpemVdXSk7Cisg
ICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRpc3NvbHZlZEltYWdlID0gYWRvcHROUyhbW05TSW1hZ2Ug
YWxsb2NdIGluaXRXaXRoU2l6ZTpbaW1hZ2Ugc2l6ZV1dKTsKICAgICAKLSAgICBbZGlzc29sdmVk
SW1hZ2UuZ2V0KCkgbG9ja0ZvY3VzXTsKLSAgICBbaW1hZ2UuZ2V0KCkgZHJhd0F0UG9pbnQ6TlNa
ZXJvUG9pbnQgZnJvbVJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBbaW1hZ2Ugc2l6ZV0ud2lkdGgsIFtp
bWFnZSBzaXplXS5oZWlnaHQpIG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uQ29weSBm
cmFjdGlvbjpkZWx0YV07Ci0gICAgW2Rpc3NvbHZlZEltYWdlLmdldCgpIHVubG9ja0ZvY3VzXTsK
KyAgICBbZGlzc29sdmVkSW1hZ2UgbG9ja0ZvY3VzXTsKKyAgICBbaW1hZ2UgZHJhd0F0UG9pbnQ6
TlNaZXJvUG9pbnQgZnJvbVJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBbaW1hZ2Ugc2l6ZV0ud2lkdGgs
IFtpbWFnZSBzaXplXS5oZWlnaHQpIG9wZXJhdGlvbjpOU0NvbXBvc2l0aW5nT3BlcmF0aW9uQ29w
eSBmcmFjdGlvbjpkZWx0YV07CisgICAgW2Rpc3NvbHZlZEltYWdlIHVubG9ja0ZvY3VzXTsKIAog
ICAgIHJldHVybiBkaXNzb2x2ZWRJbWFnZTsKIH0KQEAgLTEwMCw3ICsxMDcsNyBAQCBSZXRhaW5Q
dHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgSW1hZ2VP
cmllbnRhdGlvbkRlc2NyaQogICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9p
bnQoKSwgc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik7CiAKICAgICAgICAgICAgIFJldGFpblB0
cjxOU0ltYWdlPiByb3RhdGVkRHJhZ0ltYWdlID0gYWRvcHROUyhbW05TSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoU2l6ZTooTlNTaXplKShzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKV0pOwotICAgICAg
ICAgICAgW3JvdGF0ZWREcmFnSW1hZ2UuZ2V0KCkgbG9ja0ZvY3VzXTsKKyAgICAgICAgICAgIFty
b3RhdGVkRHJhZ0ltYWdlIGxvY2tGb2N1c107CiAKICAgICAgICAgICAgIC8vIEltYWdlT3JpZW50
YXRpb24gdXNlcyB0b3AtbGVmdCBjb29yZGluYXRlcywgbmVlZCB0byBmbGlwIHRvIGJvdHRvbS1s
ZWZ0LCBhcHBseS4uLgogICAgICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
Q0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oMCwgZGVzdFJlY3QuaGVpZ2h0KCkpOwpA
QCAtMTE1LDE5ICsxMjIsMTkgQEAgUmV0YWluUHRyPE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUZy
b21JbWFnZShJbWFnZSogaW1hZ2UsIEltYWdlT3JpZW50YXRpb25EZXNjcmkKICAgICAgICAgICAg
IHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtU2NhbGUodHJhbnNmb3JtLCAxLCAtMSk7CiAK
ICAgICAgICAgICAgIFJldGFpblB0cjxOU0FmZmluZVRyYW5zZm9ybT4gY29jb2FUcmFuc2Zvcm0g
PSBhZG9wdE5TKFtbTlNBZmZpbmVUcmFuc2Zvcm0gYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAg
IFtjb2NvYVRyYW5zZm9ybS5nZXQoKSBzZXRUcmFuc2Zvcm1TdHJ1Y3Q6KihOU0FmZmluZVRyYW5z
Zm9ybVN0cnVjdCopJnRyYW5zZm9ybV07Ci0gICAgICAgICAgICBbY29jb2FUcmFuc2Zvcm0uZ2V0
KCkgY29uY2F0XTsKKyAgICAgICAgICAgIFtjb2NvYVRyYW5zZm9ybSBzZXRUcmFuc2Zvcm1TdHJ1
Y3Q6KihOU0FmZmluZVRyYW5zZm9ybVN0cnVjdCopJnRyYW5zZm9ybV07CisgICAgICAgICAgICBb
Y29jb2FUcmFuc2Zvcm0gY29uY2F0XTsKIAogICAgICAgICAgICAgW2ltYWdlLT5zbmFwc2hvdE5T
SW1hZ2UoKSBkcmF3SW5SZWN0OmRlc3RSZWN0IGZyb21SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSBvcGVyYXRpb246TlNDb21wb3NpdGluZ09wZXJhdGlv
blNvdXJjZU92ZXIgZnJhY3Rpb246MS4wXTsKIAotICAgICAgICAgICAgW3JvdGF0ZWREcmFnSW1h
Z2UuZ2V0KCkgdW5sb2NrRm9jdXNdOworICAgICAgICAgICAgW3JvdGF0ZWREcmFnSW1hZ2UgdW5s
b2NrRm9jdXNdOwogCiAgICAgICAgICAgICByZXR1cm4gcm90YXRlZERyYWdJbWFnZTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIGF1dG8gZHJhZ0ltYWdlID0gaW1hZ2UtPnNuYXBzaG90TlNJbWFn
ZSgpOwotICAgIFtkcmFnSW1hZ2UuZ2V0KCkgc2V0U2l6ZTooTlNTaXplKXNpemVdOworICAgIFtk
cmFnSW1hZ2Ugc2V0U2l6ZTooTlNTaXplKXNpemVdOwogICAgIHJldHVybiBkcmFnSW1hZ2U7CiB9
CiAgICAgCkBAIC0xNDcsMjAwICsxNTQsMTUyIEBAIFJldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVE
cmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVuCiB9
CiAKIAotY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWCA9IDQ7Ci0vL0tlZXAgYm9yZGVyX3kg
aW4gc3luY2ggd2l0aCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJbnNldAotY29uc3Qg
ZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWSA9IDI7Ci1jb25zdCBmbG9hdCBEcmFnTGFiZWxSYWRpdXMg
PSA1OwotY29uc3QgZmxvYXQgTGFiZWxCb3JkZXJZT2Zmc2V0ID0gMjsKK2NvbnN0IENHRmxvYXQg
bGlua0ltYWdlUGFkZGluZyA9IDEwOyAvLyBLZWVwIGluIHN5bmMgd2l0aCBEcmFnQ29udHJvbGxl
cjo6TGlua0RyYWdCb3JkZXJJbnNldC4KK2NvbnN0IENHRmxvYXQgbGlua0ltYWdlRG9tYWluQmFz
ZWxpbmVUb1RpdGxlQmFzZWxpbmUgPSAxODsKK2NvbnN0IENHRmxvYXQgbGlua0ltYWdlQ29ybmVy
UmFkaXVzID0gNTsKK2NvbnN0IENHRmxvYXQgbGlua0ltYWdlTWF4aW11bVdpZHRoID0gNDAwOwor
Y29uc3QgQ0dGbG9hdCBsaW5rSW1hZ2VGb250U2l6ZSA9IDExOworY29uc3QgQ0ZJbmRleCBsaW5r
SW1hZ2VUaXRsZU1heGltdW1MaW5lQ291bnQgPSAyOwogCi1jb25zdCBmbG9hdCBNaW5EcmFnTGFi
ZWxXaWR0aEJlZm9yZUNsaXAgPSAxMjA7Ci1jb25zdCBmbG9hdCBNYXhEcmFnTGFiZWxXaWR0aCA9
IDMyMDsKK3N0cnVjdCBMaW5rSW1hZ2VMYXlvdXQgeworICAgIExpbmtJbWFnZUxheW91dChVUkwm
LCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKIAotY29uc3QgZmxvYXQgRHJhZ0xpbmtMYWJlbEZvbnRz
aXplID0gMTE7Ci1jb25zdCBmbG9hdCBEcmFnTGlua1VybEZvbnRTaXplID0gMTA7CisgICAgc3Ry
dWN0IExhYmVsTGluZSB7CisgICAgICAgIEZsb2F0UG9pbnQgb3JpZ2luOworICAgICAgICBSZXRh
aW5QdHI8Q1RMaW5lUmVmPiBsaW5lOworICAgIH07CisgICAgVmVjdG9yPExhYmVsTGluZT4gbGlu
ZXM7CiAKLS8vIEZJWE1FIC0gd2Ugc2hvdWxkIG1vdmUgYWxsIHRoZSBmdW5jdGlvbmFsaXR5IG9m
IE5TU3RyaW5nIGV4dHJhcyB0byBXZWJDb3JlCi0gICAgCi1zdGF0aWMgRm9udENhc2NhZGUmIGZv
bnRGcm9tTlNGb250KE5TRm9udCAqZm9udCkKLXsKLSAgICBBU1NFUlQoZm9udCk7Ci0gICAgc3Rh
dGljIE5TRm9udCAqY3VycmVudEZvbnQ7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRD
YXNjYWRlPiBjdXJyZW50UmVuZGVyZXI7Ci0gICAgCi0gICAgaWYgKFtmb250IGlzRXF1YWw6Y3Vy
cmVudEZvbnRdKQotICAgICAgICByZXR1cm4gY3VycmVudFJlbmRlcmVyOwotICAgIGlmIChjdXJy
ZW50Rm9udCkKLSAgICAgICAgQ0ZSZWxlYXNlKGN1cnJlbnRGb250KTsKLSAgICBjdXJyZW50Rm9u
dCA9IGZvbnQ7Ci0gICAgQ0ZSZXRhaW4oY3VycmVudEZvbnQpOwotICAgIGN1cnJlbnRSZW5kZXJl
ci5nZXQoKSA9IEZvbnRDYXNjYWRlKEZvbnRQbGF0Zm9ybURhdGEodG9DVEZvbnQoZm9udCksIFtm
b250IHBvaW50U2l6ZV0pKTsKLSAgICByZXR1cm4gY3VycmVudFJlbmRlcmVyOwotfQorICAgIEZs
b2F0UmVjdCBib3VuZGluZ1JlY3Q7CiAKLXN0YXRpYyBib29sIGNhblVzZUZhc3RSZW5kZXJlcihj
b25zdCBVbmlDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB1bnNpZ25lZCBp
OwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hhckRpcmVj
dGlvbiBkaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rpb24oYnVmZmVyW2ldKTsKLSAgICAgICAgaWYg
KGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgZGlyZWN0aW9uID4gVV9PVEhFUl9ORVVU
UkFMKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLSAgICAKLXN0YXRpYyBmbG9hdCB3aWR0aFdpdGhGb250KE5TU3RyaW5nICpzdHJpbmcsIE5T
Rm9udCAqZm9udCkKLXsKLSAgICBpZiAoIWZvbnQpCi0gICAgICAgIHJldHVybiAwOworcHJpdmF0
ZToKKyAgICB2b2lkIGFkZExpbmUoQ1RMaW5lUmVmLCBWZWN0b3I8Q0dQb2ludD4mIG9yaWdpbnMs
IENGSW5kZXggbGluZUluZGV4LCBDR0Zsb2F0IHgsIENHRmxvYXQmIHksIENHRmxvYXQmIG1heGlt
dW1Vc2VkVGV4dFdpZHRoLCBib29sIGlzTGFzdExpbmUpOworfTsKIAotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IFtzdHJpbmcgbGVuZ3RoXTsKLSAgICBWZWN0b3I8VW5pQ2hhciwgMjA0OD4gYnVmZmVy
KGxlbmd0aCk7Ci0gICAgCi0gICAgW3N0cmluZyBnZXRDaGFyYWN0ZXJzOmJ1ZmZlci5kYXRhKCld
OwotICAgIAotICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVmZmVyLmRhdGEoKSwgbGVuZ3Ro
KSkgewotICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRhKHRv
Q1RGb250KGZvbnQpLCBbZm9udCBwb2ludFNpemVdKSk7Ci0gICAgICAgIFRleHRSdW4gcnVuKFN0
cmluZ1ZpZXcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKSk7Ci0gICAgICAgIHJldHVybiB3ZWJDb3Jl
Rm9udC53aWR0aChydW4pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gW3N0cmluZyBzaXplV2l0
aEF0dHJpYnV0ZXM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOmZv
bnQsIE5TRm9udEF0dHJpYnV0ZU5hbWUsIG5pbF1dLndpZHRoOwotfQotICAgIAotc3RhdGljIHZv
aWQgZHJhd0F0UG9pbnQoTlNTdHJpbmcgKnN0cmluZywgTlNQb2ludCBwb2ludCwgTlNGb250ICpm
b250LCBOU0NvbG9yICp0ZXh0Q29sb3IpCitMaW5rSW1hZ2VMYXlvdXQ6OkxpbmtJbWFnZUxheW91
dChVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZVN0cmluZykKIHsKLSAgICBpZiAoIWZvbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICBOU1N0cmluZyAqdGl0bGUgPSBuc1N0cmluZ05pbElmRW1w
dHkodGl0bGVTdHJpbmcpOworICAgIE5TVVJMICpjb2NvYVVSTCA9IHVybDsKKyAgICBOU1N0cmlu
ZyAqYWJzb2x1dGVVUkxTdHJpbmcgPSBbY29jb2FVUkwgYWJzb2x1dGVTdHJpbmddOwogCi0gICAg
dW5zaWduZWQgbGVuZ3RoID0gW3N0cmluZyBsZW5ndGhdOwotICAgIFZlY3RvcjxVbmlDaGFyLCAy
MDQ4PiBidWZmZXIobGVuZ3RoKTsKLSAgICAKLSAgICBbc3RyaW5nIGdldENoYXJhY3RlcnM6YnVm
ZmVyLmRhdGEoKV07Ci0gICAgCi0gICAgaWYgKGNhblVzZUZhc3RSZW5kZXJlcihidWZmZXIuZGF0
YSgpLCBsZW5ndGgpKSB7Ci0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBoYWxmLWFzc2Vk
IGF0dGVtcHQgdG8gbWF0Y2ggQXBwS2l0J3Mgcm91bmRpbmcgcnVsZXMgZm9yIGRyYXdBdFBvaW50
LgotICAgICAgICAvLyBJdCdzIHByb2JhYmx5IGluY29ycmVjdCBmb3IgaGlnaCBEUEkuCi0gICAg
ICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcywgYmUgc3VyZSB0byB0ZXN0IGFsbCB0aGUgdGV4dCBk
cmF3biB0aGlzIHdheSBpbiBTYWZhcmksIGluY2x1ZGluZwotICAgICAgICAvLyB0aGUgc3RhdHVz
IGJhciwgYm9va21hcmtzIGJhciwgdGFiIGJhciwgYW5kIGFjdGl2aXR5IHdpbmRvdy4KLSAgICAg
ICAgcG9pbnQueSA9IENHQ2VpbGluZyhwb2ludC55KTsKLSAgICAgICAgCi0gICAgICAgIE5TR3Jh
cGhpY3NDb250ZXh0ICpuc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRl
eHRdOwotICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dDb250
ZXh0UmVmPihbbnNDb250ZXh0IGdyYXBoaWNzUG9ydF0pOwotICAgICAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7ICAgIAotICAgICAgICAKLSAgICAgICAgLy8g
U2FmYXJpIGRvZXNuJ3QgZmxpcCB0aGUgTlNHcmFwaGljc0NvbnRleHQgYmVmb3JlIGNhbGxpbmcg
V2ViS2l0LCB5ZXQgV2ViQ29yZSByZXF1aXJlcyBhIGZsaXBwZWQgZ3JhcGhpY3MgY29udGV4dC4K
LSAgICAgICAgQk9PTCBmbGlwcGVkID0gW25zQ29udGV4dCBpc0ZsaXBwZWRdOwotICAgICAgICBp
ZiAoIWZsaXBwZWQpCi0gICAgICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEs
IC0xKTsKLQotICAgICAgICBGb250Q2FzY2FkZSB3ZWJDb3JlRm9udChGb250UGxhdGZvcm1EYXRh
KHRvQ1RGb250KGZvbnQpLCBbZm9udCBwb2ludFNpemVdKSwgQW50aWFsaWFzZWQpOwotICAgICAg
ICBUZXh0UnVuIHJ1bihTdHJpbmdWaWV3KGJ1ZmZlci5kYXRhKCksIGxlbmd0aCkpOwotCi0gICAg
ICAgIENHRmxvYXQgcmVkOwotICAgICAgICBDR0Zsb2F0IGdyZWVuOwotICAgICAgICBDR0Zsb2F0
IGJsdWU7Ci0gICAgICAgIENHRmxvYXQgYWxwaGE7Ci0gICAgICAgIFtbdGV4dENvbG9yIGNvbG9y
VXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdIGdldFJlZDomcmVkIGdy
ZWVuOiZncmVlbiBibHVlOiZibHVlIGFscGhhOiZhbHBoYV07Ci0gICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXRGaWxsQ29sb3IobWFrZVJHQkEocmVkICogMjU1LCBncmVlbiAqIDI1NSwgYmx1ZSAq
IDI1NSwgYWxwaGEgKiAyNTUpKTsKLSAgICAgICAgCi0gICAgICAgIHdlYkNvcmVGb250LmRyYXdU
ZXh0KGdyYXBoaWNzQ29udGV4dCwgcnVuLCBGbG9hdFBvaW50KHBvaW50LngsIChmbGlwcGVkID8g
cG9pbnQueSA6ICgtMSAqIHBvaW50LnkpKSkpOworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTAxMjAwCisgICAgTGlua1ByZXNlbnRhdGlvbkxpYnJhcnkoKTsKKyAgICBO
U1N0cmluZyAqZG9tYWluID0gW2NvY29hVVJMIF9scF9zaW1wbGlmaWVkRGlzcGxheVN0cmluZ107
CisjZWxzZQorICAgIE5TU3RyaW5nICpkb21haW4gPSBhYnNvbHV0ZVVSTFN0cmluZzsKKyNlbmRp
ZgorCisgICAgaWYgKFt0aXRsZSBpc0VxdWFsVG9TdHJpbmc6YWJzb2x1dGVVUkxTdHJpbmddKQor
ICAgICAgICB0aXRsZSA9IG5pbDsKKworICAgIE5TRm9udCAqdGl0bGVGb250ID0gW05TRm9udCBi
b2xkU3lzdGVtRm9udE9mU2l6ZTpsaW5rSW1hZ2VGb250U2l6ZV07CisgICAgTlNGb250ICpkb21h
aW5Gb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOmxpbmtJbWFnZUZvbnRTaXplXTsKKwor
ICAgIE5TQ29sb3IgKnRpdGxlQ29sb3IgPSBbTlNDb2xvciBsYWJlbENvbG9yXTsKKyAgICBOU0Nv
bG9yICpkb21haW5Db2xvciA9IFtOU0NvbG9yIHNlY29uZGFyeUxhYmVsQ29sb3JdOworCisgICAg
Q0dGbG9hdCBtYXhpbXVtQXZhaWxhYmxlV2lkdGggPSBsaW5rSW1hZ2VNYXhpbXVtV2lkdGggLSBs
aW5rSW1hZ2VQYWRkaW5nICogMjsKKworICAgIENHRmxvYXQgY3VycmVudFkgPSBsaW5rSW1hZ2VQ
YWRkaW5nOworICAgIENHRmxvYXQgbWF4aW11bVVzZWRUZXh0V2lkdGggPSAwOworCisgICAgYXV0
byBidWlsZExpbmVzID0gW3RoaXMsIG1heGltdW1BdmFpbGFibGVXaWR0aCwgJm1heGltdW1Vc2Vk
VGV4dFdpZHRoLCAmY3VycmVudFldIChOU1N0cmluZyAqdGV4dCwgTlNDb2xvciAqY29sb3IsIE5T
Rm9udCAqZm9udCwgQ0ZJbmRleCBtYXhpbXVtTGluZXMsIENUTGluZVRydW5jYXRpb25UeXBlIHRy
dW5jYXRpb25UeXBlKSB7CisgICAgICAgIE5TRGljdGlvbmFyeSAqdGV4dEF0dHJpYnV0ZXMgPSBA
eworICAgICAgICAgICAgKGlkKWtDVEZvbnRBdHRyaWJ1dGVOYW1lOiBmb250LAorICAgICAgICAg
ICAgKGlkKWtDVEZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6IGNvbG9yCisgICAgICAgIH07
CisgICAgICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRUZXh0ID0g
YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dCBh
dHRyaWJ1dGVzOnRleHRBdHRyaWJ1dGVzXSk7CisgICAgICAgIFJldGFpblB0cjxDVEZyYW1lc2V0
dGVyUmVmPiB0ZXh0RnJhbWVzZXR0ZXIgPSBhZG9wdENGKENURnJhbWVzZXR0ZXJDcmVhdGVXaXRo
QXR0cmlidXRlZFN0cmluZygoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmKWF0dHJpYnV0ZWRUZXh0Lmdl
dCgpKSk7CisKKyAgICAgICAgQ0ZSYW5nZSBmaXRSYW5nZTsKKyAgICAgICAgQ0dTaXplIHRleHRT
aXplID0gQ1RGcmFtZXNldHRlclN1Z2dlc3RGcmFtZVNpemVXaXRoQ29uc3RyYWludHModGV4dEZy
YW1lc2V0dGVyLmdldCgpLCBDRlJhbmdlTWFrZSgwLCAwKSwgbnVsbHB0ciwgQ0dTaXplTWFrZSht
YXhpbXVtQXZhaWxhYmxlV2lkdGgsIENHRkxPQVRfTUFYKSwgJmZpdFJhbmdlKTsKKworICAgICAg
ICBSZXRhaW5QdHI8Q0dQYXRoUmVmPiB0ZXh0UGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlV2l0
aFJlY3QoQ0dSZWN0TWFrZSgwLCAwLCB0ZXh0U2l6ZS53aWR0aCwgdGV4dFNpemUuaGVpZ2h0KSwg
bnVsbHB0cikpOworICAgICAgICBSZXRhaW5QdHI8Q1RGcmFtZVJlZj4gdGV4dEZyYW1lID0gYWRv
cHRDRihDVEZyYW1lc2V0dGVyQ3JlYXRlRnJhbWUodGV4dEZyYW1lc2V0dGVyLmdldCgpLCBmaXRS
YW5nZSwgdGV4dFBhdGguZ2V0KCksIG51bGxwdHIpKTsKKworICAgICAgICBDRkFycmF5UmVmIGN0
TGluZXMgPSBDVEZyYW1lR2V0TGluZXModGV4dEZyYW1lLmdldCgpKTsKKyAgICAgICAgQ0ZJbmRl
eCBsaW5lQ291bnQgPSBDRkFycmF5R2V0Q291bnQoY3RMaW5lcyk7CisgICAgICAgIGlmICghbGlu
ZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxDR1BvaW50PiBv
cmlnaW5zKGxpbmVDb3VudCk7CisgICAgICAgIENURnJhbWVHZXRMaW5lT3JpZ2lucyh0ZXh0RnJh
bWUuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIDApLCBvcmlnaW5zLmRhdGEoKSk7CisKKyAgICAgICAg
Ly8gTGF5IG91dCBhbmQgcmVjb3JkIHRoZSBmaXJzdCAobWF4aW11bUxpbmVzIC0gMSkgbGluZXMu
CisgICAgICAgIENGSW5kZXggbGluZUluZGV4ID0gMDsKKyAgICAgICAgZm9yICg7IGxpbmVJbmRl
eCA8IHN0ZDo6bWluKG1heGltdW1MaW5lcyAtIDEsIGxpbmVDb3VudCk7ICsrbGluZUluZGV4KSB7
CisgICAgICAgICAgICBDVExpbmVSZWYgbGluZSA9IChDVExpbmVSZWYpQ0ZBcnJheUdldFZhbHVl
QXRJbmRleChjdExpbmVzLCBsaW5lSW5kZXgpOworICAgICAgICAgICAgYWRkTGluZShsaW5lLCBv
cmlnaW5zLCBsaW5lSW5kZXgsIGxpbmtJbWFnZVBhZGRpbmcsIGN1cnJlbnRZLCBtYXhpbXVtVXNl
ZFRleHRXaWR0aCwgbGluZUluZGV4ID09IGxpbmVDb3VudCAtIDEpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGxpbmVJbmRleCA9PSBsaW5lQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgLy8gV2UgaGFkIHRleHQgdGhhdCBkaWRuJ3QgZml0IGluIHRoZSBmaXJzdCAobWF4
aW11bUxpbmVzIC0gMSkgbGluZXMuCisgICAgICAgIC8vIENvbWJpbmUgaXQgaW50byBvbmUgbGFz
dCBsaW5lLCBhbmQgdHJ1bmNhdGUgaXQuCisgICAgICAgIENUTGluZVJlZiBmaXJzdFJlbWFpbmlu
Z0xpbmUgPSAoQ1RMaW5lUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY3RMaW5lcywgbGluZUlu
ZGV4KTsKKyAgICAgICAgQ0ZJbmRleCByZW1haW5pbmdSYW5nZVN0YXJ0ID0gQ1RMaW5lR2V0U3Ry
aW5nUmFuZ2UoZmlyc3RSZW1haW5pbmdMaW5lKS5sb2NhdGlvbjsKKyAgICAgICAgTlNSYW5nZSBy
ZW1haW5pbmdSYW5nZSA9IE5TTWFrZVJhbmdlKHJlbWFpbmluZ1JhbmdlU3RhcnQsIFthdHRyaWJ1
dGVkVGV4dCBsZW5ndGhdIC0gcmVtYWluaW5nUmFuZ2VTdGFydCk7CisgICAgICAgIE5TQXR0cmli
dXRlZFN0cmluZyAqcmVtYWluaW5nU3RyaW5nID0gW2F0dHJpYnV0ZWRUZXh0IGF0dHJpYnV0ZWRT
dWJzdHJpbmdGcm9tUmFuZ2U6cmVtYWluaW5nUmFuZ2VdOworICAgICAgICBSZXRhaW5QdHI8Q1RM
aW5lUmVmPiByZW1haW5pbmdMaW5lID0gYWRvcHRDRihDVExpbmVDcmVhdGVXaXRoQXR0cmlidXRl
ZFN0cmluZygoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmKXJlbWFpbmluZ1N0cmluZykpOworICAgICAg
ICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBlbGxpcHNpc1N0cmluZyA9IGFkb3B0TlMo
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiXHUyMDI2IiBhdHRy
aWJ1dGVzOnRleHRBdHRyaWJ1dGVzXSk7CisgICAgICAgIFJldGFpblB0cjxDVExpbmVSZWY+IGVs
bGlwc2lzTGluZSA9IGFkb3B0Q0YoQ1RMaW5lQ3JlYXRlV2l0aEF0dHJpYnV0ZWRTdHJpbmcoKENG
QXR0cmlidXRlZFN0cmluZ1JlZillbGxpcHNpc1N0cmluZy5nZXQoKSkpOworICAgICAgICBSZXRh
aW5QdHI8Q1RMaW5lUmVmPiB0cnVuY2F0ZWRMaW5lID0gYWRvcHRDRihDVExpbmVDcmVhdGVUcnVu
Y2F0ZWRMaW5lKHJlbWFpbmluZ0xpbmUuZ2V0KCksIG1heGltdW1BdmFpbGFibGVXaWR0aCwgdHJ1
bmNhdGlvblR5cGUsIGVsbGlwc2lzTGluZS5nZXQoKSkpOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFmbGlwcGVkKQotICAgICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAt
MSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIGdpdmVuIHBvaW50IGlzIG9uIHRoZSBi
YXNlbGluZS4KLSAgICAgICAgaWYgKFtbTlNWaWV3IGZvY3VzVmlld10gaXNGbGlwcGVkXSkKLSAg
ICAgICAgICAgIHBvaW50LnkgLT0gW2ZvbnQgYXNjZW5kZXJdOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBwb2ludC55ICs9IFtmb250IGRlc2NlbmRlcl07Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgIFtzdHJpbmcgZHJhd0F0UG9pbnQ6cG9pbnQgd2l0aEF0dHJpYnV0ZXM6W05TRGljdGlv
bmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOmZvbnQsIE5TRm9udEF0dHJpYnV0ZU5h
bWUsIHRleHRDb2xvciwgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLCBuaWxdXTsKLSAg
ICB9Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBkcmF3RG91YmxlZEF0UG9pbnQoTlNTdHJpbmcgKnN0
cmluZywgTlNQb2ludCB0ZXh0UG9pbnQsIE5TQ29sb3IgKnRvcENvbG9yLCBOU0NvbG9yICpib3R0
b21Db2xvciwgTlNGb250ICpmb250KQotewotICAgICAgICAvLyB0dXJuIG9mZiBmb250IHNtb290
aGluZyBzbyB0cmFuc2x1Y2VudCB0ZXh0IGRyYXdzIGNvcnJlY3RseSAoUmFkYXIgMzExODQ1NSkK
LSAgICAgICAgZHJhd0F0UG9pbnQoc3RyaW5nLCB0ZXh0UG9pbnQsIGZvbnQsIGJvdHRvbUNvbG9y
KTsKKyAgICAgICAgaWYgKCF0cnVuY2F0ZWRMaW5lKQorICAgICAgICAgICAgdHJ1bmNhdGVkTGlu
ZSA9IHJlbWFpbmluZ0xpbmU7CiAgICAgICAgIAotICAgICAgICB0ZXh0UG9pbnQueSArPSAxOwot
ICAgICAgICBkcmF3QXRQb2ludChzdHJpbmcsIHRleHRQb2ludCwgZm9udCwgdG9wQ29sb3IpOwot
fQorICAgICAgICBhZGRMaW5lKHRydW5jYXRlZExpbmUuZ2V0KCksIG9yaWdpbnMsIGxpbmVJbmRl
eCwgbGlua0ltYWdlUGFkZGluZywgY3VycmVudFksIG1heGltdW1Vc2VkVGV4dFdpZHRoLCB0cnVl
KTsKKyAgICB9OwogCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50
JiwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIFRleHRJbmRpY2F0b3JEYXRhJiwgRm9u
dFJlbmRlcmluZ01vZGUsIGZsb2F0KQotewotICAgIE5TU3RyaW5nICpsYWJlbCA9IG5zU3RyaW5n
TmlsSWZFbXB0eSh0aXRsZSk7Ci0gICAgTlNVUkwgKmNvY29hVVJMID0gdXJsOwotICAgIE5TU3Ry
aW5nICp1cmxTdHJpbmcgPSBbY29jb2FVUkwgYWJzb2x1dGVTdHJpbmddOworICAgIGlmICh0aXRs
ZSkKKyAgICAgICAgYnVpbGRMaW5lcyh0aXRsZSwgdGl0bGVDb2xvciwgdGl0bGVGb250LCBsaW5r
SW1hZ2VUaXRsZU1heGltdW1MaW5lQ291bnQsIGtDVExpbmVUcnVuY2F0aW9uRW5kKTsKIAotICAg
IEJPT0wgZHJhd1VSTFN0cmluZyA9IFlFUzsKLSAgICBCT09MIGNsaXBVUkxTdHJpbmcgPSBOTzsK
LSAgICBCT09MIGNsaXBMYWJlbFN0cmluZyA9IE5POworICAgIGlmICh0aXRsZSAmJiBkb21haW4p
CisgICAgICAgIGN1cnJlbnRZICs9IGxpbmtJbWFnZURvbWFpbkJhc2VsaW5lVG9UaXRsZUJhc2Vs
aW5lIC0gKGRvbWFpbkZvbnQuYXNjZW5kZXIgLSBkb21haW5Gb250LmRlc2NlbmRlcik7CiAKLSAg
ICBpZiAoIWxhYmVsKSB7Ci0gICAgICAgIGRyYXdVUkxTdHJpbmcgPSBOTzsKLSAgICAgICAgbGFi
ZWwgPSB1cmxTdHJpbmc7Ci0gICAgfQorICAgIGlmIChkb21haW4pCisgICAgICAgIGJ1aWxkTGlu
ZXMoZG9tYWluLCBkb21haW5Db2xvciwgZG9tYWluRm9udCwgMSwga0NUTGluZVRydW5jYXRpb25N
aWRkbGUpOwogCi0gICAgTlNGb250ICpsYWJlbEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVk
Rm9udE1hbmFnZXJdIGNvbnZlcnRGb250OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEcmFnTGlu
a0xhYmVsRm9udHNpemVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvSGF2ZVRyYWl0Ok5TQm9sZEZvbnRNYXNrXTsKLSAgICBOU0Zv
bnQgKnVybEZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6RHJhZ0xpbmtVcmxGb250U2l6
ZV07CisgICAgY3VycmVudFkgKz0gbGlua0ltYWdlUGFkZGluZzsKIAotICAgIEFTU0VSVChsYWJl
bEZvbnQpOwotICAgIEFTU0VSVCh1cmxGb250KTsKKyAgICBib3VuZGluZ1JlY3QgPSBGbG9hdFJl
Y3QoMCwgMCwgbWF4aW11bVVzZWRUZXh0V2lkdGggKyBsaW5rSW1hZ2VQYWRkaW5nICogMiwgY3Vy
cmVudFkpOworfQogCi0gICAgTlNTaXplIGxhYmVsU2l6ZTsKLSAgICBsYWJlbFNpemUud2lkdGgg
PSB3aWR0aFdpdGhGb250KGxhYmVsLCBsYWJlbEZvbnQpOwotICAgIGxhYmVsU2l6ZS5oZWlnaHQg
PSBbbGFiZWxGb250IGFzY2VuZGVyXSAtIFtsYWJlbEZvbnQgZGVzY2VuZGVyXTsKLSAgICBpZiAo
bGFiZWxTaXplLndpZHRoID4gTWF4RHJhZ0xhYmVsV2lkdGgpewotICAgICAgICBsYWJlbFNpemUu
d2lkdGggPSBNYXhEcmFnTGFiZWxXaWR0aDsKLSAgICAgICAgY2xpcExhYmVsU3RyaW5nID0gWUVT
OwotICAgIH0KK3ZvaWQgTGlua0ltYWdlTGF5b3V0OjphZGRMaW5lKENUTGluZVJlZiBjdExpbmUs
IFZlY3RvcjxDR1BvaW50PiYgb3JpZ2lucywgQ0ZJbmRleCBsaW5lSW5kZXgsIENHRmxvYXQgeCwg
Q0dGbG9hdCYgeSwgQ0dGbG9hdCYgbWF4aW11bVVzZWRUZXh0V2lkdGgsIGJvb2wgaXNMYXN0TGlu
ZSkKK3sKKyAgICBDR1JlY3QgbGluZUJvdW5kcyA9IENUTGluZUdldEJvdW5kc1dpdGhPcHRpb25z
KGN0TGluZSwgMCk7CisgICAgQ0dGbG9hdCB0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCA9IENUTGlu
ZUdldFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKGN0TGluZSk7CisgICAgQ0dGbG9hdCBsaW5lV2lk
dGhJZ25vcmluZ1RyYWlsaW5nV2hpdGVzcGFjZSA9IGxpbmVCb3VuZHMuc2l6ZS53aWR0aCAtIHRy
YWlsaW5nV2hpdGVzcGFjZVdpZHRoOworICAgIG1heGltdW1Vc2VkVGV4dFdpZHRoID0gc3RkOjpt
YXgobWF4aW11bVVzZWRUZXh0V2lkdGgsIGxpbmVXaWR0aElnbm9yaW5nVHJhaWxpbmdXaGl0ZXNw
YWNlKTsKIAotICAgIE5TU2l6ZSBpbWFnZVNpemU7Ci0gICAgaW1hZ2VTaXplLndpZHRoID0gbGFi
ZWxTaXplLndpZHRoICsgRHJhZ0xhYmVsQm9yZGVyWCAqIDI7Ci0gICAgaW1hZ2VTaXplLmhlaWdo
dCA9IGxhYmVsU2l6ZS5oZWlnaHQgKyBEcmFnTGFiZWxCb3JkZXJZICogMjsKLSAgICBpZiAoZHJh
d1VSTFN0cmluZykgewotICAgICAgICBOU1NpemUgdXJsU3RyaW5nU2l6ZTsKLSAgICAgICAgdXJs
U3RyaW5nU2l6ZS53aWR0aCA9IHdpZHRoV2l0aEZvbnQodXJsU3RyaW5nLCB1cmxGb250KTsKLSAg
ICAgICAgdXJsU3RyaW5nU2l6ZS5oZWlnaHQgPSBbdXJsRm9udCBhc2NlbmRlcl0gLSBbdXJsRm9u
dCBkZXNjZW5kZXJdOwotICAgICAgICBpbWFnZVNpemUuaGVpZ2h0ICs9IHVybFN0cmluZ1NpemUu
aGVpZ2h0OwotICAgICAgICBpZiAodXJsU3RyaW5nU2l6ZS53aWR0aCA+IE1heERyYWdMYWJlbFdp
ZHRoKSB7Ci0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBzdGQ6Om1heChNYXhEcmFnTGFi
ZWxXaWR0aCArIERyYWdMYWJlbEJvcmRlclkgKiAyLCBNaW5EcmFnTGFiZWxXaWR0aEJlZm9yZUNs
aXApOwotICAgICAgICAgICAgY2xpcFVSTFN0cmluZyA9IFlFUzsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBzdGQ6Om1heChsYWJlbFNpemUud2lkdGggKyBE
cmFnTGFiZWxCb3JkZXJYICogMiwgdXJsU3RyaW5nU2l6ZS53aWR0aCArIERyYWdMYWJlbEJvcmRl
clggKiAyKTsKLSAgICB9Ci0gICAgTlNJbWFnZSAqZHJhZ0ltYWdlID0gW1tbTlNJbWFnZSBhbGxv
Y10gaW5pdFdpdGhTaXplOiBpbWFnZVNpemVdIGF1dG9yZWxlYXNlXTsKLSAgICBbZHJhZ0ltYWdl
IGxvY2tGb2N1c107CisgICAgaWYgKGxpbmVJbmRleCkKKyAgICAgICAgeSArPSBvcmlnaW5zW2xp
bmVJbmRleCAtIDFdLnkgLSBvcmlnaW5zW2xpbmVJbmRleF0ueTsKIAotICAgIFtbTlNDb2xvciBj
b2xvcldpdGhEZXZpY2VSZWQ6IDAuN2YgZ3JlZW46IDAuN2YgYmx1ZTogMC43ZiBhbHBoYTogMC44
Zl0gc2V0XTsKKyAgICBMaW5rSW1hZ2VMYXlvdXQ6OkxhYmVsTGluZSBsaW5lOworICAgIGxpbmUu
bGluZSA9IGN0TGluZTsKKyAgICBsaW5lLm9yaWdpbiA9IEZsb2F0UG9pbnQoeCwgeSk7CisgICAg
bGluZXMuYXBwZW5kKGxpbmUpOwogCi0gICAgLy8gRHJhZyBhIHJlY3RhbmdsZSB3aXRoIHJvdW5k
ZWQgY29ybmVycwotICAgIE5TQmV6aWVyUGF0aCAqcGF0aCA9IFtOU0JlemllclBhdGggYmV6aWVy
UGF0aF07Ci0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VS
ZWN0KDAsIDAsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKLSAg
ICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoMCwgaW1h
Z2VTaXplLmhlaWdodCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIs
IERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92
YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRHJhZ0xhYmVsUmFkaXVzICog
MiwgaW1hZ2VTaXplLmhlaWdodCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1
cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRo
V2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRHJhZ0xhYmVsUmFk
aXVzICogMiwgMCwgRHJhZ0xhYmVsUmFkaXVzICogMiwgRHJhZ0xhYmVsUmFkaXVzICogMildOwor
ICAgIGlmIChpc0xhc3RMaW5lKQorICAgICAgICB5ICs9IGxpbmVCb3VuZHMuc2l6ZS5oZWlnaHQ7
Cit9CiAKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3QoRHJh
Z0xhYmVsUmFkaXVzLCAwLCBpbWFnZVNpemUud2lkdGggLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCBp
bWFnZVNpemUuaGVpZ2h0KV07Ci0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBO
U01ha2VSZWN0KDAsIERyYWdMYWJlbFJhZGl1cywgRHJhZ0xhYmVsUmFkaXVzICsgMTAsIGltYWdl
U2l6ZS5oZWlnaHQgLSAyICogRHJhZ0xhYmVsUmFkaXVzKV07Ci0gICAgW3BhdGggYXBwZW5kQmV6
aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJlbFJh
ZGl1cyAtIDIwLCBEcmFnTGFiZWxSYWRpdXMsIERyYWdMYWJlbFJhZGl1cyArIDIwLCBpbWFnZVNp
emUuaGVpZ2h0IC0gMiAqIERyYWdMYWJlbFJhZGl1cyldOwotICAgIFtwYXRoIGZpbGxdOworRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHRpdGxlLCBUZXh0SW5kaWNhdG9yRGF0YSYsIEZvbnRSZW5kZXJpbmdNb2RlLCBm
bG9hdCkKK3sKKyAgICBMaW5rSW1hZ2VMYXlvdXQgbGF5b3V0KHVybCwgdGl0bGUpOwogCi0gICAg
TlNDb2xvciAqdG9wQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowLjBmIGFs
cGhhOjAuNzVmXTsKLSAgICBOU0NvbG9yICpib3R0b21Db2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0
aERldmljZVdoaXRlOjEuMGYgYWxwaGE6MC41Zl07Ci0gICAgaWYgKGRyYXdVUkxTdHJpbmcgJiYg
dXJsRm9udCkgewotICAgICAgICBpZiAoY2xpcFVSTFN0cmluZykKLSAgICAgICAgICAgIHVybFN0
cmluZyA9IFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUodXJsU3RyaW5nLCBpbWFnZVNp
emUud2lkdGggLSAoRHJhZ0xhYmVsQm9yZGVyWCAqIDIpLCBmb250RnJvbU5TRm9udCh1cmxGb250
KSk7CisgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdl
IGFsbG9jXSBpbml0V2l0aFNpemU6bGF5b3V0LmJvdW5kaW5nUmVjdC5zaXplKCldKTsKKyAgICBb
ZHJhZ0ltYWdlIGxvY2tGb2N1c107CiAKLSAgICAgICBkcmF3RG91YmxlZEF0UG9pbnQodXJsU3Ry
aW5nLCBOU01ha2VQb2ludChEcmFnTGFiZWxCb3JkZXJYLCBEcmFnTGFiZWxCb3JkZXJZIC0gW3Vy
bEZvbnQgZGVzY2VuZGVyXSksIHRvcENvbG9yLCBib3R0b21Db2xvciwgdXJsRm9udCk7Ci0gICAg
fQorICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KChDR0NvbnRleHRSZWYpW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5ncmFwaGljc1BvcnQpOworICAgIGNvbnRleHQuZmlsbFJv
dW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJvdW5kaW5nUmVjdCwgRmxvYXRSb3Vu
ZGVkUmVjdDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVzKSksIENvbG9yOjp3aGl0ZSk7CiAK
LSAgICBpZiAobGFiZWxGb250KSB7Ci0gICAgICAgIGlmIChjbGlwTGFiZWxTdHJpbmcpCi0gICAg
ICAgICAgICBsYWJlbCA9IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShsYWJlbCwgaW1h
Z2VTaXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclggKiAyKSwgZm9udEZyb21OU0ZvbnQobGFi
ZWxGb250KSk7Ci0gICAgICAgIGRyYXdEb3VibGVkQXRQb2ludChsYWJlbCwgTlNNYWtlUG9pbnQo
RHJhZ0xhYmVsQm9yZGVyWCwgaW1hZ2VTaXplLmhlaWdodCAtIExhYmVsQm9yZGVyWU9mZnNldCAt
IFtsYWJlbEZvbnQgcG9pbnRTaXplXSksIHRvcENvbG9yLCBib3R0b21Db2xvciwgbGFiZWxGb250
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmUgOiBsYXlvdXQubGluZXMpIHsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKKyAgICAgICAgY29udGV4
dC50cmFuc2xhdGUobGluZS5vcmlnaW4ueCgpLCBsYXlvdXQuYm91bmRpbmdSZWN0LmhlaWdodCgp
IC0gbGluZS5vcmlnaW4ueSgpIC0gbGlua0ltYWdlUGFkZGluZyk7CisgICAgICAgIENHQ29udGV4
dFNldFRleHRQb3NpdGlvbihjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCAwLCAwKTsKKyAgICAg
ICAgQ1RMaW5lRHJhdyhsaW5lLmxpbmUuZ2V0KCksIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIH0KIAogICAgIFtkcmFnSW1hZ2UgdW5sb2NrRm9jdXNdOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NvY29hL0xpbmtQcmVzZW50YXRpb25TUEkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9MaW5rUHJlc2VudGF0aW9uU1BJLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmMyYmVkMTc2OTY4ZTYyMjUyZDc5OTlhN2ZlYmZjODg2NTY3MDlmOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jb2NvYS9MaW5rUHJlc2Vu
dGF0aW9uU1BJLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTAxMjAwCisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCisjaW1wb3J0IDxMaW5r
UHJlc2VudGF0aW9uL0xQTlNVUkxFeHRyYXMuaD4KKworI2Vsc2UKKworQGludGVyZmFjZSBOU1VS
TCAoKQorLSAoTlNTdHJpbmcgKilfbHBfc2ltcGxpZmllZERpc3BsYXlTdHJpbmc7CitAZW5kCisK
KyNlbmRpZgorCisjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDEyMDAK
</data>

          </attachment>
      

    </bug>

</bugzilla>