<?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>142676</bug_id>
          
          <creation_ts>2015-03-13 12:45:37 -0700</creation_ts>
          <short_desc>Add tolerance to WebAudio tests</short_desc>
          <delta_ts>2015-03-16 14:53:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1076990</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-03-13 12:45:37 -0700</bug_when>
    <thetext>WebAudio effects are intrinsically imprecise, so requiring bit for bit precision is not right.

rdar://problem/19996807
rdar://problem/15393179</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076994</commentid>
    <comment_count>1</comment_count>
      <attachid>248598</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-03-13 12:51:42 -0700</bug_when>
    <thetext>Created attachment 248598
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076995</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-13 12:52:54 -0700</bug_when>
    <thetext>Attachment 248598 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:168:  multiple statements on one line (semicolon)  [pep8/E702] [5]
ERROR: Tools/Scripts/webkitpy/common/wavediff.py:34:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/Scripts/webkitpy/common/wavediff.py:44:  multiple statements on one line (semicolon)  [pep8/E702] [5]
ERROR: Tools/Scripts/webkitpy/common/wavediff.py:49:  multiple statements on one line (semicolon)  [pep8/E702] [5]
ERROR: Tools/Scripts/webkitpy/common/wavediff.py:107:  multiple statements on one line (semicolon)  [pep8/E702] [5]
Total errors found: 5 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077043</commentid>
    <comment_count>3</comment_count>
      <attachid>248612</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-03-13 15:33:36 -0700</bug_when>
    <thetext>Created attachment 248612
with style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077064</commentid>
    <comment_count>4</comment_count>
      <attachid>248612</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-03-13 16:57:51 -0700</bug_when>
    <thetext>Comment on attachment 248612
with style fixes

I need to update webkitpy tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077070</commentid>
    <comment_count>5</comment_count>
      <attachid>248612</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-03-13 17:14:41 -0700</bug_when>
    <thetext>Comment on attachment 248612
with style fixes

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

&gt; Tools/Scripts/webkitpy/common/wavediff.py:3
&gt; +# Redistribution and use in source and binary forms, with or without

Is this the right license?

&gt; Tools/Scripts/webkitpy/common/wavediff.py:43
&gt; +            tempFile = tempfile.TemporaryFile()

what&apos;s the point of the tempFile local?

&gt; Tools/Scripts/webkitpy/common/wavediff.py:48
&gt; +            tempFile = tempfile.TemporaryFile()

should we use something like StringIO instead of writing the files to disk?

&gt; Tools/Scripts/webkitpy/common/wavediff.py:64
&gt; +        params1 = waveFile1.getparams()
&gt; +        params2 = waveFile2.getparams()
&gt; +
&gt; +        channelCount1 = params1[0]
&gt; +        frameCount1 = params1[3]
&gt; +        sampleWidth1 = params1[1]
&gt; +        channelCount2 = params2[0]
&gt; +        frameCount2 = params2[3]
&gt; +        sampleWidth2 = params2[1]

Is there a reason we do this? It&apos;s pretty ugly. Is using the getters a significant performance hit or something that inspired the uglier code? Like so:

channelCount1 = waveFile1.getnchannels()
frameCount1 = waveFile1.getframecount()
sampleWidth1 = waveFile1.getsampwidth()
channelCount2 = waveFile2.getnchannels()
frameCount2 = waveFile2.getframecount()
sampleWidth2 = waveFile2.getsampwidth()

I guess maybe it&apos;s because we want to use the params arrays again below? Still, random indexes make me :(

&gt; Tools/Scripts/webkitpy/common/wavediff.py:79
&gt; +            self._filesAreIdenticalWithinTolerance = not len(filter(lambda x: x &gt; self._tolerance, results))

Not sure if we like comprehension syntax more or less than filter/lambda syntax...? (but I know which I like to read :D)

= not len([x for x in results if x &gt; self._tolerance])

Also technically &apos;canonical&apos; Python style prefers falsiness of the empty list to be the preferred way to determine emptiness instead of len(), but I kind of agree with Jer/whoever wrote this that that&apos;s not great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077079</commentid>
    <comment_count>6</comment_count>
      <attachid>248612</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-03-13 17:50:45 -0700</bug_when>
    <thetext>Comment on attachment 248612
with style fixes

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

&gt; Tools/Scripts/webkitpy/common/wavediff.py:71
&gt; +        if self._filesAreIdentical:

For your consideration, I suggest we use an early return style such that we return early from this function if files are not identical (i.e. &quot;not self._filesAreIdentical&quot; evaluates to true). Among the benefits of this approach we can remove one level of indentation.

&gt; Tools/Scripts/webkitpy/common/wavediff.py:77
&gt; +            nDifferingSamples = len(filter(bool, results))

Can we come up with a better name for this variable? Maybe numberOfDifferingSamples?

&gt; Tools/Scripts/webkitpy/common/wavediff.py:86
&gt; +                self._diff += &apos;\n&apos;
&gt; +                self._diff += &apos;Total differing samples: %d\n&apos; % nDifferingSamples
&gt; +                self._diff += &apos;Percentage of differing samples: %0.3f%%\n&apos; % (100 * float(nDifferingSamples) / max(frameCount1, frameCount2))
&gt; +                self._diff += &apos;Cumulative sample difference: %d\n&apos; % cumulativeSampleDiff
&gt; +                self._diff += &apos;Average sample difference: %f\n&apos; % (float(cumulativeSampleDiff) / nDifferingSamples)

Maybe using a single multiline string and str.format() instead of concatenating multiple strings with string substitution would improve the readability of this code?

self._diff = &quot;&quot;&quot;
Total differing samples: {numberOfDifferingSamples}
Percentage of differing samples: {percentOfDifferingSamples:0.3f}%
Cumulative sample difference: {cumulativeSampleDifference}
Average sample difference: {averageSampleDifference}
&quot;&quot;&quot;.format(numberOfDifferingSamples=nDifferingSamples,
           percentOfDifferingSamples=100 * float(nDifferingSamples) / max(frameCount1, frameCount2),
           cumulativeSampleDifference=cumulativeSampleDiff,
           averageSampleDifference=float(cumulativeSampleDiff) / nDifferingSamples)

&gt; Tools/Scripts/webkitpy/common/wavediff.py:97
&gt; +    def _readSamples(self, file, sampleWidth, nSamples):

This method does not make use of any instance variables. You may want to consider making this a static method by adding the @staticmethod decorator (above this function) and removing the first parameter. See &lt;https://docs.python.org/2/library/functions.html#staticmethod&gt; for more details.

&gt; Tools/Scripts/webkitpy/common/wavediff.py:108
&gt; +            self._filesAreIdentical = False

Is this correct? I don&apos;t see the value of setting this instance variable given that this function is considered private (given the presence of the prefix of &apos;_&apos; at the start of its name), it is only called on line 74, and we override self._filesAreIdentical on line 78.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/test_result_writer.py:166
&gt; +        diff = WaveDiff(expected_audio, actual_audio)

I suggest we inline the value of this variable on line 168 since it is only referenced on that line and I do not feel that the name of this variable makes the code more readable given that the name of the class, WaveDiff, is reasonably descriptive.

&gt; Tools/Scripts/webkitpy/port/base.py:289
&gt; +        diff = WaveDiff(expected_audio, actual_audio)
&gt; +        return not diff.filesAreIdenticalWithinTolerance()

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077500</commentid>
    <comment_count>7</comment_count>
      <attachid>248735</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-03-16 11:40:59 -0700</bug_when>
    <thetext>Created attachment 248735
with fixes

Made all the suggested improvements, except for two:

&gt; Not sure if we like comprehension syntax more or less than filter/lambda syntax...? (but I know which I like to read :D)

Kept as is for consistency, because there is another instance of filter just below (&quot;len(filter(bool, results))&quot;).

&gt; Maybe using a single multiline string and str.format() instead of concatenating multiple strings with string substitution would improve the readability of this code?

Unsure, the proposed variant seemed less readable to me. I can make the change if you feel strongly about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077550</commentid>
    <comment_count>8</comment_count>
      <attachid>248735</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-03-16 13:53:54 -0700</bug_when>
    <thetext>Comment on attachment 248735
with fixes

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

&gt; Tools/Scripts/webkitpy/common/wavediff.py:94
&gt; +        unpackFormat = &apos;b&apos; if sampleWidth == 1 else &apos;h&apos;

maybe we should assert here that it&apos;s 1 or 2?

&gt; Tools/Scripts/webkitpy/port/test.py:101
&gt; -TOTAL_TESTS = 71
&gt; +TOTAL_TESTS = 72

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077558</commentid>
    <comment_count>9</comment_count>
      <attachid>248735</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-03-16 14:08:29 -0700</bug_when>
    <thetext>Comment on attachment 248735
with fixes

I don&apos;t think that .wav supports anything but 8-bit and 16-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077574</commentid>
    <comment_count>10</comment_count>
      <attachid>248735</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-16 14:53:15 -0700</bug_when>
    <thetext>Comment on attachment 248735
with fixes

Clearing flags on attachment: 248735

Committed r181579: &lt;http://trac.webkit.org/changeset/181579&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077575</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-16 14:53:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248598</attachid>
            <date>2015-03-13 12:51:42 -0700</date>
            <delta_ts>2015-03-13 15:33:36 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>AudioDiff.txt</filename>
            <type>text/plain</type>
            <size>9618</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE4MTQ4NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDE1LTAzLTEzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgorCisgICAgICAgIEFkZCB0b2xlcmFuY2UgdG8gV2ViQXVkaW8gdGVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjY3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vd2F2ZWRpZmYucHk6IEFkZGVkLiBCYXNlZCBvbiBKZXIgTm9ibGUncyB3b3JrLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvdGVzdF9y
ZXN1bHRfd3JpdGVyLnB5OgorICAgICAgICAoVGVzdFJlc3VsdFdyaXRlci5jcmVhdGVfYXVkaW9f
ZGlmZl9hbmRfd3JpdGVfcmVzdWx0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9tb2RlbHMvdGVzdF9mYWlsdXJlcy5weToKKyAgICAgICAgKEZhaWx1cmVBdWRpby53
cml0ZV9mYWlsdXJlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToK
KyAgICAgICAgKFBvcnQuZG9fYXVkaW9fcmVzdWx0c19kaWZmZXIpOgorICAgICAgICBEaWZmIGF1
ZGlvIGZhaWx1cmVzLgorCiAyMDE1LTAzLTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxl
dEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgV2ViS2l0IHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc2hv
dWxkIGF1dG9tYXRlIHRoZSBwcm9jZXNzIG9mIGNsb25pbmcgVzNDIHRlc3Qgc3VpdGUgYW5kIGlt
cG9ydGluZyB0ZXN0cyBmcm9tIGl0CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi93YXZlZGlmZi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi93YXZlZGlmZi5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3dhdmVkaWZmLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisjIENvcHly
aWdodCAoYykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1w
b3J0IHdhdmUKKworY2xhc3MgV2F2ZURpZmYob2JqZWN0KToKKyAgICBfcGFyYW1OYW1lcyA9ICgn
TnVtYmVyIG9mIGNoYW5uZWxzJywgJ1NhbXBsZSB3aWR0aCcsICdTYW1wbGUgcmF0ZScsICdOdW1i
ZXIgb2YgZnJhbWVzJywgJ0NvbXByZXNzaW9uIHR5cGUnLCAnQ29tcHJlc3Npb24gbmFtZScpCisK
KyAgICAjIEF1ZGlvIGVmZmVjdCBwcm9jZXNzaW5nIGlzIGludHJpbnNpY2FsbHkgaW1wcmVjaXNl
LCBzbyB3ZSBuZWVkIHRvIGFsd2F5cyBhbGxvdyB0b2xlcmFuY2UuCisgICAgX3RvbGVyYW5jZSA9
IDEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbjEsIGluMik6CisgICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKGluMSwgZmlsZSk6CisgICAgICAgICAgICB0ZW1wRmlsZSA9IHRlbXBmaWxlLlRl
bXBvcmFyeUZpbGUoKQorICAgICAgICAgICAgdGVtcEZpbGUud3JpdGUoaW4xKQorICAgICAgICAg
ICAgdGVtcEZpbGUuc2VlaygwKTsKKyAgICAgICAgICAgIGluMSA9IHRlbXBGaWxlCisgICAgICAg
IGlmIG5vdCBpc2luc3RhbmNlKGluMiwgZmlsZSk6CisgICAgICAgICAgICB0ZW1wRmlsZSA9IHRl
bXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICAgICAgdGVtcEZpbGUud3JpdGUoaW4yKQor
ICAgICAgICAgICAgdGVtcEZpbGUuc2VlaygwKTsKKyAgICAgICAgICAgIGluMiA9IHRlbXBGaWxl
CisKKyAgICAgICAgd2F2ZUZpbGUxID0gd2F2ZS5vcGVuKGluMSwgJ3JiJykKKyAgICAgICAgd2F2
ZUZpbGUyID0gd2F2ZS5vcGVuKGluMiwgJ3JiJykKKworICAgICAgICBwYXJhbXMxID0gd2F2ZUZp
bGUxLmdldHBhcmFtcygpCisgICAgICAgIHBhcmFtczIgPSB3YXZlRmlsZTIuZ2V0cGFyYW1zKCkK
KworICAgICAgICBjaGFubmVsQ291bnQxID0gcGFyYW1zMVswXQorICAgICAgICBmcmFtZUNvdW50
MSA9IHBhcmFtczFbM10KKyAgICAgICAgc2FtcGxlV2lkdGgxID0gcGFyYW1zMVsxXQorICAgICAg
ICBjaGFubmVsQ291bnQyID0gcGFyYW1zMlswXQorICAgICAgICBmcmFtZUNvdW50MiA9IHBhcmFt
czJbM10KKyAgICAgICAgc2FtcGxlV2lkdGgyID0gcGFyYW1zMlsxXQorCisgICAgICAgIHNlbGYu
X2RpZmYgPSAnJworCisgICAgICAgIHNlbGYuX2ZpbGVzQXJlSWRlbnRpY2FsID0gbm90IHN1bSht
YXAoc2VsZi5fZGlmZlBhcmFtLCBwYXJhbXMxLCBwYXJhbXMyLCBzZWxmLl9wYXJhbU5hbWVzKSkK
KyAgICAgICAgc2VsZi5fZmlsZXNBcmVJZGVudGljYWxXaXRoaW5Ub2xlcmFuY2UgPSBzZWxmLl9m
aWxlc0FyZUlkZW50aWNhbAorCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzQXJlSWRlbnRpY2FsOgor
ICAgICAgICAgICAgYWxsRGF0YTEgPSBzZWxmLl9yZWFkU2FtcGxlcyh3YXZlRmlsZTEsIHNhbXBs
ZVdpZHRoMSwgZnJhbWVDb3VudDEgKiBjaGFubmVsQ291bnQxKQorICAgICAgICAgICAgYWxsRGF0
YTIgPSBzZWxmLl9yZWFkU2FtcGxlcyh3YXZlRmlsZTIsIHNhbXBsZVdpZHRoMiwgZnJhbWVDb3Vu
dDIgKiBjaGFubmVsQ291bnQyKQorICAgICAgICAgICAgcmVzdWx0cyA9IG1hcChzZWxmLl9kaWZm
U2FtcGxlLCBhbGxEYXRhMSwgYWxsRGF0YTIsIHhyYW5nZShtYXgoZnJhbWVDb3VudDEgKiBjaGFu
bmVsQ291bnQxLCBmcmFtZUNvdW50MiAqIGNoYW5uZWxDb3VudDIpKSkKKworICAgICAgICAgICAg
Y3VtdWxhdGl2ZVNhbXBsZURpZmYgPSBzdW0ocmVzdWx0cykKKyAgICAgICAgICAgIG5EaWZmZXJp
bmdTYW1wbGVzID0gbGVuKGZpbHRlcihib29sLCByZXN1bHRzKSkKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGVzQXJlSWRlbnRpY2FsID0gbm90IG5EaWZmZXJpbmdTYW1wbGVzCisgICAgICAgICAgICBz
ZWxmLl9maWxlc0FyZUlkZW50aWNhbFdpdGhpblRvbGVyYW5jZSA9IG5vdCBsZW4oZmlsdGVyKGxh
bWJkYSB4OiB4ID4gc2VsZi5fdG9sZXJhbmNlLCByZXN1bHRzKSkKKworICAgICAgICAgICAgaWYg
bkRpZmZlcmluZ1NhbXBsZXM6CisgICAgICAgICAgICAgICAgc2VsZi5fZGlmZiArPSAnXG4nCisg
ICAgICAgICAgICAgICAgc2VsZi5fZGlmZiArPSAnVG90YWwgZGlmZmVyaW5nIHNhbXBsZXM6ICVk
XG4nICUgbkRpZmZlcmluZ1NhbXBsZXMKKyAgICAgICAgICAgICAgICBzZWxmLl9kaWZmICs9ICdQ
ZXJjZW50YWdlIG9mIGRpZmZlcmluZyBzYW1wbGVzOiAlMC4zZiUlXG4nICUgKDEwMCAqIGZsb2F0
KG5EaWZmZXJpbmdTYW1wbGVzKSAvIG1heChmcmFtZUNvdW50MSwgZnJhbWVDb3VudDIpKQorICAg
ICAgICAgICAgICAgIHNlbGYuX2RpZmYgKz0gJ0N1bXVsYXRpdmUgc2FtcGxlIGRpZmZlcmVuY2U6
ICVkXG4nICUgY3VtdWxhdGl2ZVNhbXBsZURpZmYKKyAgICAgICAgICAgICAgICBzZWxmLl9kaWZm
ICs9ICdBdmVyYWdlIHNhbXBsZSBkaWZmZXJlbmNlOiAlZlxuJyAlIChmbG9hdChjdW11bGF0aXZl
U2FtcGxlRGlmZikgLyBuRGlmZmVyaW5nU2FtcGxlcykKKworICAgIGRlZiBfZGlmZlBhcmFtKHNl
bGYsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbU5hbWUpOgorICAgICAgICBpZiBwYXJhbTEgPT0gcGFy
YW0yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuX2RpZmYgKz0gcGFy
YW1OYW1lICsgJ1xuJworICAgICAgICBzZWxmLl9kaWZmICs9ICc8ICVzXG4nICUgc3RyKHBhcmFt
MSkKKyAgICAgICAgc2VsZi5fZGlmZiArPSAnLS0tXG4nCisgICAgICAgIHNlbGYuX2RpZmYgKz0g
Jz4gJXNcbicgJSBzdHIocGFyYW0yKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9y
ZWFkU2FtcGxlcyhzZWxmLCBmaWxlLCBzYW1wbGVXaWR0aCwgblNhbXBsZXMpOgorICAgICAgICBh
bGxGcmFtZXMgPSBmaWxlLnJlYWRmcmFtZXMoblNhbXBsZXMpCisgICAgICAgIHVucGFja0Zvcm1h
dCA9ICdiJyBpZiBzYW1wbGVXaWR0aCA9PSAxIGVsc2UgJ2gnCisgICAgICAgIHJldHVybiBzdHJ1
Y3QudW5wYWNrKCc8JWQlcycgJSAoblNhbXBsZXMsIHVucGFja0Zvcm1hdCksIGFsbEZyYW1lcykK
KworICAgIGRlZiBfZGlmZlNhbXBsZShzZWxmLCBkYXRhMSwgZGF0YTIsIGkpOgorICAgICAgICBp
ZiAoZGF0YTEgIT0gZGF0YTIpOgorICAgICAgICAgICAgc2VsZi5fZGlmZiArPSAnU2FtcGxlICMl
ZFxuJyAlIGkKKyAgICAgICAgICAgIHNlbGYuX2RpZmYgKz0gJzwgJWRcbicgJSBkYXRhMQorICAg
ICAgICAgICAgc2VsZi5fZGlmZiArPSAnLS0tXG4nCisgICAgICAgICAgICBzZWxmLl9kaWZmICs9
ICc+ICVkXG4nICUgZGF0YTIKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzQXJlSWRlbnRpY2FsID0g
RmFsc2U7CisgICAgICAgIHJldHVybiBhYnMoZGF0YTEgLSBkYXRhMikKKworICAgIGRlZiBmaWxl
c0FyZUlkZW50aWNhbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzQXJlSWRlbnRp
Y2FsCisKKyAgICBkZWYgZmlsZXNBcmVJZGVudGljYWxXaXRoaW5Ub2xlcmFuY2Uoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9maWxlc0FyZUlkZW50aWNhbFdpdGhpblRvbGVyYW5jZQorCisg
ICAgZGVmIGRpZmZUZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGlmZgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vd2F2ZWRpZmYucHkK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCitMRgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy90ZXN0X3Jlc3VsdF93cml0ZXIucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvdGVzdF9y
ZXN1bHRfd3JpdGVyLnB5CShyZXZpc2lvbiAxODE0MDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy90ZXN0X3Jlc3VsdF93cml0ZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogaW1wb3J0IGxvZ2dpbmcKIAorZnJvbSB3ZWJr
aXRweS5jb21tb24ud2F2ZWRpZmYgaW1wb3J0IFdhdmVEaWZmCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIAogCkBAIC0xNjEsNiArMTYyLDEx
IEBAIGNsYXNzIFRlc3RSZXN1bHRXcml0ZXIob2JqZWN0KToKICAgICBkZWYgd3JpdGVfYXVkaW9f
ZmlsZXMoc2VsZiwgYWN0dWFsX2F1ZGlvLCBleHBlY3RlZF9hdWRpbyk6CiAgICAgICAgIHNlbGYu
d3JpdGVfb3V0cHV0X2ZpbGVzKCcud2F2JywgYWN0dWFsX2F1ZGlvLCBleHBlY3RlZF9hdWRpbykK
IAorICAgIGRlZiBjcmVhdGVfYXVkaW9fZGlmZl9hbmRfd3JpdGVfcmVzdWx0KHNlbGYsIGFjdHVh
bF9hdWRpbywgZXhwZWN0ZWRfYXVkaW8pOgorICAgICAgICBkaWZmID0gV2F2ZURpZmYoZXhwZWN0
ZWRfYXVkaW8sIGFjdHVhbF9hdWRpbykKKyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0
cHV0X2ZpbGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX0RJRkYgKyAnLnR4dCcpCisgICAgICAg
IHNlbGYuX3dyaXRlX3RleHRfZmlsZShkaWZmX2ZpbGVuYW1lLCBkaWZmLmRpZmZUZXh0KCkpOwor
CiAgICAgZGVmIHdyaXRlX2ltYWdlX2ZpbGVzKHNlbGYsIGFjdHVhbF9pbWFnZSwgZXhwZWN0ZWRf
aW1hZ2UpOgogICAgICAgICBzZWxmLndyaXRlX291dHB1dF9maWxlcygnLnBuZycsIGFjdHVhbF9p
bWFnZSwgZXhwZWN0ZWRfaW1hZ2UpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL21vZGVscy90ZXN0X2ZhaWx1cmVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2ZhaWx1cmVzLnB5CShyZXZp
c2lvbiAxODE0MDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2Rl
bHMvdGVzdF9mYWlsdXJlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw3IEBAIGNs
YXNzIEZhaWx1cmVUZXh0KFRlc3RGYWlsdXJlKToKIGNsYXNzIEZhaWx1cmVBdWRpbyhUZXN0RmFp
bHVyZSk6CiAgICAgZGVmIHdyaXRlX2ZhaWx1cmUoc2VsZiwgd3JpdGVyLCBkcml2ZXJfb3V0cHV0
LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LCBwb3J0KToKICAgICAgICAgd3JpdGVyLndyaXRlX2F1
ZGlvX2ZpbGVzKGRyaXZlcl9vdXRwdXQuYXVkaW8sIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuYXVk
aW8pCisgICAgICAgIHdyaXRlci5jcmVhdGVfYXVkaW9fZGlmZl9hbmRfd3JpdGVfcmVzdWx0KGRy
aXZlcl9vdXRwdXQuYXVkaW8sIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuYXVkaW8pCiAKIAogY2xh
c3MgRmFpbHVyZVRpbWVvdXQoVGVzdEZhaWx1cmUpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkJKHJldmlzaW9uIDE4MTQwMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIGZyb20gd2Via2l0
cHkuY29tbW9uLnByZXR0eXBhdGNoIGltcG9ydCAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bSBpbXBvcnQgcGF0aAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBv
cnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGlt
cG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi53YXZlZGlmZiBpbXBvcnQgV2F2
ZURpZmYKIGZyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZp
bmRlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlv
biBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29u
ZmlnIGFzIHBvcnRfY29uZmlnCkBAIC0yODIsNyArMjgzLDEwIEBAIGNsYXNzIFBvcnQob2JqZWN0
KToKICAgICAgICAgcmV0dXJuIGV4cGVjdGVkX3RleHQgIT0gYWN0dWFsX3RleHQKIAogICAgIGRl
ZiBkb19hdWRpb19yZXN1bHRzX2RpZmZlcihzZWxmLCBleHBlY3RlZF9hdWRpbywgYWN0dWFsX2F1
ZGlvKToKLSAgICAgICAgcmV0dXJuIGV4cGVjdGVkX2F1ZGlvICE9IGFjdHVhbF9hdWRpbworICAg
ICAgICBpZiBleHBlY3RlZF9hdWRpbyA9PSBhY3R1YWxfYXVkaW86CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgZGlmZiA9IFdhdmVEaWZmKGV4cGVjdGVkX2F1ZGlvLCBhY3R1YWxf
YXVkaW8pCisgICAgICAgIHJldHVybiBub3QgZGlmZi5maWxlc0FyZUlkZW50aWNhbFdpdGhpblRv
bGVyYW5jZSgpCiAKICAgICBkZWYgZGlmZl9pbWFnZShzZWxmLCBleHBlY3RlZF9jb250ZW50cywg
YWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2U9Tm9uZSk6CiAgICAgICAgICIiIkNvbXBhcmUgdHdv
IGltYWdlcyBhbmQgcmV0dXJuIGEgdHVwbGUgb2YgYW4gaW1hZ2UgZGlmZiwgYSBwZXJjZW50YWdl
IGRpZmZlcmVuY2UgKDAtMTAwKSwgYW5kIGFuIGVycm9yIHN0cmluZy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248612</attachid>
            <date>2015-03-13 15:33:36 -0700</date>
            <delta_ts>2015-03-16 11:40:59 -0700</delta_ts>
            <desc>with style fixes</desc>
            <filename>AudioDiff.txt</filename>
            <type>text/plain</type>
            <size>9616</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE4MTQ4NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDE1LTAzLTEzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgorCisgICAgICAgIEFkZCB0b2xlcmFuY2UgdG8gV2ViQXVkaW8gdGVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjY3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vd2F2ZWRpZmYucHk6IEFkZGVkLiBCYXNlZCBvbiBKZXIgTm9ibGUncyB3b3JrLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvdGVzdF9y
ZXN1bHRfd3JpdGVyLnB5OgorICAgICAgICAoVGVzdFJlc3VsdFdyaXRlci5jcmVhdGVfYXVkaW9f
ZGlmZl9hbmRfd3JpdGVfcmVzdWx0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9tb2RlbHMvdGVzdF9mYWlsdXJlcy5weToKKyAgICAgICAgKEZhaWx1cmVBdWRpby53
cml0ZV9mYWlsdXJlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToK
KyAgICAgICAgKFBvcnQuZG9fYXVkaW9fcmVzdWx0c19kaWZmZXIpOgorICAgICAgICBEaWZmIGF1
ZGlvIGZhaWx1cmVzLgorCiAyMDE1LTAzLTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxl
dEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgV2ViS2l0IHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc2hv
dWxkIGF1dG9tYXRlIHRoZSBwcm9jZXNzIG9mIGNsb25pbmcgVzNDIHRlc3Qgc3VpdGUgYW5kIGlt
cG9ydGluZyB0ZXN0cyBmcm9tIGl0CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi93YXZlZGlmZi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi93YXZlZGlmZi5weQkocmV2aXNpb24gMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3dhdmVkaWZmLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACisjIENvcHly
aWdodCAoYykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1w
b3J0IHdhdmUKKworCitjbGFzcyBXYXZlRGlmZihvYmplY3QpOgorICAgIF9wYXJhbU5hbWVzID0g
KCdOdW1iZXIgb2YgY2hhbm5lbHMnLCAnU2FtcGxlIHdpZHRoJywgJ1NhbXBsZSByYXRlJywgJ051
bWJlciBvZiBmcmFtZXMnLCAnQ29tcHJlc3Npb24gdHlwZScsICdDb21wcmVzc2lvbiBuYW1lJykK
KworICAgICMgQXVkaW8gZWZmZWN0IHByb2Nlc3NpbmcgaXMgaW50cmluc2ljYWxseSBpbXByZWNp
c2UsIHNvIHdlIG5lZWQgdG8gYWx3YXlzIGFsbG93IHRvbGVyYW5jZS4KKyAgICBfdG9sZXJhbmNl
ID0gMQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluMSwgaW4yKToKKyAgICAgICAgaWYgbm90
IGlzaW5zdGFuY2UoaW4xLCBmaWxlKToKKyAgICAgICAgICAgIHRlbXBGaWxlID0gdGVtcGZpbGUu
VGVtcG9yYXJ5RmlsZSgpCisgICAgICAgICAgICB0ZW1wRmlsZS53cml0ZShpbjEpCisgICAgICAg
ICAgICB0ZW1wRmlsZS5zZWVrKDApCisgICAgICAgICAgICBpbjEgPSB0ZW1wRmlsZQorICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShpbjIsIGZpbGUpOgorICAgICAgICAgICAgdGVtcEZpbGUgPSB0
ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgICAgIHRlbXBGaWxlLndyaXRlKGluMikK
KyAgICAgICAgICAgIHRlbXBGaWxlLnNlZWsoMCkKKyAgICAgICAgICAgIGluMiA9IHRlbXBGaWxl
CisKKyAgICAgICAgd2F2ZUZpbGUxID0gd2F2ZS5vcGVuKGluMSwgJ3JiJykKKyAgICAgICAgd2F2
ZUZpbGUyID0gd2F2ZS5vcGVuKGluMiwgJ3JiJykKKworICAgICAgICBwYXJhbXMxID0gd2F2ZUZp
bGUxLmdldHBhcmFtcygpCisgICAgICAgIHBhcmFtczIgPSB3YXZlRmlsZTIuZ2V0cGFyYW1zKCkK
KworICAgICAgICBjaGFubmVsQ291bnQxID0gcGFyYW1zMVswXQorICAgICAgICBmcmFtZUNvdW50
MSA9IHBhcmFtczFbM10KKyAgICAgICAgc2FtcGxlV2lkdGgxID0gcGFyYW1zMVsxXQorICAgICAg
ICBjaGFubmVsQ291bnQyID0gcGFyYW1zMlswXQorICAgICAgICBmcmFtZUNvdW50MiA9IHBhcmFt
czJbM10KKyAgICAgICAgc2FtcGxlV2lkdGgyID0gcGFyYW1zMlsxXQorCisgICAgICAgIHNlbGYu
X2RpZmYgPSAnJworCisgICAgICAgIHNlbGYuX2ZpbGVzQXJlSWRlbnRpY2FsID0gbm90IHN1bSht
YXAoc2VsZi5fZGlmZlBhcmFtLCBwYXJhbXMxLCBwYXJhbXMyLCBzZWxmLl9wYXJhbU5hbWVzKSkK
KyAgICAgICAgc2VsZi5fZmlsZXNBcmVJZGVudGljYWxXaXRoaW5Ub2xlcmFuY2UgPSBzZWxmLl9m
aWxlc0FyZUlkZW50aWNhbAorCisgICAgICAgIGlmIHNlbGYuX2ZpbGVzQXJlSWRlbnRpY2FsOgor
ICAgICAgICAgICAgYWxsRGF0YTEgPSBzZWxmLl9yZWFkU2FtcGxlcyh3YXZlRmlsZTEsIHNhbXBs
ZVdpZHRoMSwgZnJhbWVDb3VudDEgKiBjaGFubmVsQ291bnQxKQorICAgICAgICAgICAgYWxsRGF0
YTIgPSBzZWxmLl9yZWFkU2FtcGxlcyh3YXZlRmlsZTIsIHNhbXBsZVdpZHRoMiwgZnJhbWVDb3Vu
dDIgKiBjaGFubmVsQ291bnQyKQorICAgICAgICAgICAgcmVzdWx0cyA9IG1hcChzZWxmLl9kaWZm
U2FtcGxlLCBhbGxEYXRhMSwgYWxsRGF0YTIsIHhyYW5nZShtYXgoZnJhbWVDb3VudDEgKiBjaGFu
bmVsQ291bnQxLCBmcmFtZUNvdW50MiAqIGNoYW5uZWxDb3VudDIpKSkKKworICAgICAgICAgICAg
Y3VtdWxhdGl2ZVNhbXBsZURpZmYgPSBzdW0ocmVzdWx0cykKKyAgICAgICAgICAgIG5EaWZmZXJp
bmdTYW1wbGVzID0gbGVuKGZpbHRlcihib29sLCByZXN1bHRzKSkKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGVzQXJlSWRlbnRpY2FsID0gbm90IG5EaWZmZXJpbmdTYW1wbGVzCisgICAgICAgICAgICBz
ZWxmLl9maWxlc0FyZUlkZW50aWNhbFdpdGhpblRvbGVyYW5jZSA9IG5vdCBsZW4oZmlsdGVyKGxh
bWJkYSB4OiB4ID4gc2VsZi5fdG9sZXJhbmNlLCByZXN1bHRzKSkKKworICAgICAgICAgICAgaWYg
bkRpZmZlcmluZ1NhbXBsZXM6CisgICAgICAgICAgICAgICAgc2VsZi5fZGlmZiArPSAnXG4nCisg
ICAgICAgICAgICAgICAgc2VsZi5fZGlmZiArPSAnVG90YWwgZGlmZmVyaW5nIHNhbXBsZXM6ICVk
XG4nICUgbkRpZmZlcmluZ1NhbXBsZXMKKyAgICAgICAgICAgICAgICBzZWxmLl9kaWZmICs9ICdQ
ZXJjZW50YWdlIG9mIGRpZmZlcmluZyBzYW1wbGVzOiAlMC4zZiUlXG4nICUgKDEwMCAqIGZsb2F0
KG5EaWZmZXJpbmdTYW1wbGVzKSAvIG1heChmcmFtZUNvdW50MSwgZnJhbWVDb3VudDIpKQorICAg
ICAgICAgICAgICAgIHNlbGYuX2RpZmYgKz0gJ0N1bXVsYXRpdmUgc2FtcGxlIGRpZmZlcmVuY2U6
ICVkXG4nICUgY3VtdWxhdGl2ZVNhbXBsZURpZmYKKyAgICAgICAgICAgICAgICBzZWxmLl9kaWZm
ICs9ICdBdmVyYWdlIHNhbXBsZSBkaWZmZXJlbmNlOiAlZlxuJyAlIChmbG9hdChjdW11bGF0aXZl
U2FtcGxlRGlmZikgLyBuRGlmZmVyaW5nU2FtcGxlcykKKworICAgIGRlZiBfZGlmZlBhcmFtKHNl
bGYsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbU5hbWUpOgorICAgICAgICBpZiBwYXJhbTEgPT0gcGFy
YW0yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuX2RpZmYgKz0gcGFy
YW1OYW1lICsgJ1xuJworICAgICAgICBzZWxmLl9kaWZmICs9ICc8ICVzXG4nICUgc3RyKHBhcmFt
MSkKKyAgICAgICAgc2VsZi5fZGlmZiArPSAnLS0tXG4nCisgICAgICAgIHNlbGYuX2RpZmYgKz0g
Jz4gJXNcbicgJSBzdHIocGFyYW0yKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9y
ZWFkU2FtcGxlcyhzZWxmLCBmaWxlLCBzYW1wbGVXaWR0aCwgblNhbXBsZXMpOgorICAgICAgICBh
bGxGcmFtZXMgPSBmaWxlLnJlYWRmcmFtZXMoblNhbXBsZXMpCisgICAgICAgIHVucGFja0Zvcm1h
dCA9ICdiJyBpZiBzYW1wbGVXaWR0aCA9PSAxIGVsc2UgJ2gnCisgICAgICAgIHJldHVybiBzdHJ1
Y3QudW5wYWNrKCc8JWQlcycgJSAoblNhbXBsZXMsIHVucGFja0Zvcm1hdCksIGFsbEZyYW1lcykK
KworICAgIGRlZiBfZGlmZlNhbXBsZShzZWxmLCBkYXRhMSwgZGF0YTIsIGkpOgorICAgICAgICBp
ZiAoZGF0YTEgIT0gZGF0YTIpOgorICAgICAgICAgICAgc2VsZi5fZGlmZiArPSAnU2FtcGxlICMl
ZFxuJyAlIGkKKyAgICAgICAgICAgIHNlbGYuX2RpZmYgKz0gJzwgJWRcbicgJSBkYXRhMQorICAg
ICAgICAgICAgc2VsZi5fZGlmZiArPSAnLS0tXG4nCisgICAgICAgICAgICBzZWxmLl9kaWZmICs9
ICc+ICVkXG4nICUgZGF0YTIKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzQXJlSWRlbnRpY2FsID0g
RmFsc2UKKyAgICAgICAgcmV0dXJuIGFicyhkYXRhMSAtIGRhdGEyKQorCisgICAgZGVmIGZpbGVz
QXJlSWRlbnRpY2FsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXNBcmVJZGVudGlj
YWwKKworICAgIGRlZiBmaWxlc0FyZUlkZW50aWNhbFdpdGhpblRvbGVyYW5jZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzQXJlSWRlbnRpY2FsV2l0aGluVG9sZXJhbmNlCisKKyAg
ICBkZWYgZGlmZlRleHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kaWZmCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi93YXZlZGlmZi5weQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK0xGClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3Rlc3RfcmVzdWx0X3dyaXRlci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy90ZXN0X3Jl
c3VsdF93cml0ZXIucHkJKHJldmlzaW9uIDE4MTQwMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3Rlc3RfcmVzdWx0X3dyaXRlci5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiBpbXBvcnQgbG9nZ2luZwogCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi53YXZlZGlmZiBpbXBvcnQgV2F2ZURpZmYKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9mYWlsdXJlcwogCiAKQEAgLTE2MSw2ICsxNjIsMTEg
QEAgY2xhc3MgVGVzdFJlc3VsdFdyaXRlcihvYmplY3QpOgogICAgIGRlZiB3cml0ZV9hdWRpb19m
aWxlcyhzZWxmLCBhY3R1YWxfYXVkaW8sIGV4cGVjdGVkX2F1ZGlvKToKICAgICAgICAgc2VsZi53
cml0ZV9vdXRwdXRfZmlsZXMoJy53YXYnLCBhY3R1YWxfYXVkaW8sIGV4cGVjdGVkX2F1ZGlvKQog
CisgICAgZGVmIGNyZWF0ZV9hdWRpb19kaWZmX2FuZF93cml0ZV9yZXN1bHQoc2VsZiwgYWN0dWFs
X2F1ZGlvLCBleHBlY3RlZF9hdWRpbyk6CisgICAgICAgIGRpZmYgPSBXYXZlRGlmZihleHBlY3Rl
ZF9hdWRpbywgYWN0dWFsX2F1ZGlvKQorICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRw
dXRfZmlsZW5hbWUoc2VsZi5GSUxFTkFNRV9TVUZGSVhfRElGRiArICcudHh0JykKKyAgICAgICAg
c2VsZi5fd3JpdGVfdGV4dF9maWxlKGRpZmZfZmlsZW5hbWUsIGRpZmYuZGlmZlRleHQoKSkKKwog
ICAgIGRlZiB3cml0ZV9pbWFnZV9maWxlcyhzZWxmLCBhY3R1YWxfaW1hZ2UsIGV4cGVjdGVkX2lt
YWdlKToKICAgICAgICAgc2VsZi53cml0ZV9vdXRwdXRfZmlsZXMoJy5wbmcnLCBhY3R1YWxfaW1h
Z2UsIGV4cGVjdGVkX2ltYWdlKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9tb2RlbHMvdGVzdF9mYWlsdXJlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9mYWlsdXJlcy5weQkocmV2aXNp
b24gMTgxNDAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxz
L3Rlc3RfZmFpbHVyZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsNyBAQCBjbGFz
cyBGYWlsdXJlVGV4dChUZXN0RmFpbHVyZSk6CiBjbGFzcyBGYWlsdXJlQXVkaW8oVGVzdEZhaWx1
cmUpOgogICAgIGRlZiB3cml0ZV9mYWlsdXJlKHNlbGYsIHdyaXRlciwgZHJpdmVyX291dHB1dCwg
ZXhwZWN0ZWRfZHJpdmVyX291dHB1dCwgcG9ydCk6CiAgICAgICAgIHdyaXRlci53cml0ZV9hdWRp
b19maWxlcyhkcml2ZXJfb3V0cHV0LmF1ZGlvLCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmF1ZGlv
KQorICAgICAgICB3cml0ZXIuY3JlYXRlX2F1ZGlvX2RpZmZfYW5kX3dyaXRlX3Jlc3VsdChkcml2
ZXJfb3V0cHV0LmF1ZGlvLCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmF1ZGlvKQogCiAKIGNsYXNz
IEZhaWx1cmVUaW1lb3V0KFRlc3RGYWlsdXJlKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5CShyZXZpc2lvbiAxODE0MDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5wcmV0dHlwYXRjaCBpbXBvcnQgCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0g
aW1wb3J0IHBhdGgKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0
IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBv
cnQgU3lzdGVtSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24ud2F2ZWRpZmYgaW1wb3J0IFdhdmVE
aWZmCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi53ZWJraXRfZmluZGVyIGltcG9ydCBXZWJLaXRGaW5k
ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24g
aW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZp
ZyBhcyBwb3J0X2NvbmZpZwpAQCAtMjgyLDcgKzI4MywxMCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6
CiAgICAgICAgIHJldHVybiBleHBlY3RlZF90ZXh0ICE9IGFjdHVhbF90ZXh0CiAKICAgICBkZWYg
ZG9fYXVkaW9fcmVzdWx0c19kaWZmZXIoc2VsZiwgZXhwZWN0ZWRfYXVkaW8sIGFjdHVhbF9hdWRp
byk6Ci0gICAgICAgIHJldHVybiBleHBlY3RlZF9hdWRpbyAhPSBhY3R1YWxfYXVkaW8KKyAgICAg
ICAgaWYgZXhwZWN0ZWRfYXVkaW8gPT0gYWN0dWFsX2F1ZGlvOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgIGRpZmYgPSBXYXZlRGlmZihleHBlY3RlZF9hdWRpbywgYWN0dWFsX2F1
ZGlvKQorICAgICAgICByZXR1cm4gbm90IGRpZmYuZmlsZXNBcmVJZGVudGljYWxXaXRoaW5Ub2xl
cmFuY2UoKQogCiAgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVudHMsIGFj
dHVhbF9jb250ZW50cywgdG9sZXJhbmNlPU5vbmUpOgogICAgICAgICAiIiJDb21wYXJlIHR3byBp
bWFnZXMgYW5kIHJldHVybiBhIHR1cGxlIG9mIGFuIGltYWdlIGRpZmYsIGEgcGVyY2VudGFnZSBk
aWZmZXJlbmNlICgwLTEwMCksIGFuZCBhbiBlcnJvciBzdHJpbmcuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248735</attachid>
            <date>2015-03-16 11:40:59 -0700</date>
            <delta_ts>2015-03-16 14:53:15 -0700</delta_ts>
            <desc>with fixes</desc>
            <filename>AudioDiff.txt</filename>
            <type>text/plain</type>
            <size>15943</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE4MTU2OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDE1LTAzLTEzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgorCisgICAgICAgIEFkZCB0b2xlcmFuY2UgdG8gV2ViQXVkaW8gdGVzdHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjY3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vd2F2ZWRpZmYucHk6IEFkZGVkLiBCYXNlZCBvbiBKZXIgTm9ibGUncyB3b3JrLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvdGVzdF9y
ZXN1bHRfd3JpdGVyLnB5OgorICAgICAgICAoVGVzdFJlc3VsdFdyaXRlci5jcmVhdGVfYXVkaW9f
ZGlmZl9hbmRfd3JpdGVfcmVzdWx0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9tb2RlbHMvdGVzdF9mYWlsdXJlcy5weToKKyAgICAgICAgKEZhaWx1cmVBdWRpby53
cml0ZV9mYWlsdXJlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToK
KyAgICAgICAgKFBvcnQuZG9fYXVkaW9fcmVzdWx0c19kaWZmZXIpOgorICAgICAgICBEaWZmIGF1
ZGlvIGZhaWx1cmVzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3Rlc3QucHk6
IEFkZGVkIGEgdGVzdCBmb3IgdGhlIHRvbGVyYW5jZSwgZml4ZWQgZXhpc3RpbmcKKyAgICAgICAg
dGVzdHMgdG8gdXNlIHJlYWwgcGFyc2VhYmxlIFdBViBkYXRhLCBhbmQgZ290IHJpZCBvZiBiYXNl
NjQsIHdoaWNoIHRoZXJlIGRpZG4ndAorICAgICAgICBzZWVtIHRvIGhhdmUgYmVlbiBhbnkgcmVh
c29uIGZvci4KKwogMjAxNS0wMy0xNiAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPgogCiAgICAgICAgIENyZWF0ZWQgU3RyZWFtcyBBUEkgd2F0Y2hsaXN0Cklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi93YXZlZGlmZi5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi93YXZlZGlmZi5weQkocmV2aXNpb24g
MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdmVkaWZmLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisj
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1w
b3J0IHRlbXBmaWxlCitpbXBvcnQgd2F2ZQorCisKK2NsYXNzIFdhdmVEaWZmKG9iamVjdCk6Cisg
ICAgX3BhcmFtTmFtZXMgPSAoJ051bWJlciBvZiBjaGFubmVscycsICdTYW1wbGUgd2lkdGgnLCAn
U2FtcGxlIHJhdGUnLCAnTnVtYmVyIG9mIGZyYW1lcycsICdDb21wcmVzc2lvbiB0eXBlJywgJ0Nv
bXByZXNzaW9uIG5hbWUnKQorCisgICAgIyBBdWRpbyBlZmZlY3QgcHJvY2Vzc2luZyBpcyBpbnRy
aW5zaWNhbGx5IGltcHJlY2lzZSwgc28gd2UgbmVlZCB0byBhbHdheXMgYWxsb3cgdG9sZXJhbmNl
LgorICAgIF90b2xlcmFuY2UgPSAxCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW4xLCBpbjIp
OgorICAgICAgICBpZiBpc2luc3RhbmNlKGluMSwgZmlsZSk6CisgICAgICAgICAgICB3YXZlRmls
ZTEgPSB3YXZlLm9wZW4oaW4xLCAncmInKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2F2
ZUZpbGUxID0gd2F2ZS5vcGVuKFN0cmluZ0lPLlN0cmluZ0lPKGluMSksICdyYicpCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoaW4yLCBmaWxlKToKKyAgICAgICAgICAgIHdhdmVGaWxlMSA9IHdhdmUu
b3BlbihpbjIsICdyYicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3YXZlRmlsZTIgPSB3
YXZlLm9wZW4oU3RyaW5nSU8uU3RyaW5nSU8oaW4yKSwgJ3JiJykKKworICAgICAgICBwYXJhbXMx
ID0gd2F2ZUZpbGUxLmdldHBhcmFtcygpCisgICAgICAgIHBhcmFtczIgPSB3YXZlRmlsZTIuZ2V0
cGFyYW1zKCkKKworICAgICAgICBzZWxmLl9kaWZmID0gJycKKworICAgICAgICBzZWxmLl9maWxl
c0FyZUlkZW50aWNhbCA9IG5vdCBzdW0obWFwKHNlbGYuX2RpZmZQYXJhbSwgcGFyYW1zMSwgcGFy
YW1zMiwgc2VsZi5fcGFyYW1OYW1lcykpCisgICAgICAgIHNlbGYuX2ZpbGVzQXJlSWRlbnRpY2Fs
V2l0aGluVG9sZXJhbmNlID0gc2VsZi5fZmlsZXNBcmVJZGVudGljYWwKKworICAgICAgICBpZiBu
b3Qgc2VsZi5fZmlsZXNBcmVJZGVudGljYWw6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAg
ICAjIE1ldGFkYXRhIGlzIGlkZW50aWNhbCwgY29tcGFyZSB0aGUgY29udGVudCBub3cuCisKKyAg
ICAgICAgY2hhbm5lbENvdW50MSA9IHdhdmVGaWxlMS5nZXRuY2hhbm5lbHMoKQorICAgICAgICBm
cmFtZUNvdW50MSA9IHdhdmVGaWxlMS5nZXRuZnJhbWVzKCkKKyAgICAgICAgc2FtcGxlV2lkdGgx
ID0gd2F2ZUZpbGUxLmdldHNhbXB3aWR0aCgpCisgICAgICAgIGNoYW5uZWxDb3VudDIgPSB3YXZl
RmlsZTIuZ2V0bmNoYW5uZWxzKCkKKyAgICAgICAgZnJhbWVDb3VudDIgPSB3YXZlRmlsZTIuZ2V0
bmZyYW1lcygpCisgICAgICAgIHNhbXBsZVdpZHRoMiA9IHdhdmVGaWxlMi5nZXRzYW1wd2lkdGgo
KQorCisgICAgICAgIGFsbERhdGExID0gc2VsZi5fcmVhZFNhbXBsZXMod2F2ZUZpbGUxLCBzYW1w
bGVXaWR0aDEsIGZyYW1lQ291bnQxICogY2hhbm5lbENvdW50MSkKKyAgICAgICAgYWxsRGF0YTIg
PSBzZWxmLl9yZWFkU2FtcGxlcyh3YXZlRmlsZTIsIHNhbXBsZVdpZHRoMiwgZnJhbWVDb3VudDIg
KiBjaGFubmVsQ291bnQyKQorICAgICAgICByZXN1bHRzID0gbWFwKHNlbGYuX2RpZmZTYW1wbGUs
IGFsbERhdGExLCBhbGxEYXRhMiwgeHJhbmdlKG1heChmcmFtZUNvdW50MSAqIGNoYW5uZWxDb3Vu
dDEsIGZyYW1lQ291bnQyICogY2hhbm5lbENvdW50MikpKQorCisgICAgICAgIGN1bXVsYXRpdmVT
YW1wbGVEaWZmID0gc3VtKHJlc3VsdHMpCisgICAgICAgIGRpZmZlcmluZ1NhbXBsZUNvdW50ID0g
bGVuKGZpbHRlcihib29sLCByZXN1bHRzKSkKKyAgICAgICAgc2VsZi5fZmlsZXNBcmVJZGVudGlj
YWwgPSBub3QgZGlmZmVyaW5nU2FtcGxlQ291bnQKKyAgICAgICAgc2VsZi5fZmlsZXNBcmVJZGVu
dGljYWxXaXRoaW5Ub2xlcmFuY2UgPSBub3QgbGVuKGZpbHRlcihsYW1iZGEgeDogeCA+IHNlbGYu
X3RvbGVyYW5jZSwgcmVzdWx0cykpCisKKyAgICAgICAgaWYgZGlmZmVyaW5nU2FtcGxlQ291bnQ6
CisgICAgICAgICAgICBzZWxmLl9kaWZmICs9ICdcbicKKyAgICAgICAgICAgIHNlbGYuX2RpZmYg
Kz0gJ1RvdGFsIGRpZmZlcmluZyBzYW1wbGVzOiAlZFxuJyAlIGRpZmZlcmluZ1NhbXBsZUNvdW50
CisgICAgICAgICAgICBzZWxmLl9kaWZmICs9ICdQZXJjZW50YWdlIG9mIGRpZmZlcmluZyBzYW1w
bGVzOiAlMC4zZiUlXG4nICUgKDEwMCAqIGZsb2F0KGRpZmZlcmluZ1NhbXBsZUNvdW50KSAvIG1h
eChmcmFtZUNvdW50MSwgZnJhbWVDb3VudDIpKQorICAgICAgICAgICAgc2VsZi5fZGlmZiArPSAn
Q3VtdWxhdGl2ZSBzYW1wbGUgZGlmZmVyZW5jZTogJWRcbicgJSBjdW11bGF0aXZlU2FtcGxlRGlm
ZgorICAgICAgICAgICAgc2VsZi5fZGlmZiArPSAnQXZlcmFnZSBzYW1wbGUgZGlmZmVyZW5jZTog
JWZcbicgJSAoZmxvYXQoY3VtdWxhdGl2ZVNhbXBsZURpZmYpIC8gZGlmZmVyaW5nU2FtcGxlQ291
bnQpCisKKyAgICBkZWYgX2RpZmZQYXJhbShzZWxmLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW1OYW1l
KToKKyAgICAgICAgaWYgcGFyYW0xID09IHBhcmFtMjoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBzZWxmLl9kaWZmICs9IHBhcmFtTmFtZSArICdcbicKKyAgICAgICAgc2VsZi5f
ZGlmZiArPSAnPCAlc1xuJyAlIHN0cihwYXJhbTEpCisgICAgICAgIHNlbGYuX2RpZmYgKz0gJy0t
LVxuJworICAgICAgICBzZWxmLl9kaWZmICs9ICc+ICVzXG4nICUgc3RyKHBhcmFtMikKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3JlYWRTYW1wbGVz
KGZpbGUsIHNhbXBsZVdpZHRoLCBuU2FtcGxlcyk6CisgICAgICAgIGFsbEZyYW1lcyA9IGZpbGUu
cmVhZGZyYW1lcyhuU2FtcGxlcykKKyAgICAgICAgdW5wYWNrRm9ybWF0ID0gJ2InIGlmIHNhbXBs
ZVdpZHRoID09IDEgZWxzZSAnaCcKKyAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJzwlZCVz
JyAlIChuU2FtcGxlcywgdW5wYWNrRm9ybWF0KSwgYWxsRnJhbWVzKQorCisgICAgZGVmIF9kaWZm
U2FtcGxlKHNlbGYsIGRhdGExLCBkYXRhMiwgaSk6CisgICAgICAgIGlmIChkYXRhMSAhPSBkYXRh
Mik6CisgICAgICAgICAgICBzZWxmLl9kaWZmICs9ICdTYW1wbGUgIyVkXG4nICUgaQorICAgICAg
ICAgICAgc2VsZi5fZGlmZiArPSAnPCAlZFxuJyAlIGRhdGExCisgICAgICAgICAgICBzZWxmLl9k
aWZmICs9ICctLS1cbicKKyAgICAgICAgICAgIHNlbGYuX2RpZmYgKz0gJz4gJWRcbicgJSBkYXRh
MgorICAgICAgICByZXR1cm4gYWJzKGRhdGExIC0gZGF0YTIpCisKKyAgICBkZWYgZmlsZXNBcmVJ
ZGVudGljYWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlc0FyZUlkZW50aWNhbAor
CisgICAgZGVmIGZpbGVzQXJlSWRlbnRpY2FsV2l0aGluVG9sZXJhbmNlKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fZmlsZXNBcmVJZGVudGljYWxXaXRoaW5Ub2xlcmFuY2UKKworICAgIGRl
ZiBkaWZmVGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RpZmYKClByb3BlcnR5IGNo
YW5nZXMgb246IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdmVkaWZmLnB5Cl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworTEYKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvdGVzdF9yZXN1bHRfd3JpdGVyLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3Rlc3RfcmVzdWx0
X3dyaXRlci5weQkocmV2aXNpb24gMTgxNDAwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvdGVzdF9yZXN1bHRfd3JpdGVyLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKIGltcG9ydCBsb2dnaW5nCiAKK2Zyb20gd2Via2l0cHku
Y29tbW9uLndhdmVkaWZmIGltcG9ydCBXYXZlRGlmZgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubW9kZWxzIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiAKIApAQCAtMTYxLDYgKzE2MiwxMCBAQCBj
bGFzcyBUZXN0UmVzdWx0V3JpdGVyKG9iamVjdCk6CiAgICAgZGVmIHdyaXRlX2F1ZGlvX2ZpbGVz
KHNlbGYsIGFjdHVhbF9hdWRpbywgZXhwZWN0ZWRfYXVkaW8pOgogICAgICAgICBzZWxmLndyaXRl
X291dHB1dF9maWxlcygnLndhdicsIGFjdHVhbF9hdWRpbywgZXhwZWN0ZWRfYXVkaW8pCiAKKyAg
ICBkZWYgY3JlYXRlX2F1ZGlvX2RpZmZfYW5kX3dyaXRlX3Jlc3VsdChzZWxmLCBhY3R1YWxfYXVk
aW8sIGV4cGVjdGVkX2F1ZGlvKToKKyAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0
X2ZpbGVuYW1lKHNlbGYuRklMRU5BTUVfU1VGRklYX0RJRkYgKyAnLnR4dCcpCisgICAgICAgIHNl
bGYuX3dyaXRlX3RleHRfZmlsZShkaWZmX2ZpbGVuYW1lLCBXYXZlRGlmZihleHBlY3RlZF9hdWRp
bywgYWN0dWFsX2F1ZGlvKS5kaWZmVGV4dCgpKQorCiAgICAgZGVmIHdyaXRlX2ltYWdlX2ZpbGVz
KHNlbGYsIGFjdHVhbF9pbWFnZSwgZXhwZWN0ZWRfaW1hZ2UpOgogICAgICAgICBzZWxmLndyaXRl
X291dHB1dF9maWxlcygnLnBuZycsIGFjdHVhbF9pbWFnZSwgZXhwZWN0ZWRfaW1hZ2UpCiAKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy90ZXN0X2ZhaWx1
cmVzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L21vZGVscy90ZXN0X2ZhaWx1cmVzLnB5CShyZXZpc2lvbiAxODE0MDApCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9mYWlsdXJlcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw3IEBAIGNsYXNzIEZhaWx1cmVUZXh0KFRlc3RGYWlsdXJl
KToKIGNsYXNzIEZhaWx1cmVBdWRpbyhUZXN0RmFpbHVyZSk6CiAgICAgZGVmIHdyaXRlX2ZhaWx1
cmUoc2VsZiwgd3JpdGVyLCBkcml2ZXJfb3V0cHV0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LCBw
b3J0KToKICAgICAgICAgd3JpdGVyLndyaXRlX2F1ZGlvX2ZpbGVzKGRyaXZlcl9vdXRwdXQuYXVk
aW8sIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQuYXVkaW8pCisgICAgICAgIHdyaXRlci5jcmVhdGVf
YXVkaW9fZGlmZl9hbmRfd3JpdGVfcmVzdWx0KGRyaXZlcl9vdXRwdXQuYXVkaW8sIGV4cGVjdGVk
X2RyaXZlcl9vdXRwdXQuYXVkaW8pCiAKIAogY2xhc3MgRmFpbHVyZVRpbWVvdXQoVGVzdEZhaWx1
cmUpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJldmlzaW9uIDE4MTQw
MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC01MCw2ICs1MCw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnByZXR0eXBhdGNoIGltcG9y
dCAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0Citmcm9tIHdlYmtp
dHB5LmNvbW1vbi53YXZlZGlmZiBpbXBvcnQgV2F2ZURpZmYKIGZyb20gd2Via2l0cHkuY29tbW9u
LndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24K
IGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCkBAIC0yODIs
NyArMjgzLDkgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICByZXR1cm4gZXhwZWN0ZWRf
dGV4dCAhPSBhY3R1YWxfdGV4dAogCiAgICAgZGVmIGRvX2F1ZGlvX3Jlc3VsdHNfZGlmZmVyKHNl
bGYsIGV4cGVjdGVkX2F1ZGlvLCBhY3R1YWxfYXVkaW8pOgotICAgICAgICByZXR1cm4gZXhwZWN0
ZWRfYXVkaW8gIT0gYWN0dWFsX2F1ZGlvCisgICAgICAgIGlmIGV4cGVjdGVkX2F1ZGlvID09IGFj
dHVhbF9hdWRpbzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gbm90
IFdhdmVEaWZmKGV4cGVjdGVkX2F1ZGlvLCBhY3R1YWxfYXVkaW8pLmZpbGVzQXJlSWRlbnRpY2Fs
V2l0aGluVG9sZXJhbmNlKCkKIAogICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2Nv
bnRlbnRzLCBhY3R1YWxfY29udGVudHMsIHRvbGVyYW5jZT1Ob25lKToKICAgICAgICAgIiIiQ29t
cGFyZSB0d28gaW1hZ2VzIGFuZCByZXR1cm4gYSB0dXBsZSBvZiBhbiBpbWFnZSBkaWZmLCBhIHBl
cmNlbnRhZ2UgZGlmZmVyZW5jZSAoMC0xMDApLCBhbmQgYW4gZXJyb3Igc3RyaW5nLgpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Rlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3Rlc3QucHkJKHJldmlzaW9uIDE4MTQwMCkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw2IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgYmFzZTY0CiBp
bXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCkBAIC05OSw3ICs5OCw3IEBAIGNsYXNzIFRlc3RMaXN0
KG9iamVjdCk6CiAjCiAjIFRoZXNlIG51bWJlcnMgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCB3aGVu
ZXZlciB3ZSBhZGQgb3IgZGVsZXRlIHRlc3RzLgogIwotVE9UQUxfVEVTVFMgPSA3MQorVE9UQUxf
VEVTVFMgPSA3MgogVE9UQUxfU0tJUFMgPSA5CiBUT1RBTF9SRVRSSUVTID0gMTQKIApAQCAtMTA3
LDYgKzEwNiw5IEBAIFVORVhQRUNURURfUEFTU0VTID0gNwogVU5FWFBFQ1RFRF9GQUlMVVJFUyA9
IDE3CiAKIGRlZiB1bml0X3Rlc3RfbGlzdCgpOgorICAgIHNpbGVudF9hdWRpbyA9ICJSSUZGMlx4
MDBceDAwXHgwMFdBVkVmbXQgXHgxMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDBceDIyXHg1
Nlx4MDBceDAwXHg0NFx4QUNceDAwXHgwMFx4MDJceDAwXHgxMFx4MDBkYXRhXHgwRVx4MDBceDAw
XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBc
eDAwIgorICAgIHNpbGVudF9hdWRpb193aXRoX3NpbmdsZV9iaXRfZGlmZmVyZW5jZSA9ICJSSUZG
Mlx4MDBceDAwXHgwMFdBVkVmbXQgXHgxMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDBceDIy
XHg1Nlx4MDBceDAwXHg0NFx4QUNceDAwXHgwMFx4MDJceDAwXHgxMFx4MDBkYXRhXHgwRVx4MDBc
eDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4
MDBceDAwIgorICAgIGF1ZGlvMiA9ICJSSUZGMlx4MDBceDAwXHgwMFdBVkVmbXQgXHgxMFx4MDBc
eDAwXHgwMFx4MDFceDAwXHgwMVx4MDBceDIyXHg1Nlx4MDBceDAwXHg0NFx4QUNceDAwXHgwMFx4
MDJceDAwXHgxMFx4MDBkYXRhXHgwRVx4MDBceDAwXHgwMFx4NDBceDAwXHgwMFx4MDBceDAwXHgw
MFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgogICAgIHRlc3RzID0gVGVzdExpc3Qo
KQogICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcsIGNyYXNoPVRy
dWUpCiAgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCcsIGV4
Y2VwdGlvbj1UcnVlKQpAQCAtMTIwLDcgKzEyMiw3IEBAIGRlZiB1bml0X3Rlc3RfbGlzdCgpOgog
ICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW09J2ltYWdlX2NoZWNrc3VtX2ZhaWwtY2hlY2tz
dW0nLAogICAgICAgICAgICAgICBhY3R1YWxfaW1hZ2U9J2ltYWdlX2NoZWNrc3VtX2ZhaWwtcG5n
JykKICAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2F1ZGlvLmh0bWwnLAotICAgICAg
ICAgICAgICBhY3R1YWxfYXVkaW89YmFzZTY0LmI2NGVuY29kZSgnYXVkaW9fZmFpbC13YXYnKSwg
ZXhwZWN0ZWRfYXVkaW89J2F1ZGlvLXdhdicsCisgICAgICAgICAgICAgIGFjdHVhbF9hdWRpbz1z
aWxlbnRfYXVkaW8sIGV4cGVjdGVkX2F1ZGlvPWF1ZGlvMiwKICAgICAgICAgICAgICAgYWN0dWFs
X3RleHQ9Tm9uZSwgZXhwZWN0ZWRfdGV4dD1Ob25lLAogICAgICAgICAgICAgICBhY3R1YWxfaW1h
Z2U9Tm9uZSwgZXhwZWN0ZWRfaW1hZ2U9Tm9uZSwKICAgICAgICAgICAgICAgYWN0dWFsX2NoZWNr
c3VtPU5vbmUpCkBAIC0xODEsNyArMTgzLDEyIEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDM0
CiAgICAgdGVzdHMuYWRkKCdwYXNzZXMvZXJyb3IuaHRtbCcsIGVycm9yPSdzdHVmZiBnb2luZyB0
byBzdGRlcnInKQogICAgIHRlc3RzLmFkZCgncGFzc2VzL2ltYWdlLmh0bWwnKQogICAgIHRlc3Rz
LmFkZCgncGFzc2VzL2F1ZGlvLmh0bWwnLAotICAgICAgICAgICAgICBhY3R1YWxfYXVkaW89YmFz
ZTY0LmI2NGVuY29kZSgnYXVkaW8td2F2JyksIGV4cGVjdGVkX2F1ZGlvPSdhdWRpby13YXYnLAor
ICAgICAgICAgICAgICBhY3R1YWxfYXVkaW89c2lsZW50X2F1ZGlvLCBleHBlY3RlZF9hdWRpbz1z
aWxlbnRfYXVkaW8sCisgICAgICAgICAgICAgIGFjdHVhbF90ZXh0PU5vbmUsIGV4cGVjdGVkX3Rl
eHQ9Tm9uZSwKKyAgICAgICAgICAgICAgYWN0dWFsX2ltYWdlPU5vbmUsIGV4cGVjdGVkX2ltYWdl
PU5vbmUsCisgICAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bT1Ob25lKQorICAgIHRlc3RzLmFk
ZCgncGFzc2VzL2F1ZGlvLXRvbGVyYW5jZS5odG1sJywKKyAgICAgICAgICAgICAgYWN0dWFsX2F1
ZGlvPXNpbGVudF9hdWRpb193aXRoX3NpbmdsZV9iaXRfZGlmZmVyZW5jZSwgZXhwZWN0ZWRfYXVk
aW89c2lsZW50X2F1ZGlvLAogICAgICAgICAgICAgICBhY3R1YWxfdGV4dD1Ob25lLCBleHBlY3Rl
ZF90ZXh0PU5vbmUsCiAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZT1Ob25lLCBleHBlY3RlZF9p
bWFnZT1Ob25lLAogICAgICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW09Tm9uZSkKQEAgLTU1OCw3
ICs1NjUsNyBAQCBjbGFzcyBUZXN0RHJpdmVyKERyaXZlcik6CiAgICAgICAgICAgICBhY3R1YWxf
dGV4dCA9IGFjdHVhbF90ZXh0ICsgJyAnICsgJyAnLmpvaW4odGVzdF9hcmdzKQogCiAgICAgICAg
IGlmIHRlc3QuYWN0dWFsX2F1ZGlvOgotICAgICAgICAgICAgYXVkaW8gPSBiYXNlNjQuYjY0ZGVj
b2RlKHRlc3QuYWN0dWFsX2F1ZGlvKQorICAgICAgICAgICAgYXVkaW8gPSB0ZXN0LmFjdHVhbF9h
dWRpbwogICAgICAgICBjcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAgY3Jhc2hl
ZF9waWQgPSBOb25lCiAgICAgICAgIGlmIHRlc3QuY3Jhc2g6CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
ODE0ODQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNCBAQAorMjAxNS0wMy0xMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgdG9sZXJhbmNlIHRvIFdlYkF1ZGlvIHRlc3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI2NzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvaGFybmVzcy9yZXN1bHRz
Lmh0bWw6IERpc3BsYXkgYSBkaWZmIGxpbmsgZm9yIGF1ZGlvIHRlc3RzLCBhcyB3ZSBub3cgaGF2
ZSB0aGUgZGlmZi4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOiBV
bm1hcmsgdGVzdHMgdGhhdCBzaG91bGQgbm93IHBhc3MgZXZlcnl3aGVyZS4KKwogMjAxNS0wMy0x
MyAgRG91ZyBSdXNzZWxsICA8ZF9ydXNzZWxsQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogUHJv
dmlkZSBBUEkgZm9yIGFzc2lzdGl2ZSB0ZWNoIHRvIGlnbm9yZSBET00ga2V5IGV2ZW50IGhhbmRs
ZXJzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2hhcm5lc3MvcmVzdWx0cy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaGFybmVzcy9yZXN1bHRzLmh0bWwJKHJldmlzaW9uIDE4
MTQwMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaGFybmVzcy9yZXN1bHRzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTY1OSw2ICs2NTksNyBAQCBmdW5jdGlvbiB0YWJsZVJvdyh0ZXN0T2JqZWN0KQog
ICAgIGlmIChhY3R1YWwuaW5kZXhPZignQVVESU8nKSAhPSAtMSkgewogICAgICAgICByb3cgKz0g
cmVzdWx0TGluayh0ZXN0UHJlZml4LCAnLWV4cGVjdGVkLndhdicsICdleHBlY3RlZCBhdWRpbycp
OwogICAgICAgICByb3cgKz0gcmVzdWx0TGluayh0ZXN0UHJlZml4LCAnLWFjdHVhbC53YXYnLCAn
YWN0dWFsIGF1ZGlvJyk7CisgICAgICAgIHJvdyArPSByZXN1bHRMaW5rKHRlc3RQcmVmaXgsICct
ZGlmZi50eHQnLCAndGV4dHVhbCBkaWZmJyk7CiAgICAgfQogCiAgICAgaWYgKGFjdHVhbC5pbmRl
eE9mKCdNSVNTSU5HJykgIT0gLTEpIHsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAxODE0MDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNjE3LDcgKzYxNyw2IEBA
IHdlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9kZXN0aW5hdGlvbm5vZGUKIHdlYmF1ZGlvL21lZGlh
c3RyZWFtYXVkaW9zb3VyY2Vub2RlLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmF1ZGlvL2NvZGVjLXRl
c3RzL3ZvcmJpcy8gWyBXb250Rml4IF0KIHdlYmtpdC5vcmcvYi8xMTk0Njcgd2ViYXVkaW8vYXVk
aW9idWZmZXJzb3VyY2UtbG9vcC1wb2ludHMuaHRtbCBbIFNraXAgXQotWyBNYXZlcmlja3MgXSB3
ZWJhdWRpby9jb2RlYy10ZXN0cy93YXYvMjRiaXQtMjJraHotcmVzYW1wbGUuaHRtbCBbIEZhaWx1
cmUgXQogCiAjIFRleHQgQXV0b3NpemluZyBpcyBub3QgZW5hYmxlZC4KIHdlYmtpdC5vcmcvYi84
NDE4NiBmYXN0L3RleHQtYXV0b3NpemluZwpAQCAtNzY0LDE0ICs3NjMsMTAgQEAgd2Via2l0Lm9y
Zy9iLzEyMzM2OSBzdmcvY3NzL3Jvb3Qtc2hhZG93LQogIyB3ZWJraXQub3JnL2IvMTAwODQ2LCB3
ZWJraXQub3JnL2IvMTM2NzE1CiBpbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIKIAotd2Via2l0
Lm9yZy9iLzEyMzQ5MCBbIE1hdmVyaWNrcyBdIHdlYmF1ZGlvL29zY2lsbGF0b3Itc2F3dG9vdGgu
aHRtbCBbIFBhc3MgRmFpbHVyZSBdCi0KIHdlYmtpdC5vcmcvYi8xMjQzMTEgY29tcG9zaXRpbmcv
cmVnaW9ucy90cmFuc2Zvcm0tdHJhbnNwYXJlbnQtcG9zaXRpb25lZC12aWRlby1pbnNpZGUtcmVn
aW9uLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzEyNDMyMSBbIE1h
dmVyaWNrcyBdIGFuaW1hdGlvbnMvcmVzdW1lLWFmdGVyLXBhZ2UtY2FjaGUuaHRtbCBbIFBhc3Mg
RmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi8xMjE2NDYgd2ViYXVkaW8vZGVsYXlub2RlLW1heC1k
ZWZhdWx0LWRlbGF5Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQotCiAjIFRoZXNlIGZhc3QvZm9ybXMv
c2VsZWN0IHRlc3RzIG9wZW4gYSBwb3AtdXAgbWVudSAodmlzaWJsZSBvbiBzY3JlZW4gZXZlbiB3
aGVuIHVzaW5nIHJ1bi13ZWJraXQtdGVzdHMpLCBhbmQgZ2V0IHN0dWNrIGluIGl0cyBuZXN0ZWQg
ZXZlbnQgbG9vcC4KIHdlYmtpdC5vcmcvYi84Nzc0OCBmYXN0L2Zvcm1zL3NlbGVjdC9vcHRncm91
cC1jbGlja2luZy5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvNzMzMDQgZmFzdC9mb3Jtcy9z
ZWxlY3QvbWVudWxpc3QtcG9wdXAtY3Jhc2guaHRtbCBbIFNraXAgXQpAQCAtMTA5MywxMCArMTA4
OCw2IEBAIHdlYmtpdC5vcmcvYi8xMzY5OTQgaHR0cC90ZXN0cy9tZWRpYS9obHMKIHdlYmtpdC5v
cmcvYi8xMzcxNTcgWyBSZWxlYXNlIF0gaW5zcGVjdG9yL3BhZ2UvbWFpbi1mcmFtZS1yZXNvdXJj
ZS5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIFsgRGVidWcgXSBpbnNwZWN0b3IvcGFnZS9tYWluLWZy
YW1lLXJlc291cmNlLmh0bWwgWyBQYXNzIEZhaWx1cmUgU2xvdyBdCiAKLSMgRklYTUU6IE5lZWRz
IGJ1Z3ppbGxhICg8cmRhcjovL3Byb2JsZW0vMTUzOTMxNzk+KQotWyBZb3NlbWl0ZSsgXSB3ZWJh
dWRpby9jb2RlYy10ZXN0cy93YXYvMjRiaXQtMjJraHotcmVzYW1wbGUuaHRtbCBbIEZhaWx1cmUg
XQotWyBZb3NlbWl0ZSsgXSB3ZWJhdWRpby9vc2NpbGxhdG9yLXNhd3Rvb3RoLmh0bWwgWyBQYXNz
IEZhaWx1cmUgXQotCiB3ZWJraXQub3JnL2IvMTM3NTA1IG1lZGlhL3RyYWNrL3RyYWNrLWZvcmNl
ZC1zdWJ0aXRsZXMtaW4tYmFuZC5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAogIyBGSVhNRTogTmVl
ZHMgYnVnemlsbGEgKDxyZGFyOi8vcHJvYmxlbS8xNTk3MTk2OD4pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>