<?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>16604</bug_id>
          
          <creation_ts>2007-12-25 10:09:59 -0800</creation_ts>
          <short_desc>&lt;canvas&gt; lacks transform() and setTransform()</short_desc>
          <delta_ts>2008-12-07 01:05:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.whatwg.org/specs/web-apps/current-work/multipage/section-the-canvas.html#transform</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>17169</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilmari Heikkinen">ilmari.heikkinen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>65253</commentid>
    <comment_count>0</comment_count>
    <who name="Ilmari Heikkinen">ilmari.heikkinen</who>
    <bug_when>2007-12-25 10:09:59 -0800</bug_when>
    <thetext>Safari lacks the canvas matrix transformation functions ctx.transform(m00,m01,m10,m11,dx,dy) and ctx.setTransform(m00,m01,m10,m11,dx,dy).

http://www.whatwg.org/specs/web-apps/current-work/multipage/section-the-canvas.html#transform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65254</commentid>
    <comment_count>1</comment_count>
      <attachid>18109</attachid>
    <who name="Ilmari Heikkinen">ilmari.heikkinen</who>
    <bug_when>2007-12-25 10:10:32 -0800</bug_when>
    <thetext>Created attachment 18109
Testcase for transform() and setTransform()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65441</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-27 23:23:23 -0800</bug_when>
    <thetext>*** Bug 16630 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68478</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-28 13:20:00 -0800</bug_when>
    <thetext>transform() is easy -- setTransform() is more difficult to do as it requires adding yet a nother set of platform specific methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74164</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-03-17 14:54:55 -0700</bug_when>
    <thetext>&lt;rdar://5691316&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99950</commentid>
    <comment_count>5</comment_count>
      <attachid>25424</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-11-24 05:16:47 -0800</bug_when>
    <thetext>Created attachment 25424
add setTransform() support

This adds setTransform() support.

What to do on a CTM, that isn&apos;t invertible?

Checked behavior on paths that have been added before or after setTransform(), as well as save() and restore() arround setTransform().

The tests do some basic checks. What, if the given matrix is not invertible, is the path transformed with setTransform or only the context, does restore() restore the ctm ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100111</commentid>
    <comment_count>6</comment_count>
      <attachid>25462</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-11-24 17:26:51 -0800</bug_when>
    <thetext>Created attachment 25462
add setTransform() support (2)

updated the patch. Avoids not-invertable CTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100240</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-11-25 11:00:27 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=25462) [review]
&gt; add setTransform() support (2)
&gt; 
&gt; updated the patch. Avoids not-invertable CTM.

It&apos;s probably enough to check for a not-invertable CTM on the following &apos;drawing&apos; and &apos;transformation&apos; methods:

scale, rotate, translate, transform, setTransform, beginPath, closePath, moveTo, lineTo, quadraticCurveTo, bezierCurveTo, arcTo, arc, rect, fill, stroke, clip, clipRect, fillRect, strokeRect, drawImage, drawImageFromRect, willDraw, drawTextInternal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101562</commentid>
    <comment_count>8</comment_count>
      <attachid>25788</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-12-05 14:11:17 -0800</bug_when>
    <thetext>Created attachment 25788
setTransform() for Canvas

setTransform() for Canvas with a new LayoutTest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101632</commentid>
    <comment_count>9</comment_count>
      <attachid>25807</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-12-05 23:35:57 -0800</bug_when>
    <thetext>Created attachment 25807
setTransform() for Canvas

Fixed a bug in isPointInPath and changed expected result of a LayoutTest. setTransform is a new property in fast/dom/Window/window-properties.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101663</commentid>
    <comment_count>10</comment_count>
      <attachid>25815</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-12-06 10:37:48 -0800</bug_when>
    <thetext>Created attachment 25815
setTransform() for Canvas

Fixed a bug in setTransform(). http://azarask.in/projects/algorithm-ink/ is working again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101690</commentid>
    <comment_count>11</comment_count>
      <attachid>25815</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-06 16:43:47 -0800</bug_when>
    <thetext>Comment on attachment 25815
setTransform() for Canvas

r=me! yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101692</commentid>
    <comment_count>12</comment_count>
      <attachid>25815</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-06 16:52:05 -0800</bug_when>
    <thetext>Comment on attachment 25815
setTransform() for Canvas

wth, now that the setTransform test fails again.  *grumble*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101693</commentid>
    <comment_count>13</comment_count>
      <attachid>25815</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-06 16:56:36 -0800</bug_when>
    <thetext>Comment on attachment 25815
setTransform() for Canvas

Am removing the review flag bit, and am going to see if i can work out why CG hates us</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101698</commentid>
    <comment_count>14</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-06 17:28:57 -0800</bug_when>
    <thetext>I am having difficulty believing this, but it looks like i might be seeing a codegen error... srsly wtf?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101703</commentid>
    <comment_count>15</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-06 18:26:31 -0800</bug_when>
    <thetext>Further investigation shows that gdb was (simply put) lying to me.  unfortunately that means i still have no idea why this is failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101712</commentid>
    <comment_count>16</comment_count>
      <attachid>25828</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-12-06 22:56:56 -0800</bug_when>
    <thetext>Created attachment 25828
setTransform() for Canvas

with a fix for Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101715</commentid>
    <comment_count>17</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-12-07 01:05:25 -0800</bug_when>
    <thetext>Fixed r39079</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>18109</attachid>
            <date>2007-12-25 10:10:32 -0800</date>
            <delta_ts>2007-12-25 10:10:32 -0800</delta_ts>
            <desc>Testcase for transform() and setTransform()</desc>
            <filename>matrixTest.html</filename>
            <type>text/html</type>
            <size>420</size>
            <attacher name="Ilmari Heikkinen">ilmari.heikkinen</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5PgpUaGlzIHNob3VsZCBkaXNwbGF5IHR3byBzcXVhcmVzIHJvdGF0ZWQgYnkg
NDUgZGVncmVlcy48YnI+CjxjYW52YXMgaWQ9ImMiIHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIj48
L2NhbnZhcz4KPHNjcmlwdD4KICB2YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjJykK
ICB2YXIgY3R4ID0gYy5nZXRDb250ZXh0KCcyZCcpCiAgY3R4LmZpbGxTdHlsZSA9ICdibGFjaycK
ICBjdHgudHJhbnNmb3JtKDAuNzA3LCAtMC43MDcsIDAuNzA3LCAwLjcwNywgMCwgMTAwKQogIGN0
eC5maWxsUmVjdCgwLDAsMTAwLDEwMCkKICBjdHguc2V0VHJhbnNmb3JtKDAuNzA3LCAwLjcwNywg
LTAuNzA3LCAwLjcwNywgMjEyLCAyOSkKICBjdHguZmlsbFJlY3QoMCwwLDEwMCwxMDApCjwvc2Ny
aXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25424</attachid>
            <date>2008-11-24 05:16:47 -0800</date>
            <delta_ts>2008-11-24 17:26:51 -0800</delta_ts>
            <desc>add setTransform() support</desc>
            <filename>setTransform.patch</filename>
            <type>text/plain</type>
            <size>7149</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODcwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDgtMTEtMjQgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igc2V0VHJhbnNmb3JtKCkgaW4gY2FudmFzLgorCisgICAgICAgIDxjYW52YXM+
IGxhY2tzIHRyYW5zZm9ybSgpIGFuZCBzZXRUcmFuc2Zvcm0oKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDQKKworICAgICAgICBUZXN0OiBmYXN0
L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwKKworICAgICAgICAqIGh0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlk
bDoKKwogMjAwOC0xMS0yNCAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6ZWNrZUBzZWxm
aXNoLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMzg2OTgpCisrKyBX
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzY5LDYgKzM2OSwyNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNm
b3JtCiAgICAgbV9wYXRoLnRyYW5zZm9ybSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKIH0KIAordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFRyYW5zZm9ybShmbG9hdCBtMTEsIGZsb2F0
IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK3sKKyAgICBH
cmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIC8vIEhUTUw1IDMuMTQuMTEuMSAtLSBpZ25vcmUgYW55IGNh
bGxzIHRoYXQgcGFzcyBub24tZmluaXRlIG51bWJlcnMKKyAgICBpZiAoIWlzZmluaXRlKG0xMSkg
fCAhaXNmaW5pdGUobTIxKSB8ICFpc2Zpbml0ZShkeCkgfCAKKyAgICAgICAgIWlzZmluaXRlKG0x
MikgfCAhaXNmaW5pdGUobTIyKSB8ICFpc2Zpbml0ZShkeSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKKyAgICBpZiAoIWN0bS5pc0lu
dmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGMtPmNvbmNhdENUTShjdG0uaW52ZXJz
ZSgpKTsKKyAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtLm11bHRpcGx5KGN0bS5pbnZlcnNlKCkpOwor
ICAgIG1fcGF0aC50cmFuc2Zvcm0oY3RtKTsKKworICAgIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIx
LCBtMjIsIGR4LCBkeSk7Cit9CisKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRT
dHJva2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKQogewogICAgIHNldFN0cm9rZVN0eWxlKENh
bnZhc1N0eWxlOjpjcmVhdGUoY29sb3IpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDM4Njk4KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cyk7CiAgICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHR4LCBmbG9hdCB0eSk7CiAgICAgICAg
IHZvaWQgdHJhbnNmb3JtKGZsb2F0IG0xMSwgZmxvYXQgbTEyLCBmbG9hdCBtMjEsIGZsb2F0IG0y
MiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oZmxvYXQg
bTExLCBmbG9hdCBtMTIsIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBkeCwgZmxvYXQgZHkp
OwogCiAgICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvcik7CiAg
ICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoZmxvYXQgZ3JheUxldmVsKTsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCShyZXZpc2lvbiAzODY5OCkKKysr
IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgdm9pZCByb3RhdGUoaW4g
ZmxvYXQgYW5nbGUpOwogICAgICAgICB2b2lkIHRyYW5zbGF0ZShpbiBmbG9hdCB0eCwgaW4gZmxv
YXQgdHkpOwogICAgICAgICB2b2lkIHRyYW5zZm9ybShpbiBmbG9hdCBtMTEsIGluIGZsb2F0IG0x
MiwgaW4gZmxvYXQgbTIxLCBpbiBmbG9hdCBtMjIsIGluIGZsb2F0IGR4LCBpbiBmbG9hdCBkeSk7
CisgICAgICAgIHZvaWQgc2V0VHJhbnNmb3JtKGluIGZsb2F0IG0xMSwgaW4gZmxvYXQgbTEyLCBp
biBmbG9hdCBtMjEsIGluIGZsb2F0IG0yMiwgaW4gZmxvYXQgZHgsIGluIGZsb2F0IGR5KTsKIAog
ICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgZ2xvYmFsQWxwaGE7CiAgICAgICAgIGF0dHJpYnV0ZSBb
Q29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBnbG9iYWxDb21wb3NpdGVPcGVyYXRp
b247CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzODcwNikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA4LTExLTI0ICBEaXJrIFNjaHVsemUg
IDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgc29tZSB0ZXN0cyB0byB2ZXJ5IGNvcnJlY3QgYmVoYXZpb3Igb2Yg
Y2FudmFzLnNldFRyYW5zZm9ybSgpCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjA0CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtc2V0
VHJhbnNmb3JtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvY2Fu
dmFzLXNldFRyYW5zZm9ybS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52
YXMtc2V0VHJhbnNmb3JtLmpzOiBBZGRlZC4KKwogMjAwOC0xMS0yNCAgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgIDx6ZWNrZUBzZWxmaXNoLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBN
YXJrIFJvd2UuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNm
b3JtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9j
YW52YXMtc2V0VHJhbnNmb3JtLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIxIEBACitTZXJpZXMgb2YgdGVzdHMgdG8gZW5zdXJlIGNvcnJlY3Qg
YmVoYXZpb3VyIG9mIGNhbnZhcy5zZXRUcmFuc2Zvcm0oKQorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBpbWdkYXRhWzRdIGlzIDAKK1BBU1MgaW1nZGF0YVs1XSBpcyAxMjgK
K1BBU1MgaW1nZGF0YVs2XSBpcyAwCitQQVNTIGltZ2RhdGFbNF0gaXMgMAorUEFTUyBpbWdkYXRh
WzVdIGlzIDEyOAorUEFTUyBpbWdkYXRhWzZdIGlzIDAKK1BBU1MgaW1nZGF0YVs0XSBpcyAwCitQ
QVNTIGltZ2RhdGFbNV0gaXMgMTI4CitQQVNTIGltZ2RhdGFbNl0gaXMgMAorUEFTUyBpbWdkYXRh
WzRdIGlzIDAKK1BBU1MgaW1nZGF0YVs1XSBpcyAxMjgKK1BBU1MgaW1nZGF0YVs2XSBpcyAwCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXNldFRyYW5zZm9ybS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zv
cm0uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iY2Fu
dmFzLXNldFRyYW5zZm9ybS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYxIEBACitkZXNjcmlwdGlvbigiU2VyaWVzIG9mIHRlc3RzIHRvIGVuc3VyZSBjb3Jy
ZWN0IGJlaGF2aW91ciBvZiBjYW52YXMuc2V0VHJhbnNmb3JtKCkiKTsKK3ZhciBjdHggPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpOworCitjdHguc2Nh
bGUoMC41LCAwLjUpOworY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTsKK2N0eC5m
aWxsU3R5bGUgPSAnZ3JlZW4nOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKwordmFy
IGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTksIDk5KTsKK3ZhciBpbWdkYXRh
ID0gaW1hZ2VEYXRhLmRhdGE7CitzaG91bGRCZSgiaW1nZGF0YVs0XSIsICIwIik7CitzaG91bGRC
ZSgiaW1nZGF0YVs1XSIsICIxMjgiKTsKK3Nob3VsZEJlKCJpbWdkYXRhWzZdIiwgIjAiKTsKKwor
Y3R4LmJlZ2luUGF0aCgpOworY3R4Lm1vdmVUbygwLDApOworY3R4LmxpbmVUbygxMDAsMCk7Citj
dHgubGluZVRvKDEwMCwxMDApOworY3R4LmxpbmVUbygwLDEwMCk7CitjdHguY2xvc2VQYXRoKCk7
CitjdHguc2F2ZSgpCitjdHguc2V0VHJhbnNmb3JtKDAuNSwgMCwgMCwgMC41LCAxMCwgMTApOwor
Y3R4LmZpbGxTdHlsZSA9ICdyZWQnOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKK2N0
eC5yZXN0b3JlKCk7CitjdHguZmlsbFN0eWxlID0gJ2dyZWVuJzsKK2N0eC5maWxsUmVjdCgwLCAw
LCAxMDAsIDEwMCk7CisKK2ltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTksIDk5
KTsKK2ltZ2RhdGEgPSBpbWFnZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJpbWdkYXRhWzRdIiwgIjAi
KTsKK3Nob3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEyOCIpOworc2hvdWxkQmUoImltZ2RhdGFbNl0i
LCAiMCIpOworCitjdHguZmlsbFN0eWxlID0gJ2dyZWVuJzsKK2N0eC5zYXZlKCkKK2N0eC5zZXRU
cmFuc2Zvcm0oMC41LCAwLCAwLCAwLjUsIDAsIDApOworY3R4LmZpbGxTdHlsZSA9ICdyZWQnOwor
Y3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKK2N0eC5yZXN0b3JlKCk7CitjdHguZmlsbFJl
Y3QoMCwgMCwgMTAwLCAxMDApOworCitpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDEsIDEs
IDk5LCA5OSk7CitpbWdkYXRhID0gaW1hZ2VEYXRhLmRhdGE7CitzaG91bGRCZSgiaW1nZGF0YVs0
XSIsICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1XSIsICIxMjgiKTsKK3Nob3VsZEJlKCJpbWdk
YXRhWzZdIiwgIjAiKTsKKworY3R4LmZpbGxTdHlsZSA9ICdncmVlbic7CitjdHguZmlsbFJlY3Qo
MCwgMCwgMTAwLCAxMDApOworY3R4LnNldFRyYW5zZm9ybSgwLCAwLCAwLCAwLCAwLCAwKTsKK2N0
eC5maWxsU3R5bGUgPSAncmVkJzsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CisKK2lt
YWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTksIDk5KTsKK2ltZ2RhdGEgPSBpbWFn
ZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJpbWdkYXRhWzRdIiwgIjAiKTsKK3Nob3VsZEJlKCJpbWdk
YXRhWzVdIiwgIjEyOCIpOworc2hvdWxkQmUoImltZ2RhdGFbNl0iLCAiMCIpOworCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25462</attachid>
            <date>2008-11-24 17:26:51 -0800</date>
            <delta_ts>2008-12-05 14:11:17 -0800</delta_ts>
            <desc>add setTransform() support (2)</desc>
            <filename>setTransform.patch</filename>
            <type>text/plain</type>
            <size>18225</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODczNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDgtMTEtMjQgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igc2V0VHJhbnNmb3JtKCkgaW4gY2FudmFzLgorCisgICAgICAgIDxjYW52YXM+
IGxhY2tzIHRyYW5zZm9ybSgpIGFuZCBzZXRUcmFuc2Zvcm0oKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDQKKworICAgICAgICBUZXN0OiBmYXN0
L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwKKworICAgICAgICAqIGh0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZWdpblBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbG9zZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpxdWFkcmF0aWNDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyY1RvKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3SW1hZ2VGcm9tUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5p
ZGw6CisKIDIwMDgtMTEtMjQgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFu
bkB0b3JjaG1vYmlsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvcmdlIFN0YWlrb3Mg
JiBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCShyZXZpc2lvbiAzODY5OCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUoKQogICAgICwgbV9zaGFkb3dDb2xvcigiYmxh
Y2siKQogICAgICwgbV9nbG9iYWxBbHBoYSgxKQogICAgICwgbV9nbG9iYWxDb21wb3NpdGUoQ29t
cG9zaXRlU291cmNlT3ZlcikKKyAgICAsIG1faW52ZXJ0aWJsZUNUTSh0cnVlKQogICAgICwgbV90
ZXh0QWxpZ24oU3RhcnRUZXh0QWxpZ24pCiAgICAgLCBtX3RleHRCYXNlbGluZShBbHBoYWJldGlj
VGV4dEJhc2VsaW5lKQogICAgICwgbV91bnBhcnNlZEZvbnQoZGVmYXVsdEZvbnQpCkBAIC0xNTIs
NiArMTUzLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZQogICAg
IEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAg
cmV0dXJuOwogICAgIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+YXBwbHlTdHJva2VDb2xvcihjKTsK
IH0KIApAQCAtMTc2LDYgKzE3OSw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsU3QKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAg
IGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVD
VE0pCisgICAgICAgIHJldHVybjsKICAgICBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5hcHBseUZpbGxD
b2xvcihjKTsKIH0KIApAQCAtMTkyLDYgKzE5Nyw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRMaW5lV2kKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4
dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2lu
dmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBjLT5zZXRTdHJva2VUaGlja25lc3Mo
d2lkdGgpOwogfQogCkBAIC0yMDksNiArMjE2LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldExpbmVDYQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0
KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52
ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIGMtPnNldExpbmVDYXAoY2FwKTsKIH0K
IApAQCAtMzI4LDggKzMzNywxOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2Nh
bGUoZmxvCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBp
ZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RN
KQorICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0g
c3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBuZXdUcmFuc2Zvcm0uc2NhbGUoc3gsIHN5KTsKKyAg
ICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBzdGF0ZSgpLm1f
aW52ZXJ0aWJsZUNUTSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3Rh
dGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT5zY2FsZShGbG9hdFNpemUo
c3gsIHN5KSk7Ci0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybS5zY2FsZShzeCwgc3kpOwogICAgIG1f
cGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGUoMS4wL3N4LCAxLjAvc3kpKTsK
IH0KIApAQCAtMzM4LDggKzM1NywxOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
cm90YXRlKGZsCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAg
ICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxl
Q1RNKQorICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3Jt
ID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBuZXdUcmFuc2Zvcm0ucm90YXRlKGFuZ2xlSW5S
YWRpYW5zKTsKKyAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAg
ICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT5yb3Rh
dGUoYW5nbGVJblJhZGlhbnMpOwotICAgIHN0YXRlKCkubV90cmFuc2Zvcm0ucm90YXRlKGFuZ2xl
SW5SYWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCk7CiAgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZp
bmVUcmFuc2Zvcm0oKS5yb3RhdGUoLWFuZ2xlSW5SYWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCkp
OwogfQogCkBAIC0zNDgsOCArMzc3LDE4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp0cmFuc2xhdGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwog
ICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGli
bGVDVE0pCisgICAgICAgIHJldHVybjsKKworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zv
cm0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIG5ld1RyYW5zZm9ybS50cmFuc2xhdGUodHgs
IHR5KTsKKyAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT50cmFuc2xh
dGUodHgsIHR5KTsKLSAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh0eCwgdHkpOwog
ICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKC10eCwgLXR5
KSk7CiB9CiAKQEAgLTM1OCwxNyArMzk3LDUxIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjp0cmFuc2Zvcm0KICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgp
OwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBIVE1MNSAzLjE0LjExLjEg
LS0gaWdub3JlIGFueSBjYWxscyB0aGF0IHBhc3Mgbm9uLWZpbml0ZSBudW1iZXJzCiAgICAgaWYg
KCFpc2Zpbml0ZShtMTEpIHwgIWlzZmluaXRlKG0yMSkgfCAhaXNmaW5pdGUoZHgpIHwgCiAgICAg
ICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikgfCAhaXNmaW5pdGUoZHkpKQogICAg
ICAgICByZXR1cm47CisKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKG0xMSwgbTEyLCBt
MjEsIG0yMiwgZHgsIGR5KTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBz
dGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIG5ld1RyYW5zZm9ybS5tdWx0aXBseSh0cmFuc2Zvcm0p
OworICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIHN0YXRl
KCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPmNvbmNhdENUTSh0
cmFuc2Zvcm0pOwotICAgIHN0YXRlKCkubV90cmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtKTsK
ICAgICBtX3BhdGgudHJhbnNmb3JtKHRyYW5zZm9ybS5pbnZlcnNlKCkpOwogfQogCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VHJhbnNmb3JtKGZsb2F0IG0xMSwgZmxvYXQgbTEy
LCBmbG9hdCBtMjEsIGZsb2F0IG0yMiwgZmxvYXQgZHgsIGZsb2F0IGR5KQoreworICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIC8vIEhUTUw1IDMuMTQuMTEuMSAtLSBpZ25vcmUgYW55IGNhbGxzIHRoYXQg
cGFzcyBub24tZmluaXRlIG51bWJlcnMKKyAgICBpZiAoIWlzZmluaXRlKG0xMSkgfCAhaXNmaW5p
dGUobTIxKSB8ICFpc2Zpbml0ZShkeCkgfCAKKyAgICAgICAgIWlzZmluaXRlKG0xMikgfCAhaXNm
aW5pdGUobTIyKSB8ICFpc2Zpbml0ZShkeSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKKyAgICBpZiAoIWN0bS5pc0ludmVydGlibGUo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGMtPmNvbmNhdENUTShjdG0uaW52ZXJzZSgpKTsKKyAg
ICBzdGF0ZSgpLm1fdHJhbnNmb3JtLm11bHRpcGx5KGN0bS5pbnZlcnNlKCkpOworICAgIG1fcGF0
aC50cmFuc2Zvcm0oY3RtKTsKKworICAgIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBtMjIsIGR4
LCBkeSk7Cit9CisKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xv
cihjb25zdCBTdHJpbmcmIGNvbG9yKQogewogICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxl
OjpjcmVhdGUoY29sb3IpKTsKQEAgLTQzMSwxMSArNTA0LDE1IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGaWxsQ28KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmJlZ2luUGF0aCgpCiB7CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAg
ICAgcmV0dXJuOwogICAgIG1fcGF0aC5jbGVhcigpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6Y2xvc2VQYXRoKCkKIHsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxl
Q1RNKQorICAgICAgICByZXR1cm47CiAgICAgbV9wYXRoLmNsb3NlU3VicGF0aCgpOwogfQogCkBA
IC00NDMsNiArNTIwLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1vdmVUbyhm
bAogewogICAgIGlmICghaXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUoeSkpCiAgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAg
ICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKIH0KIApAQCAtNDUwLDYgKzUyOSw4
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lVG8oZmwKIHsKICAgICBpZiAo
IWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5hZGRM
aW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7CiB9CiAKQEAgLTQ1Nyw2ICs1MzgsOCBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cXVhZHJhdGljCiB7CiAgICAgaWYgKCFpc2Zpbml0ZShj
cHgpIHwgIWlzZmluaXRlKGNweSkgfCAhaXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUoeSkpCiAgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9wYXRoLmFkZFF1YWRDdXJ2ZVRvKEZsb2F0UG9pbnQoY3B4LCBjcHkpLCBG
bG9hdFBvaW50KHgsIHkpKTsKIH0KIApAQCAtNDY0LDYgKzU0Nyw4IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXIKIHsKICAgICBpZiAoIWlzZmluaXRlKGNwMXgpIHwg
IWlzZmluaXRlKGNwMXkpIHwgIWlzZmluaXRlKGNwMngpIHwgIWlzZmluaXRlKGNwMnkpIHwgIWlz
ZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0
ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5hZGRCZXpp
ZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3AxeCwgY3AxeSksIEZsb2F0UG9pbnQoY3AyeCwgY3AyeSks
IEZsb2F0UG9pbnQoeCwgeSkpOwogfQogCkBAIC00NzcsNyArNTYyLDggQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmFyY1RvKGZsbwogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJS
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRkQXJjVG8oRmxvYXRQb2lu
dCh4MCwgeTApLCBGbG9hdFBvaW50KHgxLCB5MSksIHIpOwogfQogCkBAIC00OTEsNyArNTc3LDgg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyYyhmbG9hdAogICAgICAgICBlYyA9
IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorICAgIGlmICgh
c3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRk
QXJjKEZsb2F0UG9pbnQoeCwgeSksIHIsIHNhLCBlYSwgYW50aWNsb2Nrd2lzZSk7CiB9CiAgICAg
CkBAIC01MTcsNyArNjA0LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlY3Qo
ZmxvYQogewogICAgIGlmICghdmFsaWRhdGVSZWN0Rm9yQ2FudmFzKHgsIHksIHdpZHRoLCBoZWln
aHQpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRkUmVjdChGbG9hdFJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCkpOwogfQogCkBAIC01MzUsNiArNjIzLDggQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwoKQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRy
YXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgYy0+YmVnaW5Q
YXRoKCk7CiAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwpAQCAtNTUzLDYgKzY0Myw4IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2UoKQogICAgIEdyYXBoaWNzQ29udGV4dCog
YyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIGMtPmJl
Z2luUGF0aCgpOwogICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKIApAQCAtNTc3LDYgKzY2OSw4IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGlwKCkKICAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBj
LT5jbGlwKG1fcGF0aCk7CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIGNsZWFy
UGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKQEAgLTYwNSw2ICs2
OTksOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJSZWN0CiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1
cm47CiAgICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgd2lsbERy
YXcocmVjdCk7CiAgICAgYy0+Y2xlYXJSZWN0KHJlY3QpOwpAQCAtNjE4LDYgKzcxNCw4IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVjdCgKICAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKIAogICAg
IEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHdpbGxEcmF3KHJlY3Qp
OwpAQCAtNjQ1LDYgKzc0Myw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJv
a2VSZWMKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlm
ICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
CisgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWln
aHQpOwogCkBAIC04MTEsNiArOTExLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmFwcGx5U2hhZAogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAg
ICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJs
ZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxh
dGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KICNpZiBQTEFURk9STShDRykK
ICAgICBSR0JBMzIgcmdiYSA9IDA7IC8vIGRlZmF1bHQgaXMgdHJhbnNwYXJlbnQgYmxhY2sKQEAg
LTg4OCw2ICs5OTAsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMp
CiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAg
ICAgICByZXR1cm47CiAKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKTsKICAgICBpZiAoIWNhY2hlZEltYWdlKQpAQCAtOTM4LDYgKzEwNDIsOCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgR3JhcGhpY3NDb250
ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0ID0gYy0+cm91bmRUb0RldmljZVBpeGVscyhz
cmNSZWN0KTsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBjLT5yb3VuZFRvRGV2aWNlUGl4ZWxz
KGRzdFJlY3QpOwpAQCAtOTc3LDYgKzEwODMsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZHJhd0ltYWdlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQo
KTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZl
cnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBvcDsK
ICAgICBpZiAoIXBhcnNlQ29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBvcCkp
CkBAIC0xMDYyLDYgKzExNzAsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2ls
bERyYXcoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBp
ZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RN
KQorICAgICAgICByZXR1cm47CiAKICAgICBtX2NhbnZhcy0+d2lsbERyYXcoYy0+Z2V0Q1RNKCku
bWFwUmVjdChyKSk7CiB9CkBAIC0xMjU4LDYgKzEzNjgsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0Nv
bnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCku
bV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgCiAgICAgY29uc3QgRm9udCYg
Zm9udCA9IGFjY2Vzc0ZvbnQoKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaAkocmV2aXNpb24gMzg2OTgpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsK
ICAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgdHgsIGZsb2F0IHR5KTsKICAgICAgICAgdm9p
ZCB0cmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBm
bG9hdCBkeCwgZmxvYXQgZHkpOworICAgICAgICB2b2lkIHNldFRyYW5zZm9ybShmbG9hdCBtMTEs
IGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAK
ICAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKTsKICAgICAg
ICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwpOwpAQCAtMjA5LDYgKzIxMCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7
CiAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0ZTsKICAgICAg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKKyAgICAgICAgICAgIGJvb2wgbV9p
bnZlcnRpYmxlQ1RNOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUZXh0IHN0YXRlLgog
ICAgICAgICAgICAgVGV4dEFsaWduIG1fdGV4dEFsaWduOwpJbmRleDogV2ViQ29yZS9odG1sL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHJldmlzaW9uIDM4Njk4KQorKysgV2ViQ29yZS9o
dG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkIHJvdGF0ZShpbiBmbG9hdCBhbmds
ZSk7CiAgICAgICAgIHZvaWQgdHJhbnNsYXRlKGluIGZsb2F0IHR4LCBpbiBmbG9hdCB0eSk7CiAg
ICAgICAgIHZvaWQgdHJhbnNmb3JtKGluIGZsb2F0IG0xMSwgaW4gZmxvYXQgbTEyLCBpbiBmbG9h
dCBtMjEsIGluIGZsb2F0IG0yMiwgaW4gZmxvYXQgZHgsIGluIGZsb2F0IGR5KTsKKyAgICAgICAg
dm9pZCBzZXRUcmFuc2Zvcm0oaW4gZmxvYXQgbTExLCBpbiBmbG9hdCBtMTIsIGluIGZsb2F0IG0y
MSwgaW4gZmxvYXQgbTIyLCBpbiBmbG9hdCBkeCwgaW4gZmxvYXQgZHkpOwogCiAgICAgICAgIGF0
dHJpYnV0ZSBmbG9hdCBnbG9iYWxBbHBoYTsKICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDM4NzM2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMTEtMjQgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBzb21lIHRlc3RzIHRvIHZlcnkgY29ycmVjdCBiZWhhdmlvciBvZiBjYW52YXMuc2V0
VHJhbnNmb3JtKCkKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY2MDQKKworICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0t
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJh
bnNmb3JtLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFu
c2Zvcm0uanM6IEFkZGVkLgorCiAyMDA4LTExLTI0ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtv
bGFzLnppbW1lcm1hbm5AdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdl
b3JnZSBTdGFpa29zICYgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy9jYW52YXMtc2V0VHJhbnNmb3JtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0tZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACitTZXJpZXMgb2YgdGVzdHMg
dG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3VyIG9mIGNhbnZhcy5zZXRUcmFuc2Zvcm0oKQorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBpbWdkYXRhWzRdIGlzIDAKK1BBU1Mg
aW1nZGF0YVs1XSBpcyAxMjgKK1BBU1MgaW1nZGF0YVs2XSBpcyAwCitQQVNTIGltZ2RhdGFbNF0g
aXMgMAorUEFTUyBpbWdkYXRhWzVdIGlzIDEyOAorUEFTUyBpbWdkYXRhWzZdIGlzIDAKK1BBU1Mg
aW1nZGF0YVs0XSBpcyAwCitQQVNTIGltZ2RhdGFbNV0gaXMgMTI4CitQQVNTIGltZ2RhdGFbNl0g
aXMgMAorUEFTUyBpbWdkYXRhWzRdIGlzIDAKK1BBU1MgaW1nZGF0YVs1XSBpcyAxMjgKK1BBU1Mg
aW1nZGF0YVs2XSBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXNldFRyYW5z
Zm9ybS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1z
ZXRUcmFuc2Zvcm0uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L2NhbnZhcy1zZXRUcmFuc2Zvcm0uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0iY2FudmFzLXNldFRyYW5zZm9ybS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACitkZXNjcmlwdGlvbigiU2VyaWVzIG9mIHRl
c3RzIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBvZiBjYW52YXMuc2V0VHJhbnNmb3JtKCki
KTsKK3ZhciBjdHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0
KCcyZCcpOworCitjdHguc2NhbGUoMC41LCAwLjUpOworY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAw
LCAxLCAwLCAwKTsKK2N0eC5maWxsU3R5bGUgPSAnZ3JlZW4nOworY3R4LmZpbGxSZWN0KDAsIDAs
IDEwMCwgMTAwKTsKKwordmFyIGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTks
IDk5KTsKK3ZhciBpbWdkYXRhID0gaW1hZ2VEYXRhLmRhdGE7CitzaG91bGRCZSgiaW1nZGF0YVs0
XSIsICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1XSIsICIxMjgiKTsKK3Nob3VsZEJlKCJpbWdk
YXRhWzZdIiwgIjAiKTsKKworY3R4LmJlZ2luUGF0aCgpOworY3R4Lm1vdmVUbygwLDApOworY3R4
LmxpbmVUbygxMDAsMCk7CitjdHgubGluZVRvKDEwMCwxMDApOworY3R4LmxpbmVUbygwLDEwMCk7
CitjdHguY2xvc2VQYXRoKCk7CitjdHguc2F2ZSgpCitjdHguc2V0VHJhbnNmb3JtKDAuNSwgMCwg
MCwgMC41LCAxMCwgMTApOworY3R4LmZpbGxTdHlsZSA9ICdyZWQnOworY3R4LmZpbGxSZWN0KDAs
IDAsIDEwMCwgMTAwKTsKK2N0eC5yZXN0b3JlKCk7CitjdHguZmlsbFN0eWxlID0gJ2dyZWVuJzsK
K2N0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CisKK2ltYWdlRGF0YSA9IGN0eC5nZXRJbWFn
ZURhdGEoMSwgMSwgOTksIDk5KTsKK2ltZ2RhdGEgPSBpbWFnZURhdGEuZGF0YTsKK3Nob3VsZEJl
KCJpbWdkYXRhWzRdIiwgIjAiKTsKK3Nob3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEyOCIpOworc2hv
dWxkQmUoImltZ2RhdGFbNl0iLCAiMCIpOworCitjdHguZmlsbFN0eWxlID0gJ2dyZWVuJzsKK2N0
eC5zYXZlKCkKK2N0eC5zZXRUcmFuc2Zvcm0oMC41LCAwLCAwLCAwLjUsIDAsIDApOworY3R4LmZp
bGxTdHlsZSA9ICdyZWQnOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKK2N0eC5yZXN0
b3JlKCk7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworCitpbWFnZURhdGEgPSBjdHgu
Z2V0SW1hZ2VEYXRhKDEsIDEsIDk5LCA5OSk7CitpbWdkYXRhID0gaW1hZ2VEYXRhLmRhdGE7Citz
aG91bGRCZSgiaW1nZGF0YVs0XSIsICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1XSIsICIxMjgi
KTsKK3Nob3VsZEJlKCJpbWdkYXRhWzZdIiwgIjAiKTsKKworY3R4LmZpbGxTdHlsZSA9ICdncmVl
bic7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworY3R4LnNldFRyYW5zZm9ybSgwLCAw
LCAwLCAwLCAwLCAwKTsKK2N0eC5maWxsU3R5bGUgPSAncmVkJzsKK2N0eC5maWxsUmVjdCgwLCAw
LCAxMDAsIDEwMCk7CisKK2ltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTksIDk5
KTsKK2ltZ2RhdGEgPSBpbWFnZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJpbWdkYXRhWzRdIiwgIjAi
KTsKK3Nob3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEyOCIpOworc2hvdWxkQmUoImltZ2RhdGFbNl0i
LCAiMCIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25788</attachid>
            <date>2008-12-05 14:11:17 -0800</date>
            <delta_ts>2008-12-05 23:35:57 -0800</delta_ts>
            <desc>setTransform() for Canvas</desc>
            <filename>setTransform2.patch</filename>
            <type>text/plain</type>
            <size>17952</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTA0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDgtMTItMDUgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igc2V0VHJhbnNmb3JtKCkgaW4gY2FudmFzLgorCisgICAgICAgIDxjYW52YXM+
IGxhY2tzIHRyYW5zZm9ybSgpIGFuZCBzZXRUcmFuc2Zvcm0oKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDQKKworICAgICAgICBUZXN0OiBmYXN0
L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwKKworICAgICAgICAqIGh0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNsb3NlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnF1YWRyYXRpY0N1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjphcmMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVh
clJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxs
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9r
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2VGcm9tUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd1RleHRJbnRlcm5hbCk6CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGw6CisK
IDIwMDgtMTItMDUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmlkIEh5YXR0LgpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDM5MDMwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDcgQEAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUoKQogICAgICwgbV9zaGFkb3dDb2xv
cigiYmxhY2siKQogICAgICwgbV9nbG9iYWxBbHBoYSgxKQogICAgICwgbV9nbG9iYWxDb21wb3Np
dGUoQ29tcG9zaXRlU291cmNlT3ZlcikKKyAgICAsIG1faW52ZXJ0aWJsZUNUTSh0cnVlKQogICAg
ICwgbV90ZXh0QWxpZ24oU3RhcnRUZXh0QWxpZ24pCiAgICAgLCBtX3RleHRCYXNlbGluZShBbHBo
YWJldGljVGV4dEJhc2VsaW5lKQogICAgICwgbV91bnBhcnNlZEZvbnQoZGVmYXVsdEZvbnQpCkBA
IC0xNTEsNiArMTUyLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9r
ZQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFj
KQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+YXBwbHlTdHJva2VDb2xv
cihjKTsKIH0KIApAQCAtMTc1LDYgKzE3OCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRGaWxsU3QKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgp
OwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5hcHBs
eUZpbGxDb2xvcihjKTsKIH0KIApAQCAtMzI3LDggKzMzMiwxOCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2NhbGUoZmxvCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRl
KCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBuZXdUcmFuc2Zvcm0u
c2NhbGUoc3gsIHN5KTsKKyAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgewor
ICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBj
LT5zY2FsZShGbG9hdFNpemUoc3gsIHN5KSk7Ci0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybS5zY2Fs
ZShzeCwgc3kpOwogICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGUo
MS4wL3N4LCAxLjAvc3kpKTsKIH0KIApAQCAtMzM3LDggKzM1MiwxOCBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cm90YXRlKGZsCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJh
d2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0
YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBuZXdUcmFuc2Zv
cm0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCk7CisgICAgaWYgKCFu
ZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgc3RhdGUoKS5tX2ludmVydGli
bGVDVE0gPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRlKCkubV90
cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+cm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsK
LSAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtLnJvdGF0ZShhbmdsZUluUmFkaWFucyAvIHBpRG91Ymxl
ICogMTgwLjApOwogICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkucm90YXRl
KC1hbmdsZUluUmFkaWFucyAvIHBpRG91YmxlICogMTgwLjApKTsKIH0KIApAQCAtMzQ3LDggKzM3
MiwxOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNsYXRlCiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1
cm47CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5z
Zm9ybTsKKyAgICBuZXdUcmFuc2Zvcm0udHJhbnNsYXRlKHR4LCB0eSk7CisgICAgaWYgKCFuZXdU
cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVD
VE0gPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRlKCkubV90cmFu
c2Zvcm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+dHJhbnNsYXRlKHR4LCB0eSk7Ci0gICAgc3Rh
dGUoKS5tX3RyYW5zZm9ybS50cmFuc2xhdGUodHgsIHR5KTsKICAgICBtX3BhdGgudHJhbnNmb3Jt
KEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSgtdHgsIC10eSkpOwogfQogCkBAIC0zNTcsMTcg
KzM5Miw1MSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNmb3JtCiAgICAg
R3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgLy8gSFRNTDUgMy4xNC4xMS4xIC0tIGlnbm9yZSBhbnkgY2FsbHMg
dGhhdCBwYXNzIG5vbi1maW5pdGUgbnVtYmVycwogICAgIGlmICghaXNmaW5pdGUobTExKSB8ICFp
c2Zpbml0ZShtMjEpIHwgIWlzZmluaXRlKGR4KSB8IAogICAgICAgICAhaXNmaW5pdGUobTEyKSB8
ICFpc2Zpbml0ZShtMjIpIHwgIWlzZmluaXRlKGR5KSkKICAgICAgICAgcmV0dXJuOworCiAgICAg
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBtMjIsIGR4LCBkeSk7CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsK
KyAgICBuZXdUcmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtKTsKKyAgICBpZiAoIW5ld1RyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9
IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhdGUoKS5tX3RyYW5zZm9y
bSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBzdGF0
ZSgpLm1fdHJhbnNmb3JtLm11bHRpcGx5KHRyYW5zZm9ybSk7CiAgICAgbV9wYXRoLnRyYW5zZm9y
bSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldFRyYW5zZm9ybShmbG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBt
MjIsIGZsb2F0IGR4LCBmbG9hdCBkeSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3
aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc3Rh
dGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBIVE1M
NSAzLjE0LjExLjEgLS0gaWdub3JlIGFueSBjYWxscyB0aGF0IHBhc3Mgbm9uLWZpbml0ZSBudW1i
ZXJzCisgICAgaWYgKCFpc2Zpbml0ZShtMTEpIHwgIWlzZmluaXRlKG0yMSkgfCAhaXNmaW5pdGUo
ZHgpIHwgCisgICAgICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikgfCAhaXNmaW5p
dGUoZHkpKQorICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gYy0+
Z2V0Q1RNKCk7CisgICAgaWYgKCFjdG0uaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBjLT5jb25jYXRDVE0oY3RtLmludmVyc2UoKSk7CisgICAgc3RhdGUoKS5tX3RyYW5zZm9y
bS5tdWx0aXBseShjdG0uaW52ZXJzZSgpKTsKKyAgICBtX3BhdGgudHJhbnNmb3JtKGN0bSk7CisK
KyAgICB0cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIyLCBkeCwgZHkpOworfQorCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xv
cikKIHsKICAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKGNvbG9yKSk7CkBA
IC00MzAsMTEgKzQ5OSwxNSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rmls
bENvCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZWdpblBhdGgoKQogeworICAg
IGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3Bh
dGguY2xlYXIoKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsb3NlUGF0
aCgpCiB7CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJu
OwogICAgIG1fcGF0aC5jbG9zZVN1YnBhdGgoKTsKIH0KIApAQCAtNDQyLDYgKzUxNSw4IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjptb3ZlVG8oZmwKIHsKICAgICBpZiAoIWlzZmlu
aXRlKHgpIHwgIWlzZmluaXRlKHkpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgp
Lm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5tb3ZlVG8oRmxv
YXRQb2ludCh4LCB5KSk7CiB9CiAKQEAgLTQ0OSw2ICs1MjQsOCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6bGluZVRvKGZsCiB7CiAgICAgaWYgKCFpc2Zpbml0ZSh4KSB8ICFpc2Zp
bml0ZSh5KSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVD
VE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwg
eSkpOwogfQogCkBAIC00NTYsNiArNTMzLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnF1YWRyYXRpYwogewogICAgIGlmICghaXNmaW5pdGUoY3B4KSB8ICFpc2Zpbml0ZShjcHkp
IHwgIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQogICAgICAgICByZXR1cm47CisgICAgaWYg
KCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5h
ZGRRdWFkQ3VydmVUbyhGbG9hdFBvaW50KGNweCwgY3B5KSwgRmxvYXRQb2ludCh4LCB5KSk7CiB9
CiAKQEAgLTQ2Myw2ICs1NDIsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YmV6
aWVyQ3VyCiB7CiAgICAgaWYgKCFpc2Zpbml0ZShjcDF4KSB8ICFpc2Zpbml0ZShjcDF5KSB8ICFp
c2Zpbml0ZShjcDJ4KSB8ICFpc2Zpbml0ZShjcDJ5KSB8ICFpc2Zpbml0ZSh4KSB8ICFpc2Zpbml0
ZSh5KSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
CisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50
KGNwMXgsIGNwMXkpLCBGbG9hdFBvaW50KGNwMngsIGNwMnkpLCBGbG9hdFBvaW50KHgsIHkpKTsK
IH0KIApAQCAtNDc2LDcgKzU1Nyw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjph
cmNUbyhmbG8KICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9wYXRoLmFkZEFyY1RvKEZsb2F0UG9pbnQoeDAsIHkwKSwgRmxvYXRQb2lu
dCh4MSwgeTEpLCByKTsKIH0KIApAQCAtNDkwLDcgKzU3Miw4IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjphcmMoZmxvYXQKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxl
Q1RNKQorICAgICAgICByZXR1cm47CiAgICAgbV9wYXRoLmFkZEFyYyhGbG9hdFBvaW50KHgsIHkp
LCByLCBzYSwgZWEsIGFudGljbG9ja3dpc2UpOwogfQogICAgIApAQCAtNTE2LDcgKzU5OSw4IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZWN0KGZsb2EKIHsKICAgICBpZiAoIXZh
bGlkYXRlUmVjdEZvckNhbnZhcyh4LCB5LCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICBy
ZXR1cm47CiAgICAgbV9wYXRoLmFkZFJlY3QoRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQp
KTsKIH0KIApAQCAtNTM0LDYgKzYxOCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpmaWxsKCkKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAg
IGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVD
VE0pCisgICAgICAgIHJldHVybjsKIAogICAgIGMtPmJlZ2luUGF0aCgpOwogICAgIGMtPmFkZFBh
dGgobV9wYXRoKTsKQEAgLTU1Miw2ICs2MzgsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c3Ryb2tlKCkKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgp
OwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBjLT5iZWdpblBhdGgoKTsKICAgICBjLT5h
ZGRQYXRoKG1fcGF0aCk7CiAKQEAgLTU3Niw2ICs2NjQsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6Y2xpcCgpCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRl
eHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9p
bnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgYy0+Y2xpcChtX3BhdGgpOwogI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICBjbGVhclBhdGhGb3JEYXNoYm9hcmRCYWNr
d2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkBAIC02MDQsNiArNjk0LDggQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNsZWFyUmVjdAogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRy
YXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIEZsb2F0UmVjdCBy
ZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHdpbGxEcmF3KHJlY3QpOwogICAgIGMtPmNs
ZWFyUmVjdChyZWN0KTsKQEAgLTYxNyw2ICs3MDksOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbFJlY3QoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRl
eHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9p
bnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3QgcmVjdCh4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB3aWxsRHJhdyhyZWN0KTsKQEAgLTY0NCw2ICs3MzgsOCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAK
ICAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIApAQCAtODg3LDYgKzk4
Myw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICBHcmFw
aGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAg
cmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVy
bjsKIAogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgp
OwogICAgIGlmICghY2FjaGVkSW1hZ2UpCkBAIC05MzcsNiArMTAzNSw4IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICgh
c3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
RmxvYXRSZWN0IHNvdXJjZVJlY3QgPSBjLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHNyY1JlY3QpOwog
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGMtPnJvdW5kVG9EZXZpY2VQaXhlbHMoZHN0UmVjdCk7
CkBAIC05NzYsNiArMTA3Niw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2UKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlm
ICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
CisgICAgICAgIHJldHVybjsKIAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wOwogICAgIGlmICgh
cGFyc2VDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcGVyYXRpb24sIG9wKSkKQEAgLTEwNjEs
NiArMTE2Myw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdygKICAg
ICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAg
ICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAg
IHJldHVybjsKIAogICAgIG1fY2FudmFzLT53aWxsRHJhdyhjLT5nZXRDVE0oKS5tYXBSZWN0KHIp
KTsKIH0KQEAgLTEyNTcsNiArMTM2MSw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3VGV4dEkKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwog
ICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGli
bGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICAKICAgICBjb25zdCBGb250JiBmb250ID0gYWNj
ZXNzRm9udCgpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
CShyZXZpc2lvbiAzOTAzMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOwogICAgICAgICB2
b2lkIHRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkpOwogICAgICAgICB2b2lkIHRyYW5zZm9y
bShmbG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0IGR4LCBm
bG9hdCBkeSk7CisgICAgICAgIHZvaWQgc2V0VHJhbnNmb3JtKGZsb2F0IG0xMSwgZmxvYXQgbTEy
LCBmbG9hdCBtMjEsIGZsb2F0IG0yMiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAogICAgICAgICB2
b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IFN0cmluZyYgY29sb3IpOwogICAgICAgICB2b2lkIHNl
dFN0cm9rZUNvbG9yKGZsb2F0IGdyYXlMZXZlbCk7CkBAIC0yMDksNiArMjEwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgZmxvYXQgbV9nbG9iYWxBbHBoYTsKICAgICAgICAg
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fZ2xvYmFsQ29tcG9zaXRlOwogICAgICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOworICAgICAgICAgICAgYm9vbCBtX2ludmVydGlibGVD
VE07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRleHQgc3RhdGUuCiAgICAgICAgICAg
ICBUZXh0QWxpZ24gbV90ZXh0QWxpZ247CkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmlkbAkocmV2aXNpb24gMzkwMzApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBt
b2R1bGUgaHRtbCB7CiAgICAgICAgIHZvaWQgcm90YXRlKGluIGZsb2F0IGFuZ2xlKTsKICAgICAg
ICAgdm9pZCB0cmFuc2xhdGUoaW4gZmxvYXQgdHgsIGluIGZsb2F0IHR5KTsKICAgICAgICAgdm9p
ZCB0cmFuc2Zvcm0oaW4gZmxvYXQgbTExLCBpbiBmbG9hdCBtMTIsIGluIGZsb2F0IG0yMSwgaW4g
ZmxvYXQgbTIyLCBpbiBmbG9hdCBkeCwgaW4gZmxvYXQgZHkpOworICAgICAgICB2b2lkIHNldFRy
YW5zZm9ybShpbiBmbG9hdCBtMTEsIGluIGZsb2F0IG0xMiwgaW4gZmxvYXQgbTIxLCBpbiBmbG9h
dCBtMjIsIGluIGZsb2F0IGR4LCBpbiBmbG9hdCBkeSk7CiAKICAgICAgICAgYXR0cmlidXRlIGZs
b2F0IGdsb2JhbEFscGhhOwogICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3Ry
aW5nXSBET01TdHJpbmcgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uOwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMzkwNDEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAwOC0xMi0wNSAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRl
c3RzIGZvciBjYW52YXMncyBzZXRUcmFuc2Zvcm0oKQorCisgICAgICAgICogZmFzdC9jYW52YXMv
Y2FudmFzLXNldFRyYW5zZm9ybS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9j
YW52YXMvcmVzb3VyY2VzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uanM6IEFkZGVkLgorCiAyMDA4LTEy
LTA1ICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNpYUBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRpbmcgdGhlc2UgdGVzdCByZXN1bHRzLiAgT24gVGlnZXIgdGhlIGZyYWdtZW50IGNyZWF0
ZWQgZnJvbSBSVEZEIGRhdGEgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMt
c2V0VHJhbnNmb3JtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACitTZXJpZXMgb2YgdGVzdHMgdG8gZW5zdXJl
IGNvcnJlY3QgYmVoYXZpb3VyIG9mIGNhbnZhcy5zZXRUcmFuc2Zvcm0oKQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBpbWdkYXRhWzRdIGlzIDAKK1BBU1MgaW1nZGF0YVs1
XSBpcyAxMjgKK1BBU1MgaW1nZGF0YVs2XSBpcyAwCitQQVNTIGltZ2RhdGFbNF0gaXMgMAorUEFT
UyBpbWdkYXRhWzVdIGlzIDEyOAorUEFTUyBpbWdkYXRhWzZdIGlzIDAKK1BBU1MgaW1nZGF0YVs0
XSBpcyAwCitQQVNTIGltZ2RhdGFbNV0gaXMgMTI4CitQQVNTIGltZ2RhdGFbNl0gaXMgMAorUEFT
UyBpbWdkYXRhWzRdIGlzIDAKK1BBU1MgaW1nZGF0YVs1XSBpcyAxMjgKK1BBU1MgaW1nZGF0YVs2
XSBpcyAwCitQQVNTIGltZ2RhdGFbNF0gaXMgMAorUEFTUyBpbWdkYXRhWzVdIGlzIDEyOAorUEFT
UyBpbWdkYXRhWzZdIGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJh
bnNmb3JtLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFz
LXNldFRyYW5zZm9ybS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvY2FudmFzLXNldFRyYW5zZm9ybS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAK
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY2FudmFzLXNldFRyYW5zZm9ybS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9yZXNvdXJjZXMvY2FudmFzLXNldFRy
YW5zZm9ybS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9yZXNvdXJj
ZXMvY2FudmFzLXNldFRyYW5zZm9ybS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3Jlc291cmNlcy9jYW52YXMtc2V0VHJhbnNmb3JtLmpzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDgxIEBACitkZXNjcmlwdGlvbigiU2VyaWVzIG9mIHRlc3RzIHRvIGVuc3VyZSBj
b3JyZWN0IGJlaGF2aW91ciBvZiBjYW52YXMuc2V0VHJhbnNmb3JtKCkiKTsKK3ZhciBjdHggPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpOworCisvLyBS
ZXNldCB0aGUgQ1RNIHRvIHRoZSBpbml0aWFsIG1hdHJpeAorY3R4LmJlZ2luUGF0aCgpOworY3R4
LnNjYWxlKDAuNSwgMC41KTsKK2N0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7Citj
dHguZmlsbFN0eWxlID0gJ2dyZWVuJzsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CisK
K3ZhciBpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDEsIDEsIDk4LCA5OCk7Cit2YXIgaW1n
ZGF0YSA9IGltYWdlRGF0YS5kYXRhOworc2hvdWxkQmUoImltZ2RhdGFbNF0iLCAiMCIpOworc2hv
dWxkQmUoImltZ2RhdGFbNV0iLCAiMTI4Iik7CitzaG91bGRCZSgiaW1nZGF0YVs2XSIsICIwIik7
CisKKy8vIHNldFRyYW5zZm9ybSBzaG91bGQgbm90IGFmZmVjdCB0aGUgY3VycmVudCBwYXRoCitj
dHguYmVnaW5QYXRoKCk7CitjdHgucmVjdCgwLDAsMTAwLDEwMCk7CitjdHguc2F2ZSgpOworY3R4
LnNldFRyYW5zZm9ybSgwLjUsIDAsIDAsIDAuNSwgMTAsIDEwKTsKK2N0eC5maWxsU3R5bGUgPSAn
cmVkJzsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CitjdHgucmVzdG9yZSgpOworY3R4
LmZpbGxTdHlsZSA9ICdncmVlbic7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworCitp
bWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDEsIDEsIDk4LCA5OCk7CitpbWdkYXRhID0gaW1h
Z2VEYXRhLmRhdGE7CitzaG91bGRCZSgiaW1nZGF0YVs0XSIsICIwIik7CitzaG91bGRCZSgiaW1n
ZGF0YVs1XSIsICIxMjgiKTsKK3Nob3VsZEJlKCJpbWdkYXRhWzZdIiwgIjAiKTsKKworLy8gc2V0
VHJhbnNmb3JtIHNob3VsZCBub3QgYWZmZWN0IHRoZSBDVE0gb3V0c2lkZSBvZiBzYXZlKCkgYW5k
IHJlc3RvcmUoKQorY3R4LmJlZ2luUGF0aCgpOworY3R4LmZpbGxTdHlsZSA9ICdncmVlbic7Citj
dHguc2F2ZSgpOworY3R4LnNldFRyYW5zZm9ybSgwLjUsIDAsIDAsIDAuNSwgMCwgMCk7CitjdHgu
ZmlsbFN0eWxlID0gJ3JlZCc7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworY3R4LnJl
c3RvcmUoKTsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CisKK2ltYWdlRGF0YSA9IGN0
eC5nZXRJbWFnZURhdGEoMSwgMSwgOTgsIDk4KTsKK2ltZ2RhdGEgPSBpbWFnZURhdGEuZGF0YTsK
K3Nob3VsZEJlKCJpbWdkYXRhWzRdIiwgIjAiKTsKK3Nob3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEy
OCIpOworc2hvdWxkQmUoImltZ2RhdGFbNl0iLCAiMCIpOworCisKKy8vIHN0b3AgZHJhd2luZyBv
biBub3QtaW52ZXJ0aWJsZSBDVE0KK2N0eC5iZWdpblBhdGgoKTsKK2N0eC5maWxsU3R5bGUgPSAn
Z3JlZW4nOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKK2N0eC5zZXRUcmFuc2Zvcm0o
MCwgMCwgMCwgMCwgMCwgMCk7CitjdHguZmlsbFN0eWxlID0gJ3JlZCc7CitjdHguZmlsbFJlY3Qo
MCwgMCwgMTAwLCAxMDApOworCitpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDEsIDEsIDk4
LCA5OCk7CitpbWdkYXRhID0gaW1hZ2VEYXRhLmRhdGE7CitzaG91bGRCZSgiaW1nZGF0YVs0XSIs
ICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1XSIsICIxMjgiKTsKK3Nob3VsZEJlKCJpbWdkYXRh
WzZdIiwgIjAiKTsKKworLy8gc2V0VHJhbnNmb3JtIHdpdGggYSBub3QtaW52ZXJ0aWJsZSBtYXRy
aXggc2hvdWxkIG9ubHkgc3RvcCB0aGUgZHJhd2luZyB1cCB0byB0aGUgbmV4dCByZXN0b3JlKCkK
K2N0eC5iZWdpblBhdGgoKTsKK2N0eC5zYXZlKCk7CitjdHguc2V0VHJhbnNmb3JtKDAsIDAsIDAs
IDAsIDAsIDApOworY3R4LmZpbGxTdHlsZSA9ICdyZWQnOworY3R4LmZpbGxSZWN0KDAsIDAsIDEw
MCwgMTAwKTsKK2N0eC5yZXN0b3JlKCk7CitjdHguZmlsbFN0eWxlID0gJ2dyZWVuJzsKK2N0eC5m
aWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CisKK2ltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEo
MSwgMSwgOTgsIDk4KTsKK2ltZ2RhdGEgPSBpbWFnZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJpbWdk
YXRhWzRdIiwgIjAiKTsKK3Nob3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEyOCIpOworc2hvdWxkQmUo
ImltZ2RhdGFbNl0iLCAiMCIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25807</attachid>
            <date>2008-12-05 23:35:57 -0800</date>
            <delta_ts>2008-12-06 10:37:48 -0800</delta_ts>
            <desc>setTransform() for Canvas</desc>
            <filename>setTransform2.patch</filename>
            <type>text/plain</type>
            <size>19516</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTA0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDgtMTItMDUgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igc2V0VHJhbnNmb3JtKCkgaW4gY2FudmFzLgorCisgICAgICAgIDxjYW52YXM+
IGxhY2tzIHRyYW5zZm9ybSgpIGFuZCBzZXRUcmFuc2Zvcm0oKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDQKKworICAgICAgICBUZXN0OiBmYXN0
L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwKKworICAgICAgICAqIGh0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNsb3NlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnF1YWRyYXRpY0N1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjphcmMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc1Bv
aW50SW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlRnJvbVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRs
OgorCiAyMDA4LTEyLTA1ICBGaW5udXIgVGhvcmFyaW5zc29uICA8ZmlubnVyLndlYmtpdEBnbWFp
bC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMzkwNDQpCisrKyBX
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTksNiArOTksNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0YXRlOjpTdGF0ZSgp
CiAgICAgLCBtX3NoYWRvd0NvbG9yKCJibGFjayIpCiAgICAgLCBtX2dsb2JhbEFscGhhKDEpCiAg
ICAgLCBtX2dsb2JhbENvbXBvc2l0ZShDb21wb3NpdGVTb3VyY2VPdmVyKQorICAgICwgbV9pbnZl
cnRpYmxlQ1RNKHRydWUpCiAgICAgLCBtX3RleHRBbGlnbihTdGFydFRleHRBbGlnbikKICAgICAs
IG1fdGV4dEJhc2VsaW5lKEFscGhhYmV0aWNUZXh0QmFzZWxpbmUpCiAgICAgLCBtX3VucGFyc2Vk
Rm9udChkZWZhdWx0Rm9udCkKQEAgLTE1MSw2ICsxNTIsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U3Ryb2tlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0Nv
bnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCku
bV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgc3RhdGUoKS5tX3N0cm9rZVN0
eWxlLT5hcHBseVN0cm9rZUNvbG9yKGMpOwogfQogCkBAIC0xNzUsNiArMTc4LDggQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdAogICAgIEdyYXBoaWNzQ29udGV4dCog
YyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIHN0YXRl
KCkubV9maWxsU3R5bGUtPmFwcGx5RmlsbENvbG9yKGMpOwogfQogCkBAIC0zMjcsOCArMzMyLDE4
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZShmbG8KICAgICBHcmFwaGlj
c0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0
dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsK
KworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJhbnNmb3Jt
OworICAgIG5ld1RyYW5zZm9ybS5zY2FsZShzeCwgc3kpOworICAgIGlmICghbmV3VHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFs
c2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0g
bmV3VHJhbnNmb3JtOwogICAgIGMtPnNjYWxlKEZsb2F0U2l6ZShzeCwgc3kpKTsKLSAgICBzdGF0
ZSgpLm1fdHJhbnNmb3JtLnNjYWxlKHN4LCBzeSk7CiAgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZp
bmVUcmFuc2Zvcm0oKS5zY2FsZSgxLjAvc3gsIDEuMC9zeSkpOwogfQogCkBAIC0zMzcsOCArMzUy
LDE4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmwKICAgICBHcmFw
aGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAg
cmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVy
bjsKKworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBzdGF0ZSgpLm1fdHJhbnNm
b3JtOworICAgIG5ld1RyYW5zZm9ybS5yb3RhdGUoYW5nbGVJblJhZGlhbnMgLyBwaURvdWJsZSAq
IDE4MC4wKTsKKyAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAg
ICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT5yb3Rh
dGUoYW5nbGVJblJhZGlhbnMpOwotICAgIHN0YXRlKCkubV90cmFuc2Zvcm0ucm90YXRlKGFuZ2xl
SW5SYWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCk7CiAgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZp
bmVUcmFuc2Zvcm0oKS5yb3RhdGUoLWFuZ2xlSW5SYWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCkp
OwogfQogCkBAIC0zNDcsOCArMzcyLDE4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp0cmFuc2xhdGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwog
ICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGli
bGVDVE0pCisgICAgICAgIHJldHVybjsKKworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zv
cm0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIG5ld1RyYW5zZm9ybS50cmFuc2xhdGUodHgs
IHR5KTsKKyAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT50cmFuc2xh
dGUodHgsIHR5KTsKLSAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtLnRyYW5zbGF0ZSh0eCwgdHkpOwog
ICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKC10eCwgLXR5
KSk7CiB9CiAKQEAgLTM1NywxNyArMzkyLDUxIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjp0cmFuc2Zvcm0KICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgp
OwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBIVE1MNSAzLjE0LjExLjEg
LS0gaWdub3JlIGFueSBjYWxscyB0aGF0IHBhc3Mgbm9uLWZpbml0ZSBudW1iZXJzCiAgICAgaWYg
KCFpc2Zpbml0ZShtMTEpIHwgIWlzZmluaXRlKG0yMSkgfCAhaXNmaW5pdGUoZHgpIHwgCiAgICAg
ICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikgfCAhaXNmaW5pdGUoZHkpKQogICAg
ICAgICByZXR1cm47CisKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKG0xMSwgbTEyLCBt
MjEsIG0yMiwgZHgsIGR5KTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBz
dGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIG5ld1RyYW5zZm9ybS5tdWx0aXBseSh0cmFuc2Zvcm0p
OworICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIHN0YXRl
KCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPmNvbmNhdENUTSh0
cmFuc2Zvcm0pOwotICAgIHN0YXRlKCkubV90cmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtKTsK
ICAgICBtX3BhdGgudHJhbnNmb3JtKHRyYW5zZm9ybS5pbnZlcnNlKCkpOwogfQogCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VHJhbnNmb3JtKGZsb2F0IG0xMSwgZmxvYXQgbTEy
LCBmbG9hdCBtMjEsIGZsb2F0IG0yMiwgZmxvYXQgZHgsIGZsb2F0IGR5KQoreworICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIC8vIEhUTUw1IDMuMTQuMTEuMSAtLSBpZ25vcmUgYW55IGNhbGxzIHRoYXQg
cGFzcyBub24tZmluaXRlIG51bWJlcnMKKyAgICBpZiAoIWlzZmluaXRlKG0xMSkgfCAhaXNmaW5p
dGUobTIxKSB8ICFpc2Zpbml0ZShkeCkgfCAKKyAgICAgICAgIWlzZmluaXRlKG0xMikgfCAhaXNm
aW5pdGUobTIyKSB8ICFpc2Zpbml0ZShkeSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIGlmICghY3RtLmlzSW52
ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm47CisgICAgYy0+Y29uY2F0Q1RNKGN0bS5pbnZlcnNl
KCkpOworICAgIHN0YXRlKCkubV90cmFuc2Zvcm0ubXVsdGlwbHkoY3RtLmludmVyc2UoKSk7Cisg
ICAgbV9wYXRoLnRyYW5zZm9ybShjdG0pOworCisgICAgdHJhbnNmb3JtKG0xMSwgbTEyLCBtMjEs
IG0yMiwgZHgsIGR5KTsKK30KKwogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0
cm9rZUNvbG9yKGNvbnN0IFN0cmluZyYgY29sb3IpCiB7CiAgICAgc2V0U3Ryb2tlU3R5bGUoQ2Fu
dmFzU3R5bGU6OmNyZWF0ZShjb2xvcikpOwpAQCAtNDMwLDExICs0OTksMTUgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDbwogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6YmVnaW5QYXRoKCkKIHsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RN
KQorICAgICAgICByZXR1cm47CiAgICAgbV9wYXRoLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpjbG9zZVBhdGgoKQogeworICAgIGlmICghc3RhdGUoKS5tX2lu
dmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguY2xvc2VTdWJwYXRoKCk7
CiB9CiAKQEAgLTQ0Miw2ICs1MTUsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
bW92ZVRvKGZsCiB7CiAgICAgaWYgKCFpc2Zpbml0ZSh4KSB8ICFpc2Zpbml0ZSh5KSkKICAgICAg
ICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJl
dHVybjsKICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCwgeSkpOwogfQogCkBAIC00NDks
NiArNTI0LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyhmbAogewog
ICAgIGlmICghaXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUoeSkpCiAgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgbV9w
YXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKIH0KIApAQCAtNDU2LDYgKzUzMyw4IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpxdWFkcmF0aWMKIHsKICAgICBpZiAoIWlz
ZmluaXRlKGNweCkgfCAhaXNmaW5pdGUoY3B5KSB8ICFpc2Zpbml0ZSh4KSB8ICFpc2Zpbml0ZSh5
KSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisg
ICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRkUXVhZEN1cnZlVG8oRmxvYXRQb2ludChjcHgs
IGNweSksIEZsb2F0UG9pbnQoeCwgeSkpOwogfQogCkBAIC00NjMsNiArNTQyLDggQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmJlemllckN1cgogewogICAgIGlmICghaXNmaW5pdGUo
Y3AxeCkgfCAhaXNmaW5pdGUoY3AxeSkgfCAhaXNmaW5pdGUoY3AyeCkgfCAhaXNmaW5pdGUoY3Ay
eSkgfCAhaXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUoeSkpCiAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgbV9wYXRo
LmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludChjcDF4LCBjcDF5KSwgRmxvYXRQb2ludChjcDJ4
LCBjcDJ5KSwgRmxvYXRQb2ludCh4LCB5KSk7CiB9CiAKQEAgLTQ3Niw3ICs1NTcsOCBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8oZmxvCiAgICAgICAgIGVjID0gSU5ERVhf
U0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisgICAgaWYgKCFzdGF0ZSgp
Lm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5hZGRBcmNUbyhG
bG9hdFBvaW50KHgwLCB5MCksIEZsb2F0UG9pbnQoeDEsIHkxKSwgcik7CiB9CiAKQEAgLTQ5MCw3
ICs1NzIsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjKGZsb2F0CiAgICAg
ICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisg
ICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1f
cGF0aC5hZGRBcmMoRmxvYXRQb2ludCh4LCB5KSwgciwgc2EsIGVhLCBhbnRpY2xvY2t3aXNlKTsK
IH0KICAgICAKQEAgLTUxNiw3ICs1OTksOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6cmVjdChmbG9hCiB7CiAgICAgaWYgKCF2YWxpZGF0ZVJlY3RGb3JDYW52YXMoeCwgeSwgd2lk
dGgsIGhlaWdodCkpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisgICAgaWYgKCFzdGF0ZSgp
Lm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5hZGRSZWN0KEZs
b2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CiB9CiAKQEAgLTUzNCw2ICs2MTgsOCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbCgpCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAKICAgICBj
LT5iZWdpblBhdGgoKTsKICAgICBjLT5hZGRQYXRoKG1fcGF0aCk7CkBAIC01NTIsNiArNjM4LDgg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZSgpCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAg
ICAgYy0+YmVnaW5QYXRoKCk7CiAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwogCkBAIC01NzYsNiAr
NjY0LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsaXAoKQogICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJu
OwogICAgIGMtPmNsaXAobV9wYXRoKTsKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAg
ICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpOwpAQCAt
NTg3LDEyICs2NzcsMTEgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmlzUG9pbnRJ
bgogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFj
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNU
TSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgRmxvYXRQb2ludCBwb2ludCh4LCB5KTsK
LSAgICAvLyBXZSBoYXZlIHRvIGludmVydCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gdG8gZW5zdXJl
IHdlIGNvcnJlY3RseSBoYW5kbGUgdGhlCi0gICAgLy8gdHJhbnNmb3JtcyBhcHBsaWVkIHRvIHRo
ZSBjdXJyZW50IHBhdGguCiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkubV90cmFu
c2Zvcm07Ci0gICAgaWYgKCFjdG0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBGbG9hdFBvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBjdG0uaW52ZXJzZSgpLm1hcFBv
aW50KHBvaW50KTsKICAgICByZXR1cm4gbV9wYXRoLmNvbnRhaW5zKHRyYW5zZm9ybWVkUG9pbnQp
OwogfQpAQCAtNjA0LDYgKzY5Myw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpj
bGVhclJlY3QKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAg
IGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVD
VE0pCisgICAgICAgIHJldHVybjsKICAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKICAgICB3aWxsRHJhdyhyZWN0KTsKICAgICBjLT5jbGVhclJlY3QocmVjdCk7CkBAIC02
MTcsNiArNzA4LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxSZWN0KAog
ICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQog
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAg
ICAgd2lsbERyYXcocmVjdCk7CkBAIC02NDQsNiArNzM3LDggQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnN0cm9rZVJlYwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdD
b250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgp
Lm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRSZWN0IHJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKQEAgLTg4Nyw2ICs5ODIsOCBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJh
d2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0
YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAKICAgICBDYWNoZWRJbWFn
ZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKICAgICBpZiAoIWNhY2hlZElt
YWdlKQpAQCAtOTM3LDYgKzEwMzQsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAg
ICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxl
Q1RNKQorICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIEZsb2F0UmVjdCBzb3VyY2VSZWN0
ID0gYy0+cm91bmRUb0RldmljZVBpeGVscyhzcmNSZWN0KTsKICAgICBGbG9hdFJlY3QgZGVzdFJl
Y3QgPSBjLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKGRzdFJlY3QpOwpAQCAtOTc2LDYgKzEwNzUsOCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAK
ICAgICBDb21wb3NpdGVPcGVyYXRvciBvcDsKICAgICBpZiAoIXBhcnNlQ29tcG9zaXRlT3BlcmF0
b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBvcCkpCkBAIC0xMDYxLDYgKzExNjIsOCBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERyYXcoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAKICAgICBtX2Nh
bnZhcy0+d2lsbERyYXcoYy0+Z2V0Q1RNKCkubWFwUmVjdChyKSk7CiB9CkBAIC0xMjU3LDYgKzEz
NjAsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgY29uc3QgRm9udCYgZm9udCA9IGFjY2Vzc0ZvbnQoKTsKIApJbmRleDog
V2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMzkwNDQpCisr
KyBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNSw2ICsxMDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcm90
YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKICAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQg
dHgsIGZsb2F0IHR5KTsKICAgICAgICAgdm9pZCB0cmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9hdCBt
MTIsIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBkeCwgZmxvYXQgZHkpOworICAgICAgICB2
b2lkIHNldFRyYW5zZm9ybShmbG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBt
MjIsIGZsb2F0IGR4LCBmbG9hdCBkeSk7CiAKICAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihj
b25zdCBTdHJpbmcmIGNvbG9yKTsKICAgICAgICAgdm9pZCBzZXRTdHJva2VDb2xvcihmbG9hdCBn
cmF5TGV2ZWwpOwpAQCAtMjA5LDYgKzIxMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CiAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRv
ciBtX2dsb2JhbENvbXBvc2l0ZTsKICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5z
Zm9ybTsKKyAgICAgICAgICAgIGJvb2wgbV9pbnZlcnRpYmxlQ1RNOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBUZXh0IHN0YXRlLgogICAgICAgICAgICAgVGV4dEFsaWduIG1fdGV4dEFs
aWduOwpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHJl
dmlzaW9uIDM5MDQ0KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAg
ICB2b2lkIHJvdGF0ZShpbiBmbG9hdCBhbmdsZSk7CiAgICAgICAgIHZvaWQgdHJhbnNsYXRlKGlu
IGZsb2F0IHR4LCBpbiBmbG9hdCB0eSk7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGluIGZsb2F0
IG0xMSwgaW4gZmxvYXQgbTEyLCBpbiBmbG9hdCBtMjEsIGluIGZsb2F0IG0yMiwgaW4gZmxvYXQg
ZHgsIGluIGZsb2F0IGR5KTsKKyAgICAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oaW4gZmxvYXQgbTEx
LCBpbiBmbG9hdCBtMTIsIGluIGZsb2F0IG0yMSwgaW4gZmxvYXQgbTIyLCBpbiBmbG9hdCBkeCwg
aW4gZmxvYXQgZHkpOwogCiAgICAgICAgIGF0dHJpYnV0ZSBmbG9hdCBnbG9iYWxBbHBoYTsKICAg
ICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGdsb2Jh
bENvbXBvc2l0ZU9wZXJhdGlvbjsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5MDQ2KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMTIt
MDUgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgY2FudmFzJ3Mgc2V0
VHJhbnNmb3JtKCkgYW5kIHVwZGF0ZWQgYW4gZXhpc3Rpbmcgb25lLgorCisgICAgICAgICogZmFz
dC9jYW52YXMvY2FudmFzLXNldFRyYW5zZm9ybS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jYW52YXMvcmVzb3VyY2VzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uanM6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6
CisKIDIwMDgtMTItMDUgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4K
IAogICAgICAgICBVcGRhdGluZyB0aGVzZSB0ZXN0IHJlc3VsdHMuICBPbiBUaWdlciB0aGUgZnJh
Z21lbnQgY3JlYXRlZCBmcm9tIFJURkQgZGF0YSAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0tZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXNldFRyYW5zZm9ybS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKK1NlcmllcyBvZiB0ZXN0
cyB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvdXIgb2YgY2FudmFzLnNldFRyYW5zZm9ybSgpCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGltZ2RhdGFbNF0gaXMgMAorUEFT
UyBpbWdkYXRhWzVdIGlzIDEyOAorUEFTUyBpbWdkYXRhWzZdIGlzIDAKK1BBU1MgaW1nZGF0YVs0
XSBpcyAwCitQQVNTIGltZ2RhdGFbNV0gaXMgMTI4CitQQVNTIGltZ2RhdGFbNl0gaXMgMAorUEFT
UyBpbWdkYXRhWzRdIGlzIDAKK1BBU1MgaW1nZGF0YVs1XSBpcyAxMjgKK1BBU1MgaW1nZGF0YVs2
XSBpcyAwCitQQVNTIGltZ2RhdGFbNF0gaXMgMAorUEFTUyBpbWdkYXRhWzVdIGlzIDEyOAorUEFT
UyBpbWdkYXRhWzZdIGlzIDAKK1BBU1MgaW1nZGF0YVs0XSBpcyAwCitQQVNTIGltZ2RhdGFbNV0g
aXMgMTI4CitQQVNTIGltZ2RhdGFbNl0gaXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2Nh
bnZhcy1zZXRUcmFuc2Zvcm0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNiBAQAorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jYW52YXMtc2V0VHJhbnNmb3Jt
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc291cmNlcy9j
YW52YXMtc2V0VHJhbnNmb3JtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3Jlc291cmNlcy9jYW52YXMtc2V0VHJhbnNmb3JtLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvcmVzb3VyY2VzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKK2Rlc2NyaXB0aW9uKCJTZXJpZXMgb2YgdGVzdHMg
dG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3VyIG9mIGNhbnZhcy5zZXRUcmFuc2Zvcm0oKSIpOwor
dmFyIGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJk
Jyk7CisKKy8vIFJlc2V0IHRoZSBDVE0gdG8gdGhlIGluaXRpYWwgbWF0cml4CitjdHguYmVnaW5Q
YXRoKCk7CitjdHguc2NhbGUoMC41LCAwLjUpOworY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAx
LCAwLCAwKTsKK2N0eC5maWxsU3R5bGUgPSAnZ3JlZW4nOworY3R4LmZpbGxSZWN0KDAsIDAsIDEw
MCwgMTAwKTsKKwordmFyIGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTgsIDk4
KTsKK3ZhciBpbWdkYXRhID0gaW1hZ2VEYXRhLmRhdGE7CitzaG91bGRCZSgiaW1nZGF0YVs0XSIs
ICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1XSIsICIxMjgiKTsKK3Nob3VsZEJlKCJpbWdkYXRh
WzZdIiwgIjAiKTsKKworLy8gc2V0VHJhbnNmb3JtIHNob3VsZCBub3QgYWZmZWN0IHRoZSBjdXJy
ZW50IHBhdGgKK2N0eC5iZWdpblBhdGgoKTsKK2N0eC5yZWN0KDAsMCwxMDAsMTAwKTsKK2N0eC5z
YXZlKCk7CitjdHguc2V0VHJhbnNmb3JtKDAuNSwgMCwgMCwgMC41LCAxMCwgMTApOworY3R4LmZp
bGxTdHlsZSA9ICdyZWQnOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKK2N0eC5yZXN0
b3JlKCk7CitjdHguZmlsbFN0eWxlID0gJ2dyZWVuJzsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAs
IDEwMCk7CisKK2ltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTgsIDk4KTsKK2lt
Z2RhdGEgPSBpbWFnZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJpbWdkYXRhWzRdIiwgIjAiKTsKK3No
b3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEyOCIpOworc2hvdWxkQmUoImltZ2RhdGFbNl0iLCAiMCIp
OworCisvLyBzZXRUcmFuc2Zvcm0gc2hvdWxkIG5vdCBhZmZlY3QgdGhlIENUTSBvdXRzaWRlIG9m
IHNhdmUoKSBhbmQgcmVzdG9yZSgpCitjdHguYmVnaW5QYXRoKCk7CitjdHguZmlsbFN0eWxlID0g
J2dyZWVuJzsKK2N0eC5zYXZlKCk7CitjdHguc2V0VHJhbnNmb3JtKDAuNSwgMCwgMCwgMC41LCAw
LCAwKTsKK2N0eC5maWxsU3R5bGUgPSAncmVkJzsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEw
MCk7CitjdHgucmVzdG9yZSgpOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKworaW1h
Z2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgxLCAxLCA5OCwgOTgpOworaW1nZGF0YSA9IGltYWdl
RGF0YS5kYXRhOworc2hvdWxkQmUoImltZ2RhdGFbNF0iLCAiMCIpOworc2hvdWxkQmUoImltZ2Rh
dGFbNV0iLCAiMTI4Iik7CitzaG91bGRCZSgiaW1nZGF0YVs2XSIsICIwIik7CisKKworLy8gc3Rv
cCBkcmF3aW5nIG9uIG5vdC1pbnZlcnRpYmxlIENUTQorY3R4LmJlZ2luUGF0aCgpOworY3R4LmZp
bGxTdHlsZSA9ICdncmVlbic7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworY3R4LnNl
dFRyYW5zZm9ybSgwLCAwLCAwLCAwLCAwLCAwKTsKK2N0eC5maWxsU3R5bGUgPSAncmVkJzsKK2N0
eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CisKK2ltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURh
dGEoMSwgMSwgOTgsIDk4KTsKK2ltZ2RhdGEgPSBpbWFnZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJp
bWdkYXRhWzRdIiwgIjAiKTsKK3Nob3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEyOCIpOworc2hvdWxk
QmUoImltZ2RhdGFbNl0iLCAiMCIpOworCisvLyBzZXRUcmFuc2Zvcm0gd2l0aCBhIG5vdC1pbnZl
cnRpYmxlIG1hdHJpeCBzaG91bGQgb25seSBzdG9wIHRoZSBkcmF3aW5nIHVwIHRvIHRoZSBuZXh0
IHJlc3RvcmUoKQorY3R4LmJlZ2luUGF0aCgpOworY3R4LnNhdmUoKTsKK2N0eC5zZXRUcmFuc2Zv
cm0oMCwgMCwgMCwgMCwgMCwgMCk7CitjdHguZmlsbFN0eWxlID0gJ3JlZCc7CitjdHguZmlsbFJl
Y3QoMCwgMCwgMTAwLCAxMDApOworY3R4LnJlc3RvcmUoKTsKK2N0eC5maWxsU3R5bGUgPSAnZ3Jl
ZW4nOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKworaW1hZ2VEYXRhID0gY3R4Lmdl
dEltYWdlRGF0YSgxLCAxLCA5OCwgOTgpOworaW1nZGF0YSA9IGltYWdlRGF0YS5kYXRhOworc2hv
dWxkQmUoImltZ2RhdGFbNF0iLCAiMCIpOworc2hvdWxkQmUoImltZ2RhdGFbNV0iLCAiMTI4Iik7
CitzaG91bGRCZSgiaW1nZGF0YVs2XSIsICIwIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0
aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5k
b3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAzOTA0NCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNSw2ICszMTUsNyBAQCB3aW5kb3cuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELnByb3RvdHlwCiB3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3Rv
dHlwZS5zZXRNaXRlckxpbWl0IFtmdW5jdGlvbl0KIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQucHJvdG90eXBlLnNldFNoYWRvdyBbZnVuY3Rpb25dCiB3aW5kb3cuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELnByb3RvdHlwZS5zZXRTdHJva2VDb2xvciBbZnVuY3Rpb25dCit3aW5kb3cu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0gW2Z1bmN0aW9u
XQogd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUuc3Ryb2tlIFtmdW5j
dGlvbl0KIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLnN0cm9rZVJl
Y3QgW2Z1bmN0aW9uXQogd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUu
c3Ryb2tlVGV4dCBbZnVuY3Rpb25dCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25815</attachid>
            <date>2008-12-06 10:37:48 -0800</date>
            <delta_ts>2008-12-06 22:56:56 -0800</delta_ts>
            <desc>setTransform() for Canvas</desc>
            <filename>setTransform2.patch</filename>
            <type>text/plain</type>
            <size>19911</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTA2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDgtMTItMDYgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igc2V0VHJhbnNmb3JtKCkgaW4gY2FudmFzLgorCisgICAgICAgIDxjYW52YXM+
IGxhY2tzIHRyYW5zZm9ybSgpIGFuZCBzZXRUcmFuc2Zvcm0oKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDQKKworICAgICAgICBUZXN0OiBmYXN0
L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwKKworICAgICAgICAqIGh0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNsb3NlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnF1YWRyYXRpY0N1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjphcmMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc1Bv
aW50SW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlRnJvbVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRs
OgorCiAyMDA4LTEyLTA2ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAg
ICAgICAgQnVnIDIyNjY2OiBDbGVhbiB1cCBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aGVuIGNvbGxl
Y3RpbmcgVVJMcyBvZiBzdWJyZXNvdXJjZXMgZm9yIHdlYmFyY2hpdmVzCkluZGV4OiBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMzkwNDQpCisrKyBX
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk5LDYgKzEw
MCw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKCkKICAgICAsIG1f
c2hhZG93Q29sb3IoImJsYWNrIikKICAgICAsIG1fZ2xvYmFsQWxwaGEoMSkKICAgICAsIG1fZ2xv
YmFsQ29tcG9zaXRlKENvbXBvc2l0ZVNvdXJjZU92ZXIpCisgICAgLCBtX2ludmVydGlibGVDVE0o
dHJ1ZSkKICAgICAsIG1fdGV4dEFsaWduKFN0YXJ0VGV4dEFsaWduKQogICAgICwgbV90ZXh0QmFz
ZWxpbmUoQWxwaGFiZXRpY1RleHRCYXNlbGluZSkKICAgICAsIG1fdW5wYXJzZWRGb250KGRlZmF1
bHRGb250KQpAQCAtMTUxLDYgKzE1Myw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzZXRTdHJva2UKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwog
ICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGli
bGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmFwcGx5
U3Ryb2tlQ29sb3IoYyk7CiB9CiAKQEAgLTE3NSw2ICsxNzksOCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRl
KCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgc3RhdGUoKS5tX2ZpbGxT
dHlsZS0+YXBwbHlGaWxsQ29sb3IoYyk7CiB9CiAKQEAgLTMyNyw4ICszMzMsMTggQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNjYWxlKGZsbwogICAgIEdyYXBoaWNzQ29udGV4dCog
YyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgbmV3
VHJhbnNmb3JtLnNjYWxlKHN4LCBzeSk7CisgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpIHsKKyAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRlKCkubV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zv
cm07CiAgICAgYy0+c2NhbGUoRmxvYXRTaXplKHN4LCBzeSkpOwotICAgIHN0YXRlKCkubV90cmFu
c2Zvcm0uc2NhbGUoc3gsIHN5KTsKICAgICBtX3BhdGgudHJhbnNmb3JtKEFmZmluZVRyYW5zZm9y
bSgpLnNjYWxlKDEuMC9zeCwgMS4wL3N5KSk7CiB9CiAKQEAgLTMzNyw4ICszNTMsMTggQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJvdGF0ZShmbAogICAgIEdyYXBoaWNzQ29udGV4
dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAg
bmV3VHJhbnNmb3JtLnJvdGF0ZShhbmdsZUluUmFkaWFucyAvIHBpRG91YmxlICogMTgwLjApOwor
ICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIHN0YXRlKCku
bV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
dGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPnJvdGF0ZShhbmdsZUlu
UmFkaWFucyk7Ci0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybS5yb3RhdGUoYW5nbGVJblJhZGlhbnMg
LyBwaURvdWJsZSAqIDE4MC4wKTsKICAgICBtX3BhdGgudHJhbnNmb3JtKEFmZmluZVRyYW5zZm9y
bSgpLnJvdGF0ZSgtYW5nbGVJblJhZGlhbnMgLyBwaURvdWJsZSAqIDE4MC4wKSk7CiB9CiAKQEAg
LTM0Nyw4ICszNzMsMTggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0
ZQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFj
KQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHN0YXRl
KCkubV90cmFuc2Zvcm07CisgICAgbmV3VHJhbnNmb3JtLnRyYW5zbGF0ZSh0eCwgdHkpOworICAg
IGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgIHN0YXRlKCkubV9p
bnZlcnRpYmxlQ1RNID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0
ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPnRyYW5zbGF0ZSh0eCwgdHkp
OwotICAgIHN0YXRlKCkubV90cmFuc2Zvcm0udHJhbnNsYXRlKHR4LCB0eSk7CiAgICAgbV9wYXRo
LnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoLXR4LCAtdHkpKTsKIH0KIApA
QCAtMzU3LDE3ICszOTMsNTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5z
Zm9ybQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYg
KCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkK
KyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIEhUTUw1IDMuMTQuMTEuMSAtLSBpZ25vcmUg
YW55IGNhbGxzIHRoYXQgcGFzcyBub24tZmluaXRlIG51bWJlcnMKICAgICBpZiAoIWlzZmluaXRl
KG0xMSkgfCAhaXNmaW5pdGUobTIxKSB8ICFpc2Zpbml0ZShkeCkgfCAKICAgICAgICAgIWlzZmlu
aXRlKG0xMikgfCAhaXNmaW5pdGUobTIyKSB8ICFpc2Zpbml0ZShkeSkpCiAgICAgICAgIHJldHVy
bjsKKwogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIyLCBk
eCwgZHkpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHN0YXRlKCkubV90
cmFuc2Zvcm07CisgICAgbmV3VHJhbnNmb3JtLm11bHRpcGx5KHRyYW5zZm9ybSk7CisgICAgaWYg
KCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0gPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRlKCku
bV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7
Ci0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybS5tdWx0aXBseSh0cmFuc2Zvcm0pOwogICAgIG1fcGF0
aC50cmFuc2Zvcm0odHJhbnNmb3JtLmludmVyc2UoKSk7CiB9CiAKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRUcmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0y
MSwgZmxvYXQgbTIyLCBmbG9hdCBkeCwgZmxvYXQgZHkpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgLy8gSFRNTDUgMy4xNC4xMS4xIC0tIGlnbm9yZSBhbnkgY2FsbHMgdGhhdCBwYXNzIG5vbi1m
aW5pdGUgbnVtYmVycworICAgIGlmICghaXNmaW5pdGUobTExKSB8ICFpc2Zpbml0ZShtMjEpIHwg
IWlzZmluaXRlKGR4KSB8IAorICAgICAgICAhaXNmaW5pdGUobTEyKSB8ICFpc2Zpbml0ZShtMjIp
IHwgIWlzZmluaXRlKGR5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGN0bSA9IHN0YXRlKCkubV90cmFuc2Zvcm07CisgICAgaWYgKCFjdG0uaXNJbnZlcnRpYmxlKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBjLT5jb25jYXRDVE0oYy0+Z2V0Q1RNKCkuaW52ZXJzZSgp
KTsKKyAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtLm11bHRpcGx5KGN0bS5pbnZlcnNlKCkpOworICAg
IG1fcGF0aC50cmFuc2Zvcm0oY3RtKTsKKworICAgIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBt
MjIsIGR4LCBkeSk7Cit9CisKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJv
a2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKQogewogICAgIHNldFN0cm9rZVN0eWxlKENhbnZh
c1N0eWxlOjpjcmVhdGUoY29sb3IpKTsKQEAgLTQzMCwxMSArNTAwLDE1IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ28KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmJlZ2luUGF0aCgpCiB7CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkK
KyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5jbGVhcigpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Y2xvc2VQYXRoKCkKIHsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZl
cnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgbV9wYXRoLmNsb3NlU3VicGF0aCgpOwog
fQogCkBAIC00NDIsNiArNTE2LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1v
dmVUbyhmbAogewogICAgIGlmICghaXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUoeSkpCiAgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1
cm47CiAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKIH0KIApAQCAtNDQ5LDYg
KzUyNSw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lVG8oZmwKIHsKICAg
ICBpZiAoIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0
aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7CiB9CiAKQEAgLTQ1Niw2ICs1MzQsOCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cXVhZHJhdGljCiB7CiAgICAgaWYgKCFpc2Zp
bml0ZShjcHgpIHwgIWlzZmluaXRlKGNweSkgfCAhaXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUoeSkp
CiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAg
ICAgICByZXR1cm47CiAgICAgbV9wYXRoLmFkZFF1YWRDdXJ2ZVRvKEZsb2F0UG9pbnQoY3B4LCBj
cHkpLCBGbG9hdFBvaW50KHgsIHkpKTsKIH0KIApAQCAtNDYzLDYgKzU0Myw4IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXIKIHsKICAgICBpZiAoIWlzZmluaXRlKGNw
MXgpIHwgIWlzZmluaXRlKGNwMXkpIHwgIWlzZmluaXRlKGNwMngpIHwgIWlzZmluaXRlKGNwMnkp
IHwgIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkpKQogICAgICAgICByZXR1cm47CisgICAgaWYg
KCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5h
ZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3AxeCwgY3AxeSksIEZsb2F0UG9pbnQoY3AyeCwg
Y3AyeSksIEZsb2F0UG9pbnQoeCwgeSkpOwogfQogCkBAIC00NzYsNyArNTU4LDggQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyY1RvKGZsbwogICAgICAgICBlYyA9IElOREVYX1NJ
WkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorICAgIGlmICghc3RhdGUoKS5t
X2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRkQXJjVG8oRmxv
YXRQb2ludCh4MCwgeTApLCBGbG9hdFBvaW50KHgxLCB5MSksIHIpOwogfQogCkBAIC00OTAsNyAr
NTczLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyYyhmbG9hdAogICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorICAg
IGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3Bh
dGguYWRkQXJjKEZsb2F0UG9pbnQoeCwgeSksIHIsIHNhLCBlYSwgYW50aWNsb2Nrd2lzZSk7CiB9
CiAgICAgCkBAIC01MTYsNyArNjAwLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnJlY3QoZmxvYQogewogICAgIGlmICghdmFsaWRhdGVSZWN0Rm9yQ2FudmFzKHgsIHksIHdpZHRo
LCBoZWlnaHQpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIGlmICghc3RhdGUoKS5t
X2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRkUmVjdChGbG9h
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwogfQogCkBAIC01MzQsNiArNjE5LDggQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwoKQogICAgIEdyYXBoaWNzQ29udGV4dCog
YyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgYy0+
YmVnaW5QYXRoKCk7CiAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwpAQCAtNTUyLDYgKzYzOSw4IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2UoKQogICAgIEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47
CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAg
IGMtPmJlZ2luUGF0aCgpOwogICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKIApAQCAtNTc2LDYgKzY2
NSw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGlwKCkKICAgICBHcmFwaGlj
c0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0
dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsK
ICAgICBjLT5jbGlwKG1fcGF0aCk7CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAg
IGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsKQEAgLTU4
NywxMiArNjc4LDExIEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc1BvaW50SW4K
ICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEZsb2F0UG9pbnQgcG9pbnQoeCwgeSk7Ci0g
ICAgLy8gV2UgaGF2ZSB0byBpbnZlcnQgdGhlIGN1cnJlbnQgdHJhbnNmb3JtIHRvIGVuc3VyZSB3
ZSBjb3JyZWN0bHkgaGFuZGxlIHRoZQotICAgIC8vIHRyYW5zZm9ybXMgYXBwbGllZCB0byB0aGUg
Y3VycmVudCBwYXRoLgogICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNm
b3JtOwotICAgIGlmICghY3RtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZFBvaW50ID0gY3RtLmludmVyc2UoKS5tYXBQb2lu
dChwb2ludCk7CiAgICAgcmV0dXJuIG1fcGF0aC5jb250YWlucyh0cmFuc2Zvcm1lZFBvaW50KTsK
IH0KQEAgLTYwNCw2ICs2OTQsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xl
YXJSZWN0CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBp
ZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RN
KQorICAgICAgICByZXR1cm47CiAgICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAgICAgYy0+Y2xlYXJSZWN0KHJlY3QpOwpAQCAtNjE3
LDYgKzcwOSw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVjdCgKICAg
ICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAg
ICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAg
IHJldHVybjsKIAogICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAg
IHdpbGxEcmF3KHJlY3QpOwpAQCAtNjQ0LDYgKzczOCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzdHJva2VSZWMKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29u
dGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5t
X2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCByZWN0KHgs
IHksIHdpZHRoLCBoZWlnaHQpOwogCkBAIC04ODcsNiArOTgzLDggQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdp
bmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0
ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CiAgICAgaWYgKCFjYWNoZWRJbWFn
ZSkKQEAgLTkzNyw2ICsxMDM1LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRy
YXdJbWFnZQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAg
aWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNU
TSkKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdCA9
IGMtPnJvdW5kVG9EZXZpY2VQaXhlbHMoc3JjUmVjdCk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
ID0gYy0+cm91bmRUb0RldmljZVBpeGVscyhkc3RSZWN0KTsKQEAgLTk3Niw2ICsxMDc2LDggQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47
CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgQ29tcG9zaXRlT3BlcmF0b3Igb3A7CiAgICAgaWYgKCFwYXJzZUNvbXBvc2l0ZU9wZXJhdG9y
KGNvbXBvc2l0ZU9wZXJhdGlvbiwgb3ApKQpAQCAtMTA2MSw2ICsxMTYzLDggQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KAogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9
IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYg
KCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgbV9jYW52
YXMtPndpbGxEcmF3KGMtPmdldENUTSgpLm1hcFJlY3QocikpOwogfQpAQCAtMTI1Nyw2ICsxMzYx
LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBhY2Nlc3NGb250KCk7CiAKSW5kZXg6IFdl
YkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDM5MDQ0KQorKysg
V2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNiArMTA1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJvdGF0
ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7CiAgICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHR4
LCBmbG9hdCB0eSk7CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtKGZsb2F0IG0xMSwgZmxvYXQgbTEy
LCBmbG9hdCBtMjEsIGZsb2F0IG0yMiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKKyAgICAgICAgdm9p
ZCBzZXRUcmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0yMSwgZmxvYXQgbTIy
LCBmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29u
c3QgU3RyaW5nJiBjb2xvcik7CiAgICAgICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoZmxvYXQgZ3Jh
eUxldmVsKTsKQEAgLTIwOSw2ICsyMTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICBmbG9hdCBtX2dsb2JhbEFscGhhOwogICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
bV9nbG9iYWxDb21wb3NpdGU7CiAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zv
cm07CisgICAgICAgICAgICBib29sIG1faW52ZXJ0aWJsZUNUTTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gVGV4dCBzdGF0ZS4KICAgICAgICAgICAgIFRleHRBbGlnbiBtX3RleHRBbGln
bjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCShyZXZp
c2lvbiAzOTA0NCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAg
dm9pZCByb3RhdGUoaW4gZmxvYXQgYW5nbGUpOwogICAgICAgICB2b2lkIHRyYW5zbGF0ZShpbiBm
bG9hdCB0eCwgaW4gZmxvYXQgdHkpOwogICAgICAgICB2b2lkIHRyYW5zZm9ybShpbiBmbG9hdCBt
MTEsIGluIGZsb2F0IG0xMiwgaW4gZmxvYXQgbTIxLCBpbiBmbG9hdCBtMjIsIGluIGZsb2F0IGR4
LCBpbiBmbG9hdCBkeSk7CisgICAgICAgIHZvaWQgc2V0VHJhbnNmb3JtKGluIGZsb2F0IG0xMSwg
aW4gZmxvYXQgbTEyLCBpbiBmbG9hdCBtMjEsIGluIGZsb2F0IG0yMiwgaW4gZmxvYXQgZHgsIGlu
IGZsb2F0IGR5KTsKIAogICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgZ2xvYmFsQWxwaGE7CiAgICAg
ICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBnbG9iYWxD
b21wb3NpdGVPcGVyYXRpb247CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzOTA2NSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA4LTEyLTA2
ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgZm9yIGNhbnZhcydzIHNldFRy
YW5zZm9ybSgpIGFuZCB1cGRhdGVkIGFuIGV4aXN0aW5nIG9uZS4KKworICAgICAgICAqIGZhc3Qv
Y2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvY2FudmFzL3Jlc291cmNlcy9jYW52YXMtc2V0VHJhbnNmb3JtLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Ogor
CiAyMDA4LTEyLTA1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
Y2FudmFzLXNldFRyYW5zZm9ybS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvY2FudmFzLXNldFRyYW5zZm9ybS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorU2VyaWVzIG9mIHRlc3RzIHRv
IGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBvZiBjYW52YXMuc2V0VHJhbnNmb3JtKCkKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgaW1nZGF0YVs0XSBpcyAwCitQQVNTIGlt
Z2RhdGFbNV0gaXMgMTI4CitQQVNTIGltZ2RhdGFbNl0gaXMgMAorUEFTUyBpbWdkYXRhWzRdIGlz
IDAKK1BBU1MgaW1nZGF0YVs1XSBpcyAxMjgKK1BBU1MgaW1nZGF0YVs2XSBpcyAwCitQQVNTIGlt
Z2RhdGFbNF0gaXMgMAorUEFTUyBpbWdkYXRhWzVdIGlzIDEyOAorUEFTUyBpbWdkYXRhWzZdIGlz
IDAKK1BBU1MgaW1nZGF0YVs0XSBpcyAwCitQQVNTIGltZ2RhdGFbNV0gaXMgMTI4CitQQVNTIGlt
Z2RhdGFbNl0gaXMgMAorUEFTUyBpbWdkYXRhWzRdIGlzIDAKK1BBU1MgaW1nZGF0YVs1XSBpcyAx
MjgKK1BBU1MgaW1nZGF0YVs2XSBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFz
LXNldFRyYW5zZm9ybS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L2NhbnZhcy1zZXRUcmFuc2Zvcm0uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2IEBACis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcmVzb3VyY2VzL2NhbnZh
cy1zZXRUcmFuc2Zvcm0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
cmVzb3VyY2VzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy9yZXNvdXJjZXMvY2FudmFzLXNldFRyYW5zZm9ybS5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4MSBAQAorZGVzY3JpcHRpb24oIlNlcmllcyBvZiB0ZXN0cyB0byBl
bnN1cmUgY29ycmVjdCBiZWhhdmlvdXIgb2YgY2FudmFzLnNldFRyYW5zZm9ybSgpIik7Cit2YXIg
Y3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTsK
KworLy8gUmVzZXQgdGhlIENUTSB0byB0aGUgaW5pdGlhbCBtYXRyaXgKK2N0eC5iZWdpblBhdGgo
KTsKK2N0eC5zY2FsZSgwLjUsIDAuNSk7CitjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAs
IDApOworY3R4LmZpbGxTdHlsZSA9ICdncmVlbic7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAx
MDApOworCit2YXIgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgxLCAxLCA5OCwgOTgpOwor
dmFyIGltZ2RhdGEgPSBpbWFnZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJpbWdkYXRhWzRdIiwgIjAi
KTsKK3Nob3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEyOCIpOworc2hvdWxkQmUoImltZ2RhdGFbNl0i
LCAiMCIpOworCisvLyBzZXRUcmFuc2Zvcm0gc2hvdWxkIG5vdCBhZmZlY3QgdGhlIGN1cnJlbnQg
cGF0aAorY3R4LmJlZ2luUGF0aCgpOworY3R4LnJlY3QoMCwwLDEwMCwxMDApOworY3R4LnNhdmUo
KTsKK2N0eC5zZXRUcmFuc2Zvcm0oMC41LCAwLCAwLCAwLjUsIDEwLCAxMCk7CitjdHguZmlsbFN0
eWxlID0gJ3JlZCc7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworY3R4LnJlc3RvcmUo
KTsKK2N0eC5maWxsU3R5bGUgPSAnZ3JlZW4nOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAw
KTsKKworaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgxLCAxLCA5OCwgOTgpOworaW1nZGF0
YSA9IGltYWdlRGF0YS5kYXRhOworc2hvdWxkQmUoImltZ2RhdGFbNF0iLCAiMCIpOworc2hvdWxk
QmUoImltZ2RhdGFbNV0iLCAiMTI4Iik7CitzaG91bGRCZSgiaW1nZGF0YVs2XSIsICIwIik7CisK
Ky8vIHNldFRyYW5zZm9ybSBzaG91bGQgbm90IGFmZmVjdCB0aGUgQ1RNIG91dHNpZGUgb2Ygc2F2
ZSgpIGFuZCByZXN0b3JlKCkKK2N0eC5iZWdpblBhdGgoKTsKK2N0eC5maWxsU3R5bGUgPSAnZ3Jl
ZW4nOworY3R4LnNhdmUoKTsKK2N0eC5zZXRUcmFuc2Zvcm0oMC41LCAwLCAwLCAwLjUsIDAsIDAp
OworY3R4LmZpbGxTdHlsZSA9ICdyZWQnOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsK
K2N0eC5yZXN0b3JlKCk7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworCitpbWFnZURh
dGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDEsIDEsIDk4LCA5OCk7CitpbWdkYXRhID0gaW1hZ2VEYXRh
LmRhdGE7CitzaG91bGRCZSgiaW1nZGF0YVs0XSIsICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1
XSIsICIxMjgiKTsKK3Nob3VsZEJlKCJpbWdkYXRhWzZdIiwgIjAiKTsKKworCisvLyBzdG9wIGRy
YXdpbmcgb24gbm90LWludmVydGlibGUgQ1RNCitjdHguYmVnaW5QYXRoKCk7CitjdHguZmlsbFN0
eWxlID0gJ2dyZWVuJzsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CitjdHguc2V0VHJh
bnNmb3JtKDAsIDAsIDAsIDAsIDAsIDApOworY3R4LmZpbGxTdHlsZSA9ICdyZWQnOworY3R4LmZp
bGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKworaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgx
LCAxLCA5OCwgOTgpOworaW1nZGF0YSA9IGltYWdlRGF0YS5kYXRhOworc2hvdWxkQmUoImltZ2Rh
dGFbNF0iLCAiMCIpOworc2hvdWxkQmUoImltZ2RhdGFbNV0iLCAiMTI4Iik7CitzaG91bGRCZSgi
aW1nZGF0YVs2XSIsICIwIik7CisKKy8vIHNldFRyYW5zZm9ybSB3aXRoIGEgbm90LWludmVydGli
bGUgbWF0cml4IHNob3VsZCBvbmx5IHN0b3AgdGhlIGRyYXdpbmcgdXAgdG8gdGhlIG5leHQgcmVz
dG9yZSgpCitjdHguYmVnaW5QYXRoKCk7CitjdHguc2F2ZSgpOworY3R4LnNldFRyYW5zZm9ybSgw
LCAwLCAwLCAwLCAwLCAwKTsKK2N0eC5maWxsU3R5bGUgPSAncmVkJzsKK2N0eC5maWxsUmVjdCgw
LCAwLCAxMDAsIDEwMCk7CitjdHgucmVzdG9yZSgpOworY3R4LmZpbGxTdHlsZSA9ICdncmVlbic7
CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworCitpbWFnZURhdGEgPSBjdHguZ2V0SW1h
Z2VEYXRhKDEsIDEsIDk4LCA5OCk7CitpbWdkYXRhID0gaW1hZ2VEYXRhLmRhdGE7CitzaG91bGRC
ZSgiaW1nZGF0YVs0XSIsICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1XSIsICIxMjgiKTsKK3No
b3VsZEJlKCJpbWdkYXRhWzZdIiwgIjAiKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93
aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDM5MDQ0KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMzE1LDYgKzMxNSw3IEBAIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQucHJvdG90eXAKIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBl
LnNldE1pdGVyTGltaXQgW2Z1bmN0aW9uXQogd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5wcm90b3R5cGUuc2V0U2hhZG93IFtmdW5jdGlvbl0KIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQucHJvdG90eXBlLnNldFN0cm9rZUNvbG9yIFtmdW5jdGlvbl0KK3dpbmRvdy5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLnNldFRyYW5zZm9ybSBbZnVuY3Rpb25dCiB3
aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5zdHJva2UgW2Z1bmN0aW9u
XQogd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUuc3Ryb2tlUmVjdCBb
ZnVuY3Rpb25dCiB3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5zdHJv
a2VUZXh0IFtmdW5jdGlvbl0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25828</attachid>
            <date>2008-12-06 22:56:56 -0800</date>
            <delta_ts>2008-12-06 23:28:43 -0800</delta_ts>
            <desc>setTransform() for Canvas</desc>
            <filename>setTransform2.patch</filename>
            <type>text/plain</type>
            <size>22097</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTA3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMDgtMTItMDYgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3Igc2V0VHJhbnNmb3JtKCkgaW4gY2FudmFzLgorCisgICAgICAgIDxjYW52YXM+
IGxhY2tzIHRyYW5zZm9ybSgpIGFuZCBzZXRUcmFuc2Zvcm0oKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDQKKworICAgICAgICBUZXN0OiBmYXN0
L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwKKworICAgICAgICAqIGh0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmJlZ2luUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNsb3NlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6Om1vdmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmxpbmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnF1YWRyYXRpY0N1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXJjVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjphcmMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc1Bv
aW50SW5QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlRnJvbVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp3aWxsRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0pOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0pOgorCiAy
MDA4LTEyLTA2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAzOTA0NCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTksNiArMTAwLDcgQEAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUoKQogICAgICwgbV9zaGFkb3dDb2xvcigiYmxhY2si
KQogICAgICwgbV9nbG9iYWxBbHBoYSgxKQogICAgICwgbV9nbG9iYWxDb21wb3NpdGUoQ29tcG9z
aXRlU291cmNlT3ZlcikKKyAgICAsIG1faW52ZXJ0aWJsZUNUTSh0cnVlKQogICAgICwgbV90ZXh0
QWxpZ24oU3RhcnRUZXh0QWxpZ24pCiAgICAgLCBtX3RleHRCYXNlbGluZShBbHBoYWJldGljVGV4
dEJhc2VsaW5lKQogICAgICwgbV91bnBhcnNlZEZvbnQoZGVmYXVsdEZvbnQpCkBAIC0xNTEsNiAr
MTUzLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZQogICAgIEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0
dXJuOwogICAgIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+YXBwbHlTdHJva2VDb2xvcihjKTsKIH0K
IApAQCAtMTc1LDYgKzE3OSw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRG
aWxsU3QKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlm
ICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
CisgICAgICAgIHJldHVybjsKICAgICBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5hcHBseUZpbGxDb2xv
cihjKTsKIH0KIApAQCAtMzI3LDggKzMzMywxOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2NhbGUoZmxvCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQo
KTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZl
cnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJh
bnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBuZXdUcmFuc2Zvcm0uc2NhbGUoc3gs
IHN5KTsKKyAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBz
dGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT5zY2FsZShG
bG9hdFNpemUoc3gsIHN5KSk7Ci0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybS5zY2FsZShzeCwgc3kp
OwogICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkuc2NhbGUoMS4wL3N4LCAx
LjAvc3kpKTsKIH0KIApAQCAtMzM3LDggKzM1MywxOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6cm90YXRlKGZsCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRl
eHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9p
bnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3
VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBuZXdUcmFuc2Zvcm0ucm90YXRl
KGFuZ2xlSW5SYWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCk7CisgICAgaWYgKCFuZXdUcmFuc2Zv
cm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRlKCkubV90cmFuc2Zvcm0g
PSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+cm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBzdGF0
ZSgpLm1fdHJhbnNmb3JtLnJvdGF0ZShhbmdsZUluUmFkaWFucyAvIHBpRG91YmxlICogMTgwLjAp
OwogICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtKCkucm90YXRlKC1hbmdsZUlu
UmFkaWFucyAvIHBpRG91YmxlICogMTgwLjApKTsKIH0KIApAQCAtMzQ3LDggKzM3MywxOCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNsYXRlCiAgICAgR3JhcGhpY3NDb250
ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAg
ICBuZXdUcmFuc2Zvcm0udHJhbnNsYXRlKHR4LCB0eSk7CisgICAgaWYgKCFuZXdUcmFuc2Zvcm0u
aXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRlKCkubV90cmFuc2Zvcm0gPSBu
ZXdUcmFuc2Zvcm07CiAgICAgYy0+dHJhbnNsYXRlKHR4LCB0eSk7Ci0gICAgc3RhdGUoKS5tX3Ry
YW5zZm9ybS50cmFuc2xhdGUodHgsIHR5KTsKICAgICBtX3BhdGgudHJhbnNmb3JtKEFmZmluZVRy
YW5zZm9ybSgpLnRyYW5zbGF0ZSgtdHgsIC10eSkpOwogfQogCkBAIC0zNTcsMTcgKzM5Myw1MiBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNmb3JtCiAgICAgR3JhcGhpY3ND
b250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgLy8gSFRNTDUgMy4xNC4xMS4xIC0tIGlnbm9yZSBhbnkgY2FsbHMgdGhhdCBwYXNz
IG5vbi1maW5pdGUgbnVtYmVycwogICAgIGlmICghaXNmaW5pdGUobTExKSB8ICFpc2Zpbml0ZSht
MjEpIHwgIWlzZmluaXRlKGR4KSB8IAogICAgICAgICAhaXNmaW5pdGUobTEyKSB8ICFpc2Zpbml0
ZShtMjIpIHwgIWlzZmluaXRlKGR5KSkKICAgICAgICAgcmV0dXJuOworCiAgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBtMjIsIGR4LCBkeSk7CisKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBuZXdU
cmFuc2Zvcm0ubXVsdGlwbHkodHJhbnNmb3JtKTsKKyAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0lu
dmVydGlibGUoKSkgeworICAgICAgICBzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1Ry
YW5zZm9ybTsKICAgICBjLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBzdGF0ZSgpLm1fdHJh
bnNmb3JtLm11bHRpcGx5KHRyYW5zZm9ybSk7CiAgICAgbV9wYXRoLnRyYW5zZm9ybSh0cmFuc2Zv
cm0uaW52ZXJzZSgpKTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFRy
YW5zZm9ybShmbG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG9hdCBtMjIsIGZsb2F0
IGR4LCBmbG9hdCBkeSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4
dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2lu
dmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBIVE1MNSAzLjE0LjEx
LjEgLS0gaWdub3JlIGFueSBjYWxscyB0aGF0IHBhc3Mgbm9uLWZpbml0ZSBudW1iZXJzCisgICAg
aWYgKCFpc2Zpbml0ZShtMTEpIHwgIWlzZmluaXRlKG0yMSkgfCAhaXNmaW5pdGUoZHgpIHwgCisg
ICAgICAgICFpc2Zpbml0ZShtMTIpIHwgIWlzZmluaXRlKG0yMikgfCAhaXNmaW5pdGUoZHkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gc3RhdGUoKS5tX3Ry
YW5zZm9ybTsKKyAgICBpZiAoIWN0bS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGMtPmNvbmNhdENUTShjLT5nZXRDVE0oKS5pbnZlcnNlKCkpOworICAgIGMtPmNvbmNhdENU
TShtX2NhbnZhcy0+YmFzZVRyYW5zZm9ybSgpKTsKKyAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtLm11
bHRpcGx5KGN0bS5pbnZlcnNlKCkpOworICAgIG1fcGF0aC50cmFuc2Zvcm0oY3RtKTsKKworICAg
IHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBtMjIsIGR4LCBkeSk7Cit9CisKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKQog
ewogICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoY29sb3IpKTsKQEAgLTQz
MCwxMSArNTAxLDE1IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ28K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmJlZ2luUGF0aCgpCiB7CisgICAgaWYg
KCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5j
bGVhcigpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xvc2VQYXRoKCkK
IHsKKyAgICBpZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAg
ICAgbV9wYXRoLmNsb3NlU3VicGF0aCgpOwogfQogCkBAIC00NDIsNiArNTE3LDggQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1vdmVUbyhmbAogewogICAgIGlmICghaXNmaW5pdGUo
eCkgfCAhaXNmaW5pdGUoeSkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0YXRlKCkubV9p
bnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBv
aW50KHgsIHkpKTsKIH0KIApAQCAtNDQ5LDYgKzUyNiw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpsaW5lVG8oZmwKIHsKICAgICBpZiAoIWlzZmluaXRlKHgpIHwgIWlzZmluaXRl
KHkpKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkK
KyAgICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7
CiB9CiAKQEAgLTQ1Niw2ICs1MzUsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
cXVhZHJhdGljCiB7CiAgICAgaWYgKCFpc2Zpbml0ZShjcHgpIHwgIWlzZmluaXRlKGNweSkgfCAh
aXNmaW5pdGUoeCkgfCAhaXNmaW5pdGUoeSkpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXN0
YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgbV9wYXRoLmFkZFF1
YWRDdXJ2ZVRvKEZsb2F0UG9pbnQoY3B4LCBjcHkpLCBGbG9hdFBvaW50KHgsIHkpKTsKIH0KIApA
QCAtNDYzLDYgKzU0NCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpiZXppZXJD
dXIKIHsKICAgICBpZiAoIWlzZmluaXRlKGNwMXgpIHwgIWlzZmluaXRlKGNwMXkpIHwgIWlzZmlu
aXRlKGNwMngpIHwgIWlzZmluaXRlKGNwMnkpIHwgIWlzZmluaXRlKHgpIHwgIWlzZmluaXRlKHkp
KQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIG1fcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3Ax
eCwgY3AxeSksIEZsb2F0UG9pbnQoY3AyeCwgY3AyeSksIEZsb2F0UG9pbnQoeCwgeSkpOwogfQog
CkBAIC00NzYsNyArNTU5LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFyY1Rv
KGZsbwogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIAorICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVy
bjsKICAgICBtX3BhdGguYWRkQXJjVG8oRmxvYXRQb2ludCh4MCwgeTApLCBGbG9hdFBvaW50KHgx
LCB5MSksIHIpOwogfQogCkBAIC00OTAsNyArNTc0LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmFyYyhmbG9hdAogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIAorICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0p
CisgICAgICAgIHJldHVybjsKICAgICBtX3BhdGguYWRkQXJjKEZsb2F0UG9pbnQoeCwgeSksIHIs
IHNhLCBlYSwgYW50aWNsb2Nrd2lzZSk7CiB9CiAgICAgCkBAIC01MTYsNyArNjAxLDggQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlY3QoZmxvYQogewogICAgIGlmICghdmFsaWRh
dGVSZWN0Rm9yQ2FudmFzKHgsIHksIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAorICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVy
bjsKICAgICBtX3BhdGguYWRkUmVjdChGbG9hdFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwog
fQogCkBAIC01MzQsNiArNjIwLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZp
bGwoKQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYg
KCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgYy0+YmVnaW5QYXRoKCk7CiAgICAgYy0+YWRkUGF0aCht
X3BhdGgpOwpAQCAtNTUyLDYgKzY0MCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2UoKQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAg
ICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJs
ZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIGMtPmJlZ2luUGF0aCgpOwogICAgIGMtPmFkZFBh
dGgobV9wYXRoKTsKIApAQCAtNTc2LDYgKzY2Niw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpjbGlwKCkKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgp
OwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVy
dGlibGVDVE0pCisgICAgICAgIHJldHVybjsKICAgICBjLT5jbGlwKG1fcGF0aCk7CiAjaWYgRU5B
QkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJk
Q29tcGF0aWJpbGl0eU1vZGUoKTsKQEAgLTU4NywxMiArNjc5LDExIEBAIGJvb2wgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjppc1BvaW50SW4KICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3
aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAg
IEZsb2F0UG9pbnQgcG9pbnQoeCwgeSk7Ci0gICAgLy8gV2UgaGF2ZSB0byBpbnZlcnQgdGhlIGN1
cnJlbnQgdHJhbnNmb3JtIHRvIGVuc3VyZSB3ZSBjb3JyZWN0bHkgaGFuZGxlIHRoZQotICAgIC8v
IHRyYW5zZm9ybXMgYXBwbGllZCB0byB0aGUgY3VycmVudCBwYXRoLgogICAgIEFmZmluZVRyYW5z
Zm9ybSBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOwotICAgIGlmICghY3RtLmlzSW52ZXJ0aWJs
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1lZFBv
aW50ID0gY3RtLmludmVyc2UoKS5tYXBQb2ludChwb2ludCk7CiAgICAgcmV0dXJuIG1fcGF0aC5j
b250YWlucyh0cmFuc2Zvcm1lZFBvaW50KTsKIH0KQEAgLTYwNCw2ICs2OTUsOCBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJSZWN0CiAgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNKQorICAgICAgICByZXR1cm47CiAgICAgRmxvYXRS
ZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAgICAg
Yy0+Y2xlYXJSZWN0KHJlY3QpOwpAQCAtNjE3LDYgKzcxMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpmaWxsUmVjdCgKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5n
Q29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOworICAgIGlmICghc3RhdGUo
KS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCByZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHdpbGxEcmF3KHJlY3QpOwpAQCAtNjQ0LDYgKzcz
OSw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWMKICAgICBHcmFw
aGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAg
cmV0dXJuOworICAgIGlmICghc3RhdGUoKS5tX2ludmVydGlibGVDVE0pCisgICAgICAgIHJldHVy
bjsKIAogICAgIEZsb2F0UmVjdCByZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogCkBAIC04ODcs
NiArOTg0LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAg
IEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZElt
YWdlKCk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZSkKQEAgLTkzNyw2ICsxMDM2LDggQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIEdyYXBoaWNzQ29udGV4dCog
YyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAg
aWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdCA9IGMtPnJvdW5kVG9EZXZpY2VQaXhlbHMoc3JjUmVj
dCk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gYy0+cm91bmRUb0RldmljZVBpeGVscyhkc3RS
ZWN0KTsKQEAgLTk3Niw2ICsxMDc3LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmRyYXdJbWFnZQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAg
ICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJs
ZUNUTSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3A7CiAgICAg
aWYgKCFwYXJzZUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgb3ApKQpAQCAt
MTA2MSw2ICsxMTY0LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3
KAogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFj
KQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9jYW52YXMtPndpbGxEcmF3KGMtPmdldENUTSgpLm1hcFJl
Y3QocikpOwogfQpAQCAtMTI1Nyw2ICsxMzYyLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdUZXh0SQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0
KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdGF0ZSgpLm1faW52
ZXJ0aWJsZUNUTSkKKyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBhY2Nlc3NGb250KCk7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgJKHJldmlzaW9uIDM5MDQ0KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7CiAgICAg
ICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHR4LCBmbG9hdCB0eSk7CiAgICAgICAgIHZvaWQgdHJh
bnNmb3JtKGZsb2F0IG0xMSwgZmxvYXQgbTEyLCBmbG9hdCBtMjEsIGZsb2F0IG0yMiwgZmxvYXQg
ZHgsIGZsb2F0IGR5KTsKKyAgICAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oZmxvYXQgbTExLCBmbG9h
dCBtMTIsIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBkeCwgZmxvYXQgZHkpOwogCiAgICAg
ICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvcik7CiAgICAgICAgIHZv
aWQgc2V0U3Ryb2tlQ29sb3IoZmxvYXQgZ3JheUxldmVsKTsKQEAgLTIwOSw2ICsyMTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBmbG9hdCBtX2dsb2JhbEFscGhhOwogICAg
ICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9nbG9iYWxDb21wb3NpdGU7CiAgICAgICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CisgICAgICAgICAgICBib29sIG1faW52ZXJ0
aWJsZUNUTTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGV4dCBzdGF0ZS4KICAgICAg
ICAgICAgIFRleHRBbGlnbiBtX3RleHRBbGlnbjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaWRsCShyZXZpc2lvbiAzOTA0NCkKKysrIFdlYkNvcmUvaHRtbC9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3
IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgdm9pZCByb3RhdGUoaW4gZmxvYXQgYW5nbGUpOwog
ICAgICAgICB2b2lkIHRyYW5zbGF0ZShpbiBmbG9hdCB0eCwgaW4gZmxvYXQgdHkpOwogICAgICAg
ICB2b2lkIHRyYW5zZm9ybShpbiBmbG9hdCBtMTEsIGluIGZsb2F0IG0xMiwgaW4gZmxvYXQgbTIx
LCBpbiBmbG9hdCBtMjIsIGluIGZsb2F0IGR4LCBpbiBmbG9hdCBkeSk7CisgICAgICAgIHZvaWQg
c2V0VHJhbnNmb3JtKGluIGZsb2F0IG0xMSwgaW4gZmxvYXQgbTEyLCBpbiBmbG9hdCBtMjEsIGlu
IGZsb2F0IG0yMiwgaW4gZmxvYXQgZHgsIGluIGZsb2F0IGR5KTsKIAogICAgICAgICBhdHRyaWJ1
dGUgZmxvYXQgZ2xvYmFsQWxwaGE7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb247CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDM5MDQ0KQorKysgV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDUgKzI2NywxMSBA
QCBJbWFnZUJ1ZmZlciogSFRNTENhbnZhc0VsZW1lbnQ6OmJ1ZmZlcigpCiAgICAgICAgIGNyZWF0
ZUltYWdlQnVmZmVyKCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CisgICAg
CitBZmZpbmVUcmFuc2Zvcm0gSFRNTENhbnZhc0VsZW1lbnQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25z
dAoreworICAgIEFTU0VSVChtX2NyZWF0ZWRJbWFnZUJ1ZmZlcik7CisgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXItPmJhc2VUcmFuc2Zvcm0oKTsKK30KIAogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmgJKHJldmlzaW9uIDM5MDQ0KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgSFRNTENhbnZh
c0VsZW1lbnRfaAogI2RlZmluZSBIVE1MQ2FudmFzRWxlbWVudF9oCiAKKyNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKIApAQCAtMTA1LDYgKzEwNiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T2JzZXJ2
ZXIoQ2FudmFzT2JzZXJ2ZXIqIG8pIHsgbV9vYnNlcnZlciA9IG87IH0KIAorICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7CiBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRl
SW1hZ2VCdWZmZXIoKSBjb25zdDsKICAgICB2b2lkIHJlc2V0KCk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiAzOTA0NCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2lmbmRlZiBJbWFnZUJ1ZmZlcl9oCiAjZGVmaW5lIEltYWdlQnVmZmVyX2gKIAor
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgpAQCAtNjcsNyArNjgs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFn
ZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCk7CiAKICAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKSBjb25zdDsKLQorI2lmICFQTEFURk9STShDRykKKyAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQor
I2Vsc2UKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQoKSk7IH0K
KyNlbmRpZgogICAgIHByaXZhdGU6CiAgICAgICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7CiAK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDM5MDc4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMTItMDYgIERpcmsgU2NodWx6ZSAgPGty
aXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCB0ZXN0cyBmb3IgY2FudmFzJ3Mgc2V0VHJhbnNmb3JtKCkgYW5kIHVwZGF0
ZWQgYW4gZXhpc3Rpbmcgb25lLgorCisgICAgICAgICogZmFzdC9jYW52YXMvY2FudmFzLXNldFRy
YW5zZm9ybS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZh
cy1zZXRUcmFuc2Zvcm0uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvcmVzb3Vy
Y2VzL2NhbnZhcy1zZXRUcmFuc2Zvcm0uanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL1dp
bmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6CisKIDIwMDgtMTItMDYgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJldXNpbmcgcHJvcGVydHkg
c2xvdHMgY2hhbmdlZCBwcm9wZXJ0eSBvcmRlcmluZyBpbiB0aGlzIHRleHQuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZh
cy1zZXRUcmFuc2Zvcm0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBA
CitTZXJpZXMgb2YgdGVzdHMgdG8gZW5zdXJlIGNvcnJlY3QgYmVoYXZpb3VyIG9mIGNhbnZhcy5z
ZXRUcmFuc2Zvcm0oKQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBpbWdk
YXRhWzRdIGlzIDAKK1BBU1MgaW1nZGF0YVs1XSBpcyAxMjgKK1BBU1MgaW1nZGF0YVs2XSBpcyAw
CitQQVNTIGltZ2RhdGFbNF0gaXMgMAorUEFTUyBpbWdkYXRhWzVdIGlzIDEyOAorUEFTUyBpbWdk
YXRhWzZdIGlzIDAKK1BBU1MgaW1nZGF0YVs0XSBpcyAwCitQQVNTIGltZ2RhdGFbNV0gaXMgMTI4
CitQQVNTIGltZ2RhdGFbNl0gaXMgMAorUEFTUyBpbWdkYXRhWzRdIGlzIDAKK1BBU1MgaW1nZGF0
YVs1XSBpcyAxMjgKK1BBU1MgaW1nZGF0YVs2XSBpcyAwCitQQVNTIGltZ2RhdGFbNF0gaXMgMAor
UEFTUyBpbWdkYXRhWzVdIGlzIDEyOAorUEFTUyBpbWdkYXRhWzZdIGlzIDAKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9jYW52YXMtc2V0VHJhbnNmb3JtLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXNldFRyYW5zZm9ybS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXNldFRyYW5zZm9ybS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY2Fu
dmFzLXNldFRyYW5zZm9ybS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9yZXNvdXJjZXMvY2FudmFzLXNldFRyYW5zZm9ybS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy9yZXNvdXJjZXMvY2FudmFzLXNldFRyYW5zZm9ybS5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3Jlc291cmNlcy9jYW52YXMtc2V0
VHJhbnNmb3JtLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACitkZXNjcmlwdGlvbigi
U2VyaWVzIG9mIHRlc3RzIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBvZiBjYW52YXMuc2V0
VHJhbnNmb3JtKCkiKTsKK3ZhciBjdHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMn
KS5nZXRDb250ZXh0KCcyZCcpOworCisvLyBSZXNldCB0aGUgQ1RNIHRvIHRoZSBpbml0aWFsIG1h
dHJpeAorY3R4LmJlZ2luUGF0aCgpOworY3R4LnNjYWxlKDAuNSwgMC41KTsKK2N0eC5zZXRUcmFu
c2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7CitjdHguZmlsbFN0eWxlID0gJ2dyZWVuJzsKK2N0eC5m
aWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CisKK3ZhciBpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VE
YXRhKDEsIDEsIDk4LCA5OCk7Cit2YXIgaW1nZGF0YSA9IGltYWdlRGF0YS5kYXRhOworc2hvdWxk
QmUoImltZ2RhdGFbNF0iLCAiMCIpOworc2hvdWxkQmUoImltZ2RhdGFbNV0iLCAiMTI4Iik7Citz
aG91bGRCZSgiaW1nZGF0YVs2XSIsICIwIik7CisKKy8vIHNldFRyYW5zZm9ybSBzaG91bGQgbm90
IGFmZmVjdCB0aGUgY3VycmVudCBwYXRoCitjdHguYmVnaW5QYXRoKCk7CitjdHgucmVjdCgwLDAs
MTAwLDEwMCk7CitjdHguc2F2ZSgpOworY3R4LnNldFRyYW5zZm9ybSgwLjUsIDAsIDAsIDAuNSwg
MTAsIDEwKTsKK2N0eC5maWxsU3R5bGUgPSAncmVkJzsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAs
IDEwMCk7CitjdHgucmVzdG9yZSgpOworY3R4LmZpbGxTdHlsZSA9ICdncmVlbic7CitjdHguZmls
bFJlY3QoMCwgMCwgMTAwLCAxMDApOworCitpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDEs
IDEsIDk4LCA5OCk7CitpbWdkYXRhID0gaW1hZ2VEYXRhLmRhdGE7CitzaG91bGRCZSgiaW1nZGF0
YVs0XSIsICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1XSIsICIxMjgiKTsKK3Nob3VsZEJlKCJp
bWdkYXRhWzZdIiwgIjAiKTsKKworLy8gc2V0VHJhbnNmb3JtIHNob3VsZCBub3QgYWZmZWN0IHRo
ZSBDVE0gb3V0c2lkZSBvZiBzYXZlKCkgYW5kIHJlc3RvcmUoKQorY3R4LmJlZ2luUGF0aCgpOwor
Y3R4LmZpbGxTdHlsZSA9ICdncmVlbic7CitjdHguc2F2ZSgpOworY3R4LnNldFRyYW5zZm9ybSgw
LjUsIDAsIDAsIDAuNSwgMCwgMCk7CitjdHguZmlsbFN0eWxlID0gJ3JlZCc7CitjdHguZmlsbFJl
Y3QoMCwgMCwgMTAwLCAxMDApOworY3R4LnJlc3RvcmUoKTsKK2N0eC5maWxsUmVjdCgwLCAwLCAx
MDAsIDEwMCk7CisKK2ltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTgsIDk4KTsK
K2ltZ2RhdGEgPSBpbWFnZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJpbWdkYXRhWzRdIiwgIjAiKTsK
K3Nob3VsZEJlKCJpbWdkYXRhWzVdIiwgIjEyOCIpOworc2hvdWxkQmUoImltZ2RhdGFbNl0iLCAi
MCIpOworCisKKy8vIHN0b3AgZHJhd2luZyBvbiBub3QtaW52ZXJ0aWJsZSBDVE0KK2N0eC5iZWdp
blBhdGgoKTsKK2N0eC5maWxsU3R5bGUgPSAnZ3JlZW4nOworY3R4LmZpbGxSZWN0KDAsIDAsIDEw
MCwgMTAwKTsKK2N0eC5zZXRUcmFuc2Zvcm0oMCwgMCwgMCwgMCwgMCwgMCk7CitjdHguZmlsbFN0
eWxlID0gJ3JlZCc7CitjdHguZmlsbFJlY3QoMCwgMCwgMTAwLCAxMDApOworCitpbWFnZURhdGEg
PSBjdHguZ2V0SW1hZ2VEYXRhKDEsIDEsIDk4LCA5OCk7CitpbWdkYXRhID0gaW1hZ2VEYXRhLmRh
dGE7CitzaG91bGRCZSgiaW1nZGF0YVs0XSIsICIwIik7CitzaG91bGRCZSgiaW1nZGF0YVs1XSIs
ICIxMjgiKTsKK3Nob3VsZEJlKCJpbWdkYXRhWzZdIiwgIjAiKTsKKworLy8gc2V0VHJhbnNmb3Jt
IHdpdGggYSBub3QtaW52ZXJ0aWJsZSBtYXRyaXggc2hvdWxkIG9ubHkgc3RvcCB0aGUgZHJhd2lu
ZyB1cCB0byB0aGUgbmV4dCByZXN0b3JlKCkKK2N0eC5iZWdpblBhdGgoKTsKK2N0eC5zYXZlKCk7
CitjdHguc2V0VHJhbnNmb3JtKDAsIDAsIDAsIDAsIDAsIDApOworY3R4LmZpbGxTdHlsZSA9ICdy
ZWQnOworY3R4LmZpbGxSZWN0KDAsIDAsIDEwMCwgMTAwKTsKK2N0eC5yZXN0b3JlKCk7CitjdHgu
ZmlsbFN0eWxlID0gJ2dyZWVuJzsKK2N0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDEwMCk7CisKK2lt
YWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMSwgMSwgOTgsIDk4KTsKK2ltZ2RhdGEgPSBpbWFn
ZURhdGEuZGF0YTsKK3Nob3VsZEJlKCJpbWdkYXRhWzRdIiwgIjAiKTsKK3Nob3VsZEJlKCJpbWdk
YXRhWzVdIiwgIjEyOCIpOworc2hvdWxkQmUoImltZ2RhdGFbNl0iLCAiMCIpOworCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRv
dy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMzkwNDQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRp
ZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1LDcgQEAgd2luZG93
LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cAogd2luZG93LkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5wcm90b3R5cGUuc2V0TWl0ZXJMaW1pdCBbZnVuY3Rpb25dCiB3aW5kb3cuQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5zZXRTaGFkb3cgW2Z1bmN0aW9uXQogd2lu
ZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUuc2V0U3Ryb2tlQ29sb3IgW2Z1
bmN0aW9uXQord2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUuc2V0VHJh
bnNmb3JtIFtmdW5jdGlvbl0KIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90
eXBlLnN0cm9rZSBbZnVuY3Rpb25dCiB3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnBy
b3RvdHlwZS5zdHJva2VSZWN0IFtmdW5jdGlvbl0KIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQucHJvdG90eXBlLnN0cm9rZVRleHQgW2Z1bmN0aW9uXQo=
</data>
<flag name="review"
          id="12108"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>