[Stk] EQ w/ STK

dan trueman dtrueman at Princeton.EDU
Tue, 13 Nov 2007 14:07:27 -0500


--Apple-Mail-2--222201169
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=UTF-8;
	delsp=yes;
	format=flowed

a very old webpage about gQ is here:

stk@ccrma.Stanford.EDU

http://www.music.princeton.edu/~dan/gQpage/gQ.html

and some source code with an example is attached. i hope this helps.

dt


=EF=BF=BC
On Nov 13, 2007, at 1:42 PM, Ernest Burghardt wrote:

> Thanks Perry, I'll take a look at that.
>
> On Nov 13, 2007 10:38 AM, Perry R Cook <prc@cs.princeton.edu> wrote:
> Hi Ernest,
>
> Dan Trueman implemented what he called a
> ParaGraphic Equalizer for the SGI computers
> using STK back in the late 1990's.  I think
> there's code for it on the Princeton Sound
> Kitchen.  THis might be helpful.
>
> PRC
>
> On Mon, 12 Nov 2007, Ernest Burghardt wrote:
>
> > Hi All,
> >
> > I am looking to create a 5-band graphic equalizer to compliment a =20=

> USB audio
> > device for Win/OSX and I was referred to STK for a solid =20
> technology to
> > implement the EQ portion using a Bi-Quad filter.
> > Would anyone be able to point me towards the best starting point =20
> for this?
> > Would this be a good approach, are there any examples that would =20
> be good to
> > look at?
> >
> > I looked at the BiQuad API and was not sure if it was better to =20
> set the
> > Coefficients or so just set the resonance freq...?
> >
> >
> > Thanks in advance,
> >
> > Ernie
> >
>


--Apple-Mail-2--222201169
Content-Type: multipart/mixed;
	boundary=Apple-Mail-3--222201169


--Apple-Mail-3--222201169
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=US-ASCII

<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; ">a very old webpage about gQ is here:<DIV><BR class="khtml-block-placeholder"></DIV><DIV><A href="mailto:stk@ccrma.Stanford.EDU">stk@ccrma.Stanford.EDU</A></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><A href="http://www.music.princeton.edu/~dan/gQpage/gQ.html">http://www.music.princeton.edu/~dan/gQpage/gQ.html</A></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>and some source code with an example is attached. i hope this helps.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>dt</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV></DIV></BODY></HTML>
--Apple-Mail-3--222201169
Content-Transfer-Encoding: base64
Content-Type: application/x-tar;
	x-unix-mode=0755;
	name=gQsrc.tar
Content-Disposition: attachment;
	filename=gQsrc.tar

Zm9yU2h5YW0vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDc1NSAAMDAwMzUw
IAAwMDAwMjQgADAwMDAwMDAwMDAwIDA2NDAxMTczNjAwIDAxMjQxMQAgNQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGRhbgAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAw
MCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABm
b3JTaHlhbS9FWEFNUExFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDAzNTAg
ADAwMDAyNCAAMDAwMDAwMDY0NjMgMDY0MDExNzM2MDAgMDEzNDQwACAwAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwZGFuAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAB1c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAw
IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqClNvLCBob3cg
ZG9lcyB0aGlzIGZpbHRlciBkbyBpdHMgbWFnaWM/IEhlcmUncyB0aGUgc2hvcnQgc3RvcnkgKEkg
Y2FuIGdldCAKeW91IGEgY29weSBvZiB0aGUgb3JpZ2luYWwgcGFwZXIgaWYgeW91IGFyZSBpbnRl
cmVzdGVkLCB0aG91Z2ggaXQgaXMKcHJldHR5IGJhZGx5IHdyaXR0ZW4pOgoKRmlyc3QsIHRoZSBz
aWduYWwgKHMpIGlzIGZpbHRlcmVkIHdpdGggYSBhbGxwYXNzIGZpbHRlciB0aGF0IGlzICJ0dW5l
ZCIKdG8gYSBjZXJ0YWluIGZyZXF1ZW5jeS4gVGhpcyBoYXMgY29tcGxldGVseSBmbGF0IG1hZ25p
dHVkZSByZXNwb25zZSBidXQKY2F1c2VzIGEgcGhhc2UgZmxpcCBhcm91bmQgdGhlIGNlbnRlciBm
cmVxdWVuY3kuIExldCdzIHNheSB0aGUgZmlsdGVyCmlzIHR1bmVkIHRvIDQ0MCBIeiwgd2l0aCBh
IGJhbmR3aWR0aCBvZiAyMCBIejsgZnJvbSAwIEh6IHRvIDQzMCBIeiwgdGhlCnBoYXNlIHJlc3Bv
bnNlIHdpbGwgYmUgMCwgZnJvbSA0MzAgdG8gNDUwIEh6IHRvIHBoYXNlIHdpbGwgcmFwaWRseQpj
bGltYiBmcm9tIDAgdG8gMzYwLCBhbmQgZnJvbSA0NTAgSHogdGhlIHBoYXNlIHdpbGwgYmUgZmxh
dCAoMzYwID0gMCwKb2J2aW91c2x5KS4gQ2FsbCB0aGlzIG5ldyBzaWduYWwgQShzKS4KClRoaXMg
c2lnbmFsIGlzIHRoZW4gc3VidHJhY3RlZCB3aXRoIHRoZSBvcmlnaW5hbCBzaWduYWwuIFRoaXMg
cmVzdWx0cwppbiBhIHBlYWsgKGZyb20gNDMwIHRvIDQ1MCBIeikgY2F1c2VkIGJ5IGNvbnN0cnVj
dGl2ZSBpbnRlcmZlcmVuY2Ugb2YKdGhlIHNpZ25hbHMgd2hlcmUgdGhlaXIgcGhhc2VzIGRpZmZl
ci4gQ2FsbCB0aGlzIHMgLSBBKHMpLgoKTm93LCBpZiB5b3Ugd2FudCBhIGN1dCwgdGhpcyBzaWdu
YWwgaXMgYWdhaW4gc3VidHJhY3RlZCBmcm9tIHRoZQpvcmlnaW5hbCBzaWduYWwgKHMgLSAocyAt
IEEocykpLiBGb3IgYSBnYWluLCB0aGlzIGlzIGFkZGVkIChzICsgKHMgLSBBKHMpKS4KCkluIHRo
ZSBlbmQsIHlvdSBoYXZlIGEgZmlsdGVyIHRoYXQgaXMgdmVyeSBzdGFibGUsIGZlYXR1cmVzICJt
aW5pbXVtCnBoYXNlLCIgYW5kIHNvdW5kcyBncmVhdC4gQWxzbywgdGhlIG1haW4gcGFyYW1ldGVy
cyAoY2VudGVyIGZyZXEsIGdhaW4sCmFuZCBiYW5kd2lkdGgpIGFyZSBjb21wbGV0ZWx5IGRlY291
cGxlZCAoYWN0dWFsbHksIHRoZXJlIGlzIGEgc2xpZ2h0CmNvdXBsaW5nIGluIHRoZSBjdXQgY2Fz
ZSAob3IgaXMgaXQgdGhlIGJvb3N0OyBJIGNhbid0IHJlbWVtYmVyKSBidXQgZm9yCnByYWN0aWNh
bCBwdXJwb3NlcyBpdCBpcyBuZWdsaWdpYmxlKS4gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYWRq
dXN0LCBzYXksCnRoZSBjZW50ZXIgZnJlcXVlbmN5IHdpdGhvdXQgZ2V0dGluZyB1bndhbnRlZCBj
aGFuZ2VzIGluIGJhbmR3aWR0aC4gVHJ5CnRoaXMgc29tZXRpbWUgd2l0aCB0aGUgcGFyYW1ldHJp
YyBlcXVhbGl6ZXIgaW4gRGlnaWRlc2lnbidzIFNvdW5kRGVzaWduZXIgCnByb2dyYW07IGl0IGNh
biBiZSB2ZXJ5IGZydXN0cmF0aW5nLiBBbmQgSSBoYXZlIG5ldmVyIGhlYXJkIGEgYmV0dGVyCnNv
dW5kaW5nIGVxIGZpbHRlci4gCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgoKSGVyZSdzIHNvbWUgcHNldWRvLWNvZGUgdG8gc2hvdyBob3cgdG8gdXNl
IHRoaXMgZmlsdGVyOgoKI2RlZmluZSBTUiA0NDEwMAojZGVmaW5lIEJVRlNJWkUgMzIKCm1haW4o
KSAKewogICAgZmxvYXQgY2YsIGdhaW4sIGJ3LCBpbnNhbXBsZXNbQlVGU0laRV0sIG91dHNhbXBs
ZXNbQlVGU0laRV07CiAgICBpbnQgc2tpcCxpbmNoYW47CiAgICBFcUJpUXVhZCAqZmlsdGVyTDsK
ICAgIEVxQmlRdWFkICpmaWx0ZXJSOwogICAgCiAgICAvL3N0dXBpZCBmdW5jcyB0byB1cGRhdGUg
cGFyYW1ldGVycy4uLgogICAgY2YgPSBnZXRDZigpOwogICAgZ2FpbiA9IGdldEdhaW4oKTsKICAg
IGJ3ID0gZ2V0d0J3KCk7CiAgICAKICAgIC8vaW5pdGlhbGl6YXRpb24gb2YgZmlsdGVyIHBhcmFt
ZXRlcnMKICAgIGZpbHRlckwgPSBuZXcgRXFCaVF1YWQoKTsKICAgIGZpbHRlckwtPnNldFNSKFNS
KTsKICAgIGZpbHRlckwtPnNldEZyZXFCb29zdEFuZEJhbmRXaWR0aChjZiwgZ2FpbiwgYncpOwog
ICAgZmlsdGVyUiA9IG5ldyBFcUJpUXVhZCgpOwogICAgZmlsdGVyUi0+c2V0U1IoU1IpOwogICAg
ZmlsdGVyUi0+c2V0RnJlcUJvb3N0QW5kQmFuZFdpZHRoKGNmLCBnYWluLCBidyk7CiAgICAKICAg
IC8vbWFpbiBsb29wCiAgICB3aGlsZSgxKQogICAgCgkvL2dldCBidWZmZXIgb2YgaW5wdXQgc2Ft
cGxlcyAoZmxvYXRzLCBzdGVyZW8gaW50ZXJsZWF2ZWQpCglpbnNhbXBsZXMgPSBnZXRTYW1wbGVz
KEJVRlNJWkUpOwoJCgkvL3Byb2Nlc3MgJ2VtLi4uCglmb3IoaW50IGk9MDsgaTxCVUZTSVpFOyBp
Kz0yKSB7CgkgICAgb3V0c2FtcGxlc1tpXSAgID0gZmlsdGVyTC0+dGljayhpbnNhbXBsZXNbaV0p
OwoJICAgIG91dHNhbXBsZXNbaSsxXSA9IGZpbHRlckwtPnRpY2soaW5zYW1wbGVzW2krMV0pOwoJ
fQoJCgkvL3BsYXkgJ2VtLi4uCglwbGF5U2FtcGxlcyhvdXRzYW1wbGVzKTsKICAgIH0KfQoKCgpB
biBhbHRlcm5hdGl2ZSBmb3IgbG9vcCwgdXNpbmcgdGhlIHZlY3Rvcml6ZWQgdGljaywgaXMgYWJv
dXQgMjAlIGZhc3RlcgpvbiB0aGUgU0dJOgoKbWFpbigpIAp7CiAgICBmbG9hdCBjZiwgZ2Fpbiwg
YncsIGluc2FtcGxlc1tCVUZTSVpFXSwgb3V0c2FtcGxlc1tCVUZTSVpFXTsKICAgIGludCBza2lw
LGluY2hhbjsKICAgIEVxQmlRdWFkICpmaWx0ZXI7CgogICAgCiAgICAvL3N0dXBpZCBmdW5jcyB0
byB1cGRhdGUgcGFyYW1ldGVycy4uLgogICAgY2YgPSBnZXRDZigpOwogICAgZ2FpbiA9IGdldEdh
aW4oKTsKICAgIGJ3ID0gZ2V0d0J3KCk7CiAgICAKICAgIC8vaW5pdGlhbGl6YXRpb24gb2YgZmls
dGVyIHBhcmFtZXRlcnMKICAgIGZpbHRlciA9IG5ldyBFcUJpUXVhZCgpOwogICAgZmlsdGVyLT5z
ZXRTUihTUik7CiAgICBmaWx0ZXItPnNldEZyZXFCb29zdEFuZEJhbmRXaWR0aChjZiwgZ2Fpbiwg
YncpOwogICAgZmlsdGVyLT5zZXRWZWN0b3JTaXplKEJVRlNJWkUpOwogICAgCiAgICAvL21haW4g
bG9vcAogICAgd2hpbGUoMSkKICAgIAoJLy9nZXQgYnVmZmVyIG9mIGlucHV0IHNhbXBsZXMgKGZs
b2F0cywgc3RlcmVvIGludGVybGVhdmVkKQoJaW5zYW1wbGVzID0gZ2V0U2FtcGxlcyhCVUZTSVpF
KTsKCQoJLy9wcm9jZXNzICdlbS4uLgoJb3V0c2FtcGxlcyA9IGZpbHRlci0+dGlja1ZlY3RvclN0
ZXJlbyhpbnNhbXBsZXMpOwoJCgkvL3BsYXkgJ2VtLi4uCglwbGF5U2FtcGxlcyhvdXRzYW1wbGVz
KTsKICAgIH0KfQoKCgp0ZXJzLi4uCiAgICBjZiA9IGdldENmKCk7CiAgICBnYWluID0gZ2V0R2Fp
bigpOwogICAgYncgPSBnZXR3QncoKTsKICAgIAogICAgLy9pbml0aWFsaXphdGlvbiBvZiBmaWx0
ZXIgcGFyYW1ldGVycwogICAgZmlsdGVyID0gbmV3IEVxQmlRdWFkKCk7CiAgICBmaWx0ZXItPnNl
dFNSKFNSKTsKICAgIGZpbHRlci0+c2V0RnJlcUJvb3N0QW5kQmFuZFdpZHRoKGNmZm9yU2h5YW0v
RXFCaVF1YWQuQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwMzUwIAAwMDAwMjQg
ADAwMDAwMDE0MDMzIDA2NDAxMTczNjAwIDAxNDE1MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGRhbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qICBUaGlzIGlzIGEgbW9kaWZp
Y2F0aW9uIG9mIFBlcnJ5IENvb2sncyAgKi8KLyogIEJpUXVhZCBmaWx0ZXIgdGhhdCBkZWNvdXBs
ZXMgZ2FpbiBmcm9tICAqLyAKLyogIGZyZXF1ZW5jeSBhbmQgYmFuZHdpZHRoIHNwZWNpZmljYXRp
b25zICAqLwovKiAgYWNjb3JkaW5nIHRvIHRoZSBhbGdvcml0aG0gZnJvbSBab2x6ZXIgICovCi8q
ICBhbmQgQm9sdHplJ3MgIlBhcmFtZXRyaWMgRGlnaXRhbCBGaWx0ZXIgKi8KLyogIFN0cnVjdHVy
ZXMiIHBhcGVyLiAgRGFuIFRydWVtYW4sIDIvOTYuICAqLwovKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCgojaW5jbHVkZSAiRXFCaVF1YWQuaCIKCkVxQmlRdWFk
IDo6IEVxQmlRdWFkKCkKLy8gVGhpcyBpcyB0aGUgQysrIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9u
IAovLyBkb2VzIHRoZSByZXF1aXJlZCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgc2V0cwovLyBpbml0
aWFsIHZhbHVlcyBmb3IgdmFyaWFibGVzCnsKICAgIGlucHV0cyA9IChNWV9GTE9BVCAqKSBtYWxs
b2MoMiAqIE1ZX0ZMT0FUX1NJWkUpOwogICAgb3V0cHV0cyA9IChNWV9GTE9BVCAqKSBtYWxsb2Mo
MiAqIE1ZX0ZMT0FUX1NJWkUpOwogICAgemVyb0NvZWZmc1swXSA9IDAuMDsKICAgIHplcm9Db2Vm
ZnNbMV0gPSAwLjA7CiAgICBwb2xlQ29lZmZzWzBdID0gMC4wOwogICAgcG9sZUNvZWZmc1sxXSA9
IDAuMDsKICAgIGZyZXEgPSAwLjsKICAgIGJhbmR3aWR0aCA9IDAuOwogICAgYm9vc3QgPSAwLjsK
ICAgIGdhaW4gPSAxLjA7CiAgICB0aGlzU1IgPSA0NDEwMC47CiAgICB0aGlzLT5jbGVhcigpOwp9
CgpFcUJpUXVhZCA6OiB+RXFCaVF1YWQoKQovLyB0aGUgQysrIGRlc3RydWN0b3I7IGZyZWVzIGFs
bCB0aGUgbWVtb3J5CnsKICAgIGlmKGlucHV0cyAhPSBOVUxMKSBmcmVlKGlucHV0cyk7CiAgICBp
ZihvdXRwdXRzICE9IE5VTEwpIGZyZWUob3V0cHV0cyk7CiAgICBpZihvdXRwdXRWZWN0b3IgIT0g
TlVMTCkgZnJlZShvdXRwdXRWZWN0b3IpOwp9Cgp2b2lkIEVxQmlRdWFkIDo6IGNsZWFyKCkKLy8g
Y2xlYXJzIHRoZSBkZWxheSBsaW5lIGJ1ZmZlcnMKewogICAgaW5wdXRzWzBdID0gMC4wOwogICAg
aW5wdXRzWzFdID0gMC4wOwogICAgb3V0cHV0c1swXSA9IDAuMDsKICAgIG91dHB1dHNbMV0gPSAw
LjA7Cn0KCi8vdGhlc2UgbmV4dCB0aHJlZSBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVl
cyBvZiB0aGUKLy90aHJlZSBtYWluIHBhcmFtZXRlcnMuLi4KTVlfRkxPQVQgRXFCaVF1YWQgOjog
cmV0dXJuRnJlcSgpCnsKICAgIHJldHVybiBmcmVxOwp9CgoKTVlfRkxPQVQgRXFCaVF1YWQgOjog
cmV0dXJuQmFuZHdpZHRoKCkKewogICAgcmV0dXJuIGJhbmR3aWR0aDsKfQoKCk1ZX0ZMT0FUIEVx
QmlRdWFkIDo6IHJldHVybkJvb3N0KCkKewogICAgcmV0dXJuIGJvb3N0Owp9CgoKdm9pZCBFcUJp
UXVhZCA6OiBzZXRGcmVxKE1ZX0ZMT0FUIHRoaXNGcmVxKQovL3NldHMgdGhlIGNlbnRlciBmcmVx
dWVuY3kgb2YgdGhlIGZpbHRlciwgaW4gSHouCnsKCWZyZXEgPSB0aGlzRnJlcTsKCXNldEZyZXFC
b29zdEFuZEJhbmRXaWR0aChmcmVxLCBib29zdCwgYmFuZHdpZHRoKTsKfQoKCnZvaWQgRXFCaVF1
YWQgOjogc2V0Qm9vc3QoTVlfRkxPQVQgdGhpc0Jvb3N0KQovL3NldHMgdGhlIGJvb3N0IG9mIHRo
ZSBmaWx0ZXIKLy90aGlzIGlzIGEgbXVsdGlwbGllcjsgc2V0dGluZyBib29zdCA9IDEgbGVhdmVz
IHRoZSBzaWduYWwgdW5hZmZlY3RlZAp7Cglib29zdCA9IHRoaXNCb29zdDsKCXNldEZyZXFCb29z
dEFuZEJhbmRXaWR0aChmcmVxLCBib29zdCwgYmFuZHdpZHRoKTsKfQoKCnZvaWQgRXFCaVF1YWQg
Ojogc2V0QmFuZHdpZHRoKE1ZX0ZMT0FUIHRoaXNCYW5kd2lkdGgpCi8vc2V0cyB0aGUgYmFuZHdp
ZHRoIG9mIHRoZSBmaWx0ZXIsIGluIEh6CnsKCWJhbmR3aWR0aCA9IHRoaXNCYW5kd2lkdGg7Cglz
ZXRGcmVxQm9vc3RBbmRCYW5kV2lkdGgoZnJlcSwgYm9vc3QsIGJhbmR3aWR0aCk7Cn0KCgp2b2lk
IEVxQmlRdWFkIDo6IHNldFNSKE1ZX0ZMT0FUIHNyYXRlKQovL3NldHMgdGhlIHNhbXBsZSByYXRl
IGZvciB0aGUgZmlsdGVyCnsKCXRoaXNTUiA9IHNyYXRlOwoJc2V0RnJlcUJvb3N0QW5kQmFuZFdp
ZHRoKGZyZXEsIGJvb3N0LCBiYW5kd2lkdGgpOwp9Cgp2b2lkIEVxQmlRdWFkIDo6IGNsZWFyVmVj
dG9yQnVmZmVycygpCi8vY2xlYXJzIHRoZSB2ZWN0b3IgdXNlZCBpbiB0aWNrVmVjdG9yU3RlcmVv
KCkKewoJZm9yKGludCBpPTA7IGk8dGhpc1ZlY3RvclNpemU7IGkrKykgb3V0cHV0VmVjdG9yW2ld
ID0gMC47CgljbGVhcigpOwkJCn0KCgp2b2lkIEVxQmlRdWFkIDo6IHNldFZlY3RvclNpemUoaW50
IHZzaXplKQovL3NldHMgdGhlIHZlY3RvciBzaXplIGZvciB0aWNrVmVjdG9yU2l6ZSgpCnsKCXRo
aXNWZWN0b3JTaXplID0gdnNpemU7CglvdXRwdXRWZWN0b3IgPSAoTVlfRkxPQVQgKikgbWFsbG9j
KCh0aGlzVmVjdG9yU2l6ZSkgKiBNWV9GTE9BVF9TSVpFKTsKfQoKCnZvaWQgRXFCaVF1YWQgOjog
c2V0RnJlcUJvb3N0QW5kQmFuZFdpZHRoKE1ZX0ZMT0FUIHRoaXNGcmVxLCBNWV9GTE9BVCB0aGlz
Qm9vc3QsIE1ZX0ZMT0FUIHRoaXNCYW5kd2lkdGgpCi8vc2V0cyB0aGUgY29lZmZpY2llbnRzIG9m
IHRoZSBmaWx0ZXIgYmFzZWQgb24gdGhlIG1haW4gcGFyYW10ZXJzCnsKCU1ZX0ZMT0FUIGQsIGFf
Ym9vc3QsIGFfY3V0OyAKICAgICAgIAlNWV9GTE9BVCBWemVybyA9IGJvb3N0IC0gMS47CgoJZnJl
cSA9IHRoaXNGcmVxOwoJYm9vc3QgPSB0aGlzQm9vc3Q7CgliYW5kd2lkdGggPSB0aGlzQmFuZHdp
ZHRoOwoJTVlfRkxPQVQgdHJ1ZUJhbmR3aWR0aCA9IGJhbmR3aWR0aCAqIGZyZXE7CgogICAgICAg
IGFfYm9vc3QgPSAodGFuZih0cnVlQmFuZHdpZHRoKlRXT19QSS8oMi4wKnRoaXNTUikpIC0gMS4p
IC8gKHRhbmYodHJ1ZUJhbmR3aWR0aCpUV09fUEkvKDIuMCp0aGlzU1IpKSArIDEuKTsKICAgICAg
ICBhX2N1dCA9ICh0YW5mKHRydWVCYW5kd2lkdGgqVFdPX1BJLygyLjAqdGhpc1NSKSkgLSBib29z
dCkgLyAodGFuZih0cnVlQmFuZHdpZHRoKlRXT19QSS8oMi4wKnRoaXNTUikpICsgYm9vc3QpOwoK
ICAgICAgICBkID0gLWNvc2YoZnJlcSpUV09fUEkvdGhpc1NSKTsgCgovKiBjdXQgKi8KCWlmKGJv
b3N0IDw9IDEuMCkgewogICAgICAgIAlnYWluID0gIDEuMCArICgxLjAgKyBhX2N1dCkqVnplcm8v
Mi4wOwogICAgICAgIAl6ZXJvQ29lZmZzWzBdID0gZCooMSAtIGFfY3V0KTsKICAgICAgICAJemVy
b0NvZWZmc1sxXSA9ICgtYV9jdXQgLSAoMSArIGFfY3V0KSpWemVyby8yLjApOwoKICAgICAgICAJ
cG9sZUNvZWZmc1swXSA9IC1kKigxLjAgLSBhX2N1dCk7CiAgICAgICAgCXBvbGVDb2VmZnNbMV0g
PSBhX2N1dDsgCgl9IAoKLyogYm9vc3QgKi8gICAgIAoJaWYoYm9vc3QgPiAxLjApIHsKICAgICAg
ICAJZ2FpbiA9IDEuMCArICgxLjAgKyBhX2Jvb3N0KSpWemVyby8yLjA7CiAgICAgICAgCXplcm9D
b2VmZnNbMF0gPSBkKigxIC0gYV9ib29zdCk7CiAgICAgICAgCXplcm9Db2VmZnNbMV0gPSAoLWFf
Ym9vc3QgLSAoMSArIGFfYm9vc3QpKlZ6ZXJvLzIuMCk7CgogICAgICAgIAlwb2xlQ29lZmZzWzBd
ID0gLWQqKDEuMCAtIGFfYm9vc3QpOwogICAgICAgIAlwb2xlQ29lZmZzWzFdID0gYV9ib29zdDsg
Cgl9Cn0KCk1ZX0ZMT0FUIEVxQmlRdWFkIDo6IHJldHVybkZyZXFSZXNwb25zZShNWV9GTE9BVCB0
aGlzRnJlcSkKLy90aGlzIHJldHVybnMgdGhlIGZyZXF1ZW5jeSByZXNwb25zZSBvZiB0aGUgZmls
dGVyIGF0IHRoZQovL2dpdmVuIGNlbnRlciBmcmVxdWVuY3kuIFVzZWZ1bCBmb3IgZGlzcGxheSBw
dXJwb3Nlcwp7CiAgICBNWV9GTE9BVCBSZVRvcCwgIFJlQm90dG9tLCAgSW1Ub3AsICBJbUJvdHRv
bSwgIHcsICByZXNwb25zZTsKICAgIAogICAgaWYoYm9vc3QgPT0gMS4pIHJldHVybiAxLjsKICAg
IAogICAgdyA9IFRXT19QSSp0aGlzRnJlcS90aGlzU1I7CiAgICAKICAgIFJlVG9wID0gZ2Fpbipj
b3NmKDIuKncpICsgemVyb0NvZWZmc1swXSpjb3NmKHcpICsgemVyb0NvZWZmc1sxXTsKICAgIFJl
Qm90dG9tID0gY29zZigyLip3KSAtIHBvbGVDb2VmZnNbMF0qY29zZih3KSAtIHBvbGVDb2VmZnNb
MV07CiAgICBJbVRvcCA9IGdhaW4qc2luZigyLip3KSArIHplcm9Db2VmZnNbMF0qc2luZih3KTsK
ICAgIEltQm90dG9tID0gc2luZigyLip3KSAtIHBvbGVDb2VmZnNbMF0qc2luZih3KTsKCiAgICBy
ZXNwb25zZSA9IHBvdygocG93KFJlVG9wLCAgMi4pICsgcG93KEltVG9wLCAgMi4pKSAvIChwb3co
UmVCb3R0b20sICAyLikgKyBwb3coSW1Cb3R0b20sICAyLikpLCAgMC41KTsKICAgIHJldHVybiBy
ZXNwb25zZTsKICAgIAp9CgpNWV9GTE9BVCBFcUJpUXVhZCA6OiB0aWNrKE1ZX0ZMT0FUIHNhbXBs
ZSkgCi8vaGVyZSdzIHRoZSBiZWVmOiB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgc2FtcGxlIGFzIGlu
cHV0IGFuZCByZXR1cm5zCi8vYSBzYW1wbGUuICBUaGUgc2FtcGxlIHJhdGUgYW5kIGFsbCBvZiB0
aGUgY29lZmZpY2llbnRzIG11c3QgYmUgCi8vaW5pdGlhbGl6ZWQgKHdpdGggc2V0RnJlcUJvb3N0
QW5kQmFuZFdpZHRoKCkpIGJlZm9yZSBjYWxsaW5nIHRpY2soKQovL1RoaXMgd29ya3Mgb25seSB3
aXRoIG1vbm8gc2lnbmFsczsgdXNlIHR3byBmaWx0ZXJzIGFuZCBpbnRlcmxlYXZlIAovL3RoZW0g
Zm9yIHN0ZXJlbyBmaWxlcywgb3IgdXNlIHRpY2tWZWN0b3JTdGVyZW8oKS4KeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIE1ZX0ZMT0FUIHRlbXA7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAKCiAgICB0ZW1wID0gc2FtcGxlOyAgICAgICAgICAgICAgICAg
ICAgICAgCQogICAgdGVtcCArPSBpbnB1dHNbMF0gKiBwb2xlQ29lZmZzWzBdOyAgICAgICAgICAK
ICAgIHRlbXAgKz0gaW5wdXRzWzFdICogcG9sZUNvZWZmc1sxXTsgICAgICAgICAgCiAgICAKICAg
IG91dHB1dHNbMF0gPSBnYWluICogdGVtcDsgICAgICAgICAgICAgICAgICAgCiAgICBvdXRwdXRz
WzBdICs9IChpbnB1dHNbMF0gKiB6ZXJvQ29lZmZzWzBdKTsgIAogICAgb3V0cHV0c1swXSArPSAo
aW5wdXRzWzFdICogemVyb0NvZWZmc1sxXSk7IAogICAgaW5wdXRzWzFdID0gaW5wdXRzWzBdOyAg
ICAgICAgICAgICAgICAgICAgICAKICAgIGlucHV0c1swXSA9IHRlbXA7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCgogICAgcmV0dXJuIG91dHB1dHNbMF07Cn0KCgpNWV9GTE9BVCAqIEVxQmlR
dWFkIDo6IHRpY2tWZWN0b3JTdGVyZW8oTVlfRkxPQVQgKmluc2FtcGxlcykgCi8vdGhpcyBpcyBh
IHZlY3Rvcml6ZWQgdmVyc2lvbiBvZiB0aWNrIGZvciB1c2Ugd2l0aCBzdGVyZW8gZmlsZXMuCi8v
SXQgdGFrZXMgYSBidWZmZXIgb2YgaW50ZXJsZWF2ZWQgc2FtcGxlcyBhbmQgcmV0dXJucyBhIGJ1
ZmZlciBvZiAKLy9pbnRlcmxlYXZlZCBzYW1wbGVzLgovL1RoZSB2ZWN0b3Igc2l6ZSBtdXN0IGJl
IHNldCAod2l0aCBzZXRWZWN0b3JTaXplKSBiZWZvcmUgdXNpbmcuCnsgICAKICAgIE1ZX0ZMT0FU
IHRlbXA7CiAgICAKICAgIGZvcihpbnQgaT0wOyBpPHRoaXNWZWN0b3JTaXplOyBpKyspIHsKCXRl
bXAgPSBpbnNhbXBsZXNbaV07CglpZihib29zdCAhPSAxLikgeyAgICAgICAgICAgICAgICAgICAg
ICAgCQoJCXRlbXAgKz0gaW5wdXRzWzBdICogcG9sZUNvZWZmc1swXTsJCQoJCXRlbXAgKz0gaW5w
dXRzWzFdICogcG9sZUNvZWZmc1sxXTsgICAgICAgICAKICAgIAoJCW91dHB1dFZlY3RvcltpXSA9
IGdhaW4gKiB0ZW1wOyAgICAgICAgICAgICAgICAgIAoJCW91dHB1dFZlY3RvcltpXSArPSAoaW5w
dXRzWzBdICogemVyb0NvZWZmc1swXSk7ICAKCQlvdXRwdXRWZWN0b3JbaV0gKz0gKGlucHV0c1sx
XSAqIHplcm9Db2VmZnNbMV0pOyAKCX0KIAllbHNlIHsKCQlvdXRwdXRWZWN0b3JbaV0gPSB0ZW1w
OwoJfQoJaW5wdXRzWzFdID0gaW5wdXRzWzBdOyAgICAgICAgICAgICAgICAgICAgICAKCWlucHV0
c1swXSA9IHRlbXA7CgoJCiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgcmV0dXJuIG91dHB1dFZlY3RvcjsgICAgICAgICAgICAgICAgICAgICAgICAg
Cn0KCgpuc2FtcGxlc1tpXTsKCWlmKGJvb3N0ICE9IDEuKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAJCgkJdGVtcCArPSBpbnB1dHNbMF0gKiBwb2xlQ29lZmZzWzBdOwkJCgkJdGVtcCArPSBpbnB1
dHNbMV0gKiBwb2xlQ29lZmZzWzFdOyAgICAgICAgIAogICAgCgkJb3V0cHV0VmVjdG9yW2ldID0g
Z2FpbiAqIHRlbXA7ICAgICAgICAgICAgICAgICAgCgkJb3V0cHV0VmVjdG9yW2ldICs9IChpbnB1
dHNbMF0gKiB6ZXJvQ29lZmZzWzBdKTsgIAoJCW91dHB1dFZlY3RvcltpXSArPSAoaW5wdXRzWzFd
ICogemVyb0NvZWZmc1sxXSk7IAoJfQogCWVsc2UgewoJCW91dHB1dFZlY3RvcltpXSA9IHRlbXA7
Cgl9CglpbnB1dHNbMV0gPSBpbnB1dHNbMF07ICAgICAgICAgICAgICAgICAgICAgIAoJaW5wdXRz
WzBdID0gdGVtcDsKCgkKICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICByZXR1cm4gb3V0cHV0VmVjdG9yOyAgIGZvclNoeWFtL0VxQmlRdWFkLmgAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDM1MCAAMDAwMDI0IAAwMDAwMDAwMzE0NiAw
NjQwMTE3MzYwMCAwMTQyMjEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAdXN0YXIAMDBkYW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzZXIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwovKiAgVGhpcyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBQZXJy
eSBDb29rJ3MgICovCi8qICBCaVF1YWQgZmlsdGVyIHRoYXQgZGVjb3VwbGVzIGdhaW4gZnJvbSAg
Ki8gCi8qICBmcmVxdWVuY3kgYW5kIGJhbmR3aWR0aCBzcGVjaWZpY2F0aW9ucyAgKi8KLyogIGFj
Y29yZGluZyB0byB0aGUgYWxnb3JpdGhtIGZyb20gWm9semVyICAqLwovKiAgQm9sdHplICJQYXJh
bWV0cmljIERpZ2l0YWwgRmlsdGVyICAgICAgICovCi8qICBTdHJ1Y3R1cmVzIiBwYXBlci4gIERh
biBUcnVlbWFuLCAyLzk2LiAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwoKI2lmICFkZWZpbmVkKF9fRXFCaVF1YWRfaCkKI2RlZmluZSBfX0VxQmlRdWFk
X2gKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJp
bmcuaD4KI2luY2x1ZGUgPG1hdGguaD4KCiNkZWZpbmUgVFdPX1BJIDYuMjgzMTg1MzA3MTgKI2Rl
ZmluZSBPTkVfT1ZFUl9UV09fUEkgMC4xNTkxNTQ5NDMwOQoKI2RlZmluZSBNWV9GTE9BVCAgICAg
IGZsb2F0IAojZGVmaW5lIE1ZX0ZMT0FUX1NJWkUgNCAgICAgIAoKLyogI2RlZmluZSBNWV9GTE9B
VCAgICAgIGRvdWJsZSAqLwovKiAjZGVmaW5lIE1ZX0ZMT0FUX1NJWkUgOCAqLwoKY2xhc3MgRXFC
aVF1YWQKewogIHByb3RlY3RlZDogIAogICAgTVlfRkxPQVQgZ2FpbjsKICAgIE1ZX0ZMT0FUICpv
dXRwdXRzOwogICAgTVlfRkxPQVQgKmlucHV0czsKICAgIE1ZX0ZMT0FUIHBvbGVDb2VmZnNbMl07
CiAgICBNWV9GTE9BVCB6ZXJvQ29lZmZzWzJdOwogICAgTVlfRkxPQVQgKmlucHV0c0wsICAqaW5w
dXRzUjsgLy9mb3Igc3RlcmVvIHZlY3RvcgogICAgTVlfRkxPQVQgZnJlcSwgYm9vc3QsIGJhbmR3
aWR0aDsKICAgIE1ZX0ZMT0FUIHRoaXNTUjsKICAgIGludCB0aGlzVmVjdG9yU2l6ZTsKICAgIE1Z
X0ZMT0FUICpvdXRwdXRWZWN0b3I7IAogIHB1YmxpYzoKICAgIEVxQmlRdWFkKCk7CiAgICB+RXFC
aVF1YWQoKTsKICAgIHZvaWQgY2xlYXIoKTsKICAgIHZvaWQgY2xlYXJWZWN0b3JCdWZmZXJzKCk7
CiAgICB2b2lkIHNldEZyZXFCb29zdEFuZEJhbmRXaWR0aChNWV9GTE9BVCB0aGlzRnJlcSwgTVlf
RkxPQVQgdGhpc0Jvb3N0LCBNWV9GTE9BVCB0aGlzQmFuZHdpZHRoKTsKICAgIHZvaWQgc2V0RnJl
cShNWV9GTE9BVCB0aGlzRnJlcSk7CiAgICB2b2lkIHNldEJvb3N0KE1ZX0ZMT0FUIHRoaXNCb29z
dCk7CiAgICB2b2lkIHNldEJhbmR3aWR0aChNWV9GTE9BVCB0aGlzQmFuZHdpZHRoKTsKICAgIHZv
aWQgc2V0U1IoTVlfRkxPQVQgc3JhdGUpOwogICAgdm9pZCBzZXRWZWN0b3JTaXplKGludCB2c2l6
ZSk7CiAgICBNWV9GTE9BVCByZXR1cm5GcmVxKCk7CiAgICBNWV9GTE9BVCByZXR1cm5CYW5kd2lk
dGgoKTsKICAgIE1ZX0ZMT0FUIHJldHVybkJvb3N0KCk7CiAgICBNWV9GTE9BVCByZXR1cm5GcmVx
UmVzcG9uc2UoTVlfRkxPQVQgdGhpc0ZyZXEpOwogICAgTVlfRkxPQVQgdGljayhNWV9GTE9BVCBz
YW1wbGUpOwogICAgTVlfRkxPQVQgKiB0aWNrVmVjdG9yU3RlcmVvKE1ZX0ZMT0FUICppbnNhbXBs
ZXMpOyAgCn07CgojZW5kaWYKb3N0QW5kQmFuZFdpZHRoKE1ZX0ZMT0FUIHRoaXNGcmVxLCBNWV9G
TE9BVCB0aGlzQm9vc3QsIE1ZX0ZMT0FUIHRoaXNCYW5kd2lkdGgpOwogICAgdm9pZCBzZXRGcmVx
KE1ZX0ZMT0FUIHRoaXNGcmVxKTsKICAgIHZvaWQgc2V0Qm9vc3QoTVlfRkxPQVQgdGhpc0Jvb3N0
KTsKICAgIHZvaWQgc2V0QmFuZHdpZHRoKE1ZX0ZMT0FUIHRoaXNCYW5kd2lkdGgpOwogICAgdm9p
ZCBzZXRTUihNWV9GTE9BVCBzcmF0ZSk7CiAgICB2b2lkIHNldFZlY3RvclNpemUoaW50IHZzaXpl
KTsKICAgIE1ZX0ZMT0FUIHJldHVybkZyZXEoKTsKICAgIE1ZX0ZMT0FUIHJldHVybkJhbmR3aWR0
aCgpOwogICAgTVlfRkxPQVQgcmV0dXJuQm9vc3QoKTsKICAgIE1ZX0ZMT0FUIHJldHVybkZyZXFS
ZXNwb25zZShNWV9GTE9BVCB0aGlzRnJlcSk7CiBmb3JTaHlhbS9SZWdhbGlhQmFuZDIuZWluAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDAzNTAgADAwMDAyNCAAMDAwMDAwMDI2MTEgMDY0MDEx
NzM2MDAgMDE1MzIxACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHVzdGFyADAwZGFuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c2VyAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qIGZvciBiYW5kcGF0aCBhbmQgcGVhayBmaWx0
ZXJpbmcgKi8KLyogYWxscGFzcyBmaWx0ZXJzIGRlY291cGxlcyBnYWluIGZyb20gZnJlcXVlbmN5
IGFuZCBiYW5kd2lkdGggcmVzcG9uc2UgKi8KCmRvdWJsZSBwb2xlQ29lZmZzWzJdLHplcm9Db2Vm
ZnNbMl0sYmFuZHdpZHRoLHJhZEJhbmR3aWR0aCxmcmVxLCByYWRGcmVxLCBnYWluLCBjdXQsIGQs
IGFfYm9vc3QsIGFfY3V0LCBnLCBvbWVnYSwgaW5mcmVxOwpkb3VibGUgbGluZTsKaWYoIXQpIHsK
ICAgICAgIAlmcmVxID0gMzE1MC4wOwoJcmFkRnJlcSA9IHR3b19QSSAqIGZyZXE7CiAgICAgIAli
YW5kd2lkdGggPSAwLjAxKmZyZXE7CiAgICAgIAlyYWRCYW5kd2lkdGggPSB0d29fUEkgKiBiYW5k
d2lkdGg7CgogICAgICAgCWdhaW4gPSA1MDA7IC8qIDwgMSA9IGN1dCwgPiAxID0gZ2FpbiAqLwog
ICAgIAljdXQgPSBnYWluIC0gMS4wOwoKICAgICAgIAlhX2Jvb3N0ID0gKHRhbihyYWRCYW5kd2lk
dGgvKDIuMCpzcikpIC0gMS4pIC8gKHRhbihyYWRCYW5kd2lkdGgvKDIuMCpzcikpICsgMS4wKTsK
CWFfY3V0ID0gKHRhbihyYWRCYW5kd2lkdGgvKDIuMCpzcikpIC0gZ2FpbikgLyAodGFuKHJhZEJh
bmR3aWR0aC8oMi4wKnNyKSkgKyBnYWluKTsKCiAgICAgIAlkID0gLWNvcyhyYWRGcmVxLyhzcikp
OyAKCi8qY3V0ICAKCWcgPSAgMS4wICsgKDEuMCArIGFfY3V0KSpjdXQvMi4wOwogICAgICAgCXpl
cm9Db2VmZnNbMF0gPSBkKigxIC0gYV9jdXQpOwogICAgICAgCXplcm9Db2VmZnNbMV0gPSAoLWFf
Y3V0IC0gKDEgKyBhX2N1dCkqY3V0LzIuMCk7CgogICAgICAgCXBvbGVDb2VmZnNbMF0gPSAtZCoo
MS4wIC0gYV9jdXQpOwogICAgICAJcG9sZUNvZWZmc1sxXSA9IGFfY3V0OyAgICAgICAKKi8gCi8q
IGdhaW4gKi8KCWcgPSAxLjAgKyAoMS4wICsgYV9ib29zdCkqY3V0LzIuMDsKICAgICAgIAl6ZXJv
Q29lZmZzWzBdID0gZCooMSAtIGFfYm9vc3QpOwogICAgICAJemVyb0NvZWZmc1sxXSA9ICgtYV9i
b29zdCAtICgxICsgYV9ib29zdCkqY3V0LzIuMCk7CgogICAgICAgCXBvbGVDb2VmZnNbMF0gPSAt
ZCooMS4wIC0gYV9ib29zdCk7CiAgICAgICAJcG9sZUNvZWZmc1sxXSA9IGFfYm9vc3Q7ICAgICAg
IAovKiovIAoKfQoKeSA9ICBycmFuZCgpOwpsaW5lID0gKGRvdWJsZSl0L25zYW1wczsKLyp5ID0g
c2luKGxpbmUgKiBzci80LiAqIHR3b19QSSAqIHQvbnNhbXBzKTsqLwp5ID0gIHkgKyBTMSAqIHBv
bGVDb2VmZnNbMF0gKyBTMiAqIHBvbGVDb2VmZnNbMV07CnRhcCAxIDEKdGFwIDIgMgp0YXAgMyAx
CnRhcCA0IDIKeSA9IGcqeSArIFMzICogemVyb0NvZWZmc1swXSArIFM0ICogemVyb0NvZWZmc1sx
XTsKCi8qaWYoISh0JTEwMDApKSBwcmludGYoIiVmICAlZiAlZiBcbiIseSxwb2xlQ29lZmZzWzBd
LHBvbGVDb2VmZnNbMV0pOyovCgoxLjAgKyBhX2Jvb3N0KSpjdXQvMi4wOwogICAgICAgCXplcm9D
b2VmZnNbMF0gPSBkKigxIC0gYV9ib29zdCk7CiAgICAgIAl6ZXJvQ29lZmZzWzFdID0gKC1hX2Jv
b3N0IC0gKDEgKyBhX2Jvb3N0KSpjdXQvMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAA=

--Apple-Mail-3--222201169
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=ISO-8859-1

<HTML><BODY style=3D"word-wrap: break-word; -khtml-nbsp-mode: space; =
-khtml-line-break: after-white-space; "><DIV></DIV><DIV><BR><DIV><DIV>On =
Nov 13, 2007, at 1:42 PM, Ernest Burghardt wrote:</DIV><BR =
class=3D"Apple-interchange-newline"><BLOCKQUOTE type=3D"cite">Thanks =
Perry, I'll take a look at that.<BR><BR><DIV class=3D"gmail_quote">On =
Nov 13, 2007 10:38 AM, Perry R Cook &lt;<A =
href=3D"mailto:prc@cs.princeton.edu">prc@cs.princeton.edu</A>&gt; =
wrote:<BR><BLOCKQUOTE class=3D"gmail_quote" style=3D"border-left: 1px =
solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: =
1ex;"> Hi Ernest,<BR><BR>Dan Trueman implemented what he called =
a<BR>ParaGraphic Equalizer for the SGI computers<BR>using STK back in =
the late 1990's. =A0I think<BR>there's code for it on the Princeton =
Sound<BR>Kitchen. =A0THis might be helpful. <BR><FONT =
color=3D"#888888"><BR>PRC<BR></FONT><DIV><DIV></DIV><DIV =
class=3D"Wj3C7c"><BR>On Mon, 12 Nov 2007, Ernest Burghardt =
wrote:<BR><BR>&gt; Hi All,<BR>&gt;<BR>&gt; I am looking to create a =
5-band graphic equalizer to compliment a USB audio <BR>&gt; device for =
Win/OSX and I was referred to STK for a solid technology to<BR>&gt; =
implement the EQ portion using a Bi-Quad filter.<BR>&gt; Would anyone be =
able to point me towards the best starting point for this?<BR> &gt; =
Would this be a good approach, are there any examples that would be good =
to<BR>&gt; look at?<BR>&gt;<BR>&gt; I looked at the BiQuad API and was =
not sure if it was better to set the<BR>&gt; Coefficients or so just set =
the resonance freq...? <BR>&gt;<BR>&gt;<BR>&gt; Thanks in =
advance,<BR>&gt;<BR>&gt; =
Ernie<BR>&gt;<BR></DIV></DIV></BLOCKQUOTE></DIV><BR></BLOCKQUOTE></DIV><BR=
></DIV></BODY></HTML>=

--Apple-Mail-3--222201169--

--Apple-Mail-2--222201169--