How to achieve "accent-insensitive" searching

How to achieve "accent-insensitive" searching

am 17.03.2005 12:20:33 von Steve Hay

WW91J2QgaGVhcmQgb2YgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2hpbmcuICBX aGF0IGFib3V0IAoi
YWNjZW50LWluc2Vuc2l0aXZlIiBzZWFyY2hpbmc/CgpJIHdhbnQgdG8gc3Rv cmUgdGV4dCBjb250
YWluaW5nIGFjY2VudGVkIGNoYXJhY3RlcnMgaW4gdGhlIGRhdGFiYXNlIChp biAKdGFibGVzIHdp
dGggVVRGLTggY2hhcnNldCksIGJ1dCBhbGxvdyB1c2VycyB0byBzZWFyY2gg KHZpYSBhIHBlcmwt
YmFja2VkIAp3ZWIgZnJvbnQtZW5kKSB1c2luZyBib3RoIHRoZSBhY2NlbnRl ZCBjaGFyYWN0ZXJz
IGFuZCB0aGVpciAKY29ycmVzcG9uZGluZyB1bmFjY2VudGVkIGNoYXJhY3Rl cnMgd2hlcmUgdGhl
cmUgYXJlIG9idmlvdXMgY29ycmVzcG9uZGVuY2VzLgoKRm9yIGV4YW1wbGUs IEkgd2FudCB0byBi
ZSBhYmxlIHRvIHN0b3JlICJKb3PpIiwgYnV0IGFsbG93IHVzZXJzIHRvIGZp bmQgCnRoYXQgYnkg
c2VhcmNoaW5nIGZvciBlaXRoZXIgIkpvc+kiIG9yICJKb3NlIi4KCkF0IHRo ZSBtb21lbnQsIGFs
bCBJIGNhbiBjb21lIHVwIHdpdGggaXMgc3RvcmluZyB0d28gY29sdW1ucyBp biB0aGUgCnRhYmxl
IC0tIG9uZSBob2xkaW5nIHRoZSBhY2NlbnRlZCBjaGFyY2F0ZXJzLCBhbmQg b25lIGhvbGRpbmcg
dGhlIApjb3JyZXNwb25kaW5nIEFTQ0lJIGVxdWl2YWxlbnQgd2hlcmUgcG9z c2libGUuICBTbyB3
aGVuIHNvbWVib2R5IGVudGVycyAKIkpvc+kiIGludG8gdGhlIGRhdGFiYXNl LCAiSm9z6SIgZ2V0
cyBzdG9yZWQgaW4gYSAibmFtZSIgY29sdW1uIGFuZCAKIkpvc2UiIGdldHMg c3RvcmVkIGluIGEg
ImFzY2lpbmFtZSIgY29sdW1uLiAgVGhlbiwgd2hlbiB1c2VycyBkbyBhIApz ZWFyY2gsIHRoZWly
IHNlYXJjaCBjcml0ZXJpYSBpcyBBU0NJSS1pemVkIGJ5IHRoZSBzYW1lIHJv dXRpbmUgdGhhdCAK
cHJvZHVjZWQgdGhlIGRhdGEgdG8gaW5zZXJ0IGludG8gdGhlICJhc2NpaW5h bWUiIGNvbHVtbiBh
bmQgdGhlbiBhIFNRTCAKcXVlcnkgYWxvbmcgdGhlIGxpbmVzIG9mICAiU0VM RUNUIC4uLiBGUk9N
IG5hbWUsIC4uLiBXSEVSRSBhc2NpaW5hbWUgCkxJS0UgPGFzY2lpLWl6ZWQg c2VhcmNoIGNyaXRl
cmlhPiIgY2FuIGJlIHBlcmZvcm1lZC4KCklzIHRoZXJlIGFueSBiZXR0ZXIg d2F5IHRvIGFjaGll
dmUgdGhpcz8gIEluIHBhcnRpY3VsYXIsIGRvZXMgdGhlIApkYXRhYmFzZSBo YXZlIHRoZSBtZWFu
cyB0byBkbyB0aGlzIGtpbmQgb2YgdGhpbmcgaXRzZWxmLCByYXRoZXIgdGhh biAKaGF2aW5nIHRv
IGRvIGl0IGluIHRoZSBwZXJsIGNvZGU/CgotIFN0ZXZlCgoKLS0tLS0tLS0t LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClJhZGFuIENvbXB1dGF0aW9u YWwgTHRkLgoKVGhl
IGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIG1lc3NhZ2UgYW5kIGFu eSBmaWxlcyB0cmFu
c21pdHRlZCB3aXRoIGl0IGFyZSBjb25maWRlbnRpYWwgYW5kIGludGVuZGVk IGZvciB0aGUgYWRk
cmVzc2VlKHMpIG9ubHkuICBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIG1l c3NhZ2UgaW4gZXJy
b3Igb3IgdGhlcmUgYXJlIGFueSBwcm9ibGVtcywgcGxlYXNlIG5vdGlmeSB0 aGUgc2VuZGVyIGlt
bWVkaWF0ZWx5LiAgVGhlIHVuYXV0aG9yaXplZCB1c2UsIGRpc2Nsb3N1cmUs IGNvcHlpbmcgb3Ig
YWx0ZXJhdGlvbiBvZiB0aGlzIG1lc3NhZ2UgaXMgc3RyaWN0bHkgZm9yYmlk ZGVuLiAgTm90ZSB0
aGF0IGFueSB2aWV3cyBvciBvcGluaW9ucyBwcmVzZW50ZWQgaW4gdGhpcyBl bWFpbCBhcmUgc29s
ZWx5IHRob3NlIG9mIHRoZSBhdXRob3IgYW5kIGRvIG5vdCBuZWNlc3Nhcmls eSByZXByZXNlbnQg
dGhvc2Ugb2YgUmFkYW4gQ29tcHV0YXRpb25hbCBMdGQuICBUaGUgcmVjaXBp ZW50KHMpIG9mIHRo
aXMgbWVzc2FnZSBzaG91bGQgY2hlY2sgaXQgYW5kIGFueSBhdHRhY2hlZCBm aWxlcyBmb3Igdmly
dXNlczogUmFkYW4gQ29tcHV0YXRpb25hbCB3aWxsIGFjY2VwdCBubyBsaWFi aWxpdHkgZm9yIGFu
eSBkYW1hZ2UgY2F1c2VkIGJ5IGFueSB2aXJ1cyB0cmFuc21pdHRlZCBieSB0 aGlzIGVtYWlsLgo=

Re: How to achieve "accent-insensitive" searching

am 17.03.2005 12:39:34 von Christoffer Vig

Have you tried the soundex function?

|SOUNDEX(/|str|/)|

Returns a soundex string from /|str|/. Two strings that sound almost the
same should have identical soundex strings. A standard soundex string is
four characters long, but the |SOUNDEX()| function returns an
arbitrarily long string. You can use |SUBSTRING()| on the result to get
a standard soundex string. All non-alphabetic characters are ignored in
the given string. All international alphabetic characters outside the
A-Z range are treated as vowels.

http://dev.mysql.com/doc/mysql/en/string-functions.html

Christoffer






--
MySQL Perl Mailing List
For list archives: http://lists.mysql.com/perl
To unsubscribe: http://lists.mysql.com/perl?unsub=gcdmp-msql-mysql-modules@m .gmane.org

Re: How to achieve "accent-insensitive" searching

am 17.03.2005 18:36:59 von Steve Hay

Q2hyaXN0b2ZmZXIgVmlnIHdyb3RlOgoKPkhhdmUgeW91IHRyaWVkIHRoZSBz b3VuZGV4IGZ1bmN0
aW9uPwo+Cj58U09VTkRFWCgvfHN0cnwvKXwKPgpEb2Vzbid0IHNlZW0gdG8g aGVscDoKCkM6XFRl
bXA+bXlzcWwgLXUgcm9vdCAtTnNlICJTRUxFQ1QgU09VTkRFWCgnZScpIgpF MDAwCgpDOlxUZW1w
Pm15c3FsIC11IHJvb3QgLU5zZSAiU0VMRUNUIFNPVU5ERVgoJ+knKSIK6TAw MAoKSSBub3cgaGF2
ZSBleGFjdGx5IHRoZSBzYW1lIHByb2JsZW0gY29tcGFyaW5nICdFMDAwJyB3 aXRoICfpMDAwJy4K
CkhhdmluZyBsb29rZWQgaW50byB0aGlzIGEgbGl0dGxlIG1vcmUgbXlzZWxm LCBJIGJlbGlldmUg
dGhhdCB3aGV0aGVyIG9yIApub3QgJ2UnIGlzIGNvbnNpZGVyZWQgbGlrZSAn 6ScgaXMgYWN0dWFs
bHkgZG93biB0byB0aGUgY29sbGF0aW9uIGJlaW5nIAp1c2VkLiAgVGhlIGRl ZmF1bHQgY2hhcmFj
dGVyIHNldCBpcyBsYXRpbjEsIGZvciB3aGljaCB0aGUgZGVmYXVsdCAKY29s bGF0aW9uIGlzIGxh
dGluMV9zd2VkaXNoX2NpICghKSwgaW4gd2hpY2ggJ2UnIGFuZCAn6ScgYXJl IGFjdHVhbGx5IApj
b25zaWRlcmVkIGFsaWtlOgoKQzpcVGVtcD5teXNxbCAtdSByb290IC1Oc2Ug IlNFTEVDVCAnZScg
Q09MTEFURSBsYXRpbjFfc3dlZGlzaF9jaSBMSUtFIAon6ScgQ09MTEFURSBs YXRpbjFfc3dlZGlz
aF9jaSIKMQoKSWYgeW91IGNoYW5nZSB0byBsYXRpbjFfZ2VuZXJhbF9jaSB0 aGVuIHRoZXkgYXJl
IG5vIGxvbmdlciBjb25zaWRlcmVkIGFsaWtlOgoKQzpcVGVtcD5teXNxbCAt dSByb290IC1Oc2Ug
IlNFTEVDVCAnZScgQ09MTEFURSBsYXRpbjFfZ2VuZXJhbF9jaSBMSUtFIAon 6ScgQ09MTEFURSBs
YXRpbjFfZ2VuZXJhbF9jaSIKMAoKSSdtIHdvcmtpbmcgd2l0aCB0aGUgdXRm OCBjaGFyYWN0ZXIg
c2V0LCBmb3Igd2hpY2ggdGhlIGRlZmF1bHQgY29sbGF0aW9uIAppcyB1dGY4 X2dlbmVyYWxfY2ks
IGFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzIGNvbGxhdGlvbiBjb25zaWRl cnMgJ2UnIAphbmQg
J+knIHRvIGJlIGFsaWtlIGFueXdheSAobm90IHRoYXQg6SBpcyDDqSBpbiBV VEYtOCk6CgpDOlxU
ZW1wPm15c3FsIC11IHJvb3QgLU5zZSAiU0VMRUNUIF91dGY4J2UnIENPTExB VEUgdXRmOF9nZW5l
cmFsX2NpIExJS0UgCl91dGY4J8OpJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9j aSIKMQoKSG93ZXZl
ciwgdGhlcmUgaXMgb25lIG1vcmUgdGhpbmcgdGhhdCBJIHN0aWxsIGNhbid0 IGRvOiAgSSB3YW50
IHRvIGJlIAphYmxlIHRvIGNvbnRyb2wgY2FzZS1zZW5zaXRpdml0eSwgd2hp bHN0IHJldGFpbmlu
ZyAKImFjY2VudC1pbnNlbnNpdGl2aXR5Ii4gIEFzIHRoZSBuYW1lIHN1Z2dl c3RzLCB1dGY4X2dl
bmVyYWxfY2kgaXMgCmNhc2UtaW5zZW5zaXRpdmUuICBDYXNlLXNlbnNpdGl2 aXR5IGNhbiBiZSBl
bmFibGVkIGJ5IHRoZSB1c2Ugb2YgdGhlIApCSU5BUlkgY2FzdCBvcGVyYXRv cjoKCkM6XFRlbXA+
bXlzcWwgLXUgcm9vdCAtTnNlICJTRUxFQ1QgX3V0ZjgnZScgQ09MTEFURSB1 dGY4X2dlbmVyYWxf
Y2kgTElLRSAKX3V0ZjgnRScgQ09MTEFURSB1dGY4X2dlbmVyYWxfY2kiCjEK CkM6XFRlbXA+bXlz
cWwgLXUgcm9vdCAtTnNlICJTRUxFQ1QgQklOQVJZIF91dGY4J2UnIENPTExB VEUgCnV0ZjhfZ2Vu
ZXJhbF9jaSBMSUtFIEJJTkFSWSBfdXRmOCdFJyBDT0xMQVRFIHV0ZjhfZ2Vu ZXJhbF9jaSIKMAoK
SG93ZXZlciwgdGhlIEJJTkFSWSBjYXN0IG9wZXJhdG9yIGFsc28gZGlzYWJs ZXMgdGhlICJhY2Nl
bnQtaW5zZW5zaXRpdml0eSI6CgpDOlxUZW1wPm15c3FsIC11IHJvb3QgLU5z ZSAiU0VMRUNUIEJJ
TkFSWSBfdXRmOCdlJyBDT0xMQVRFIAp1dGY4X2dlbmVyYWxfY2kgTElLRSBC SU5BUlkgX3V0Zjgn
w6knIENPTExBVEUgdXRmOF9nZW5lcmFsX2NpIgowCgpJcyB0aGVyZSBhbnkg d2F5IHRoYXQgSSBj
YW4gZG8gY29tcGFyaXNvbnMgd2l0aG91dCByZWdhcmQgdG8gYWNjZW50cyBi dXQgCndpdGggcmVn
YXJkIHRvIGNhc2UsIHNvIHRoYXQgJ2UnIGlzIGNvbnNpZGVyZWQgbGlrZSAn 6ScsIGJ1dCBub3Qg
bGlrZSAKJ0UnIG9yICfJJz8KCkkgaGFkIGEgbG9vayBhdCB0aGUgb3RoZXIg dXRmOCBjb2xsYXRp
b25zIGF2YWlsYWJsZSAoc2hvdyBjb2xsYXRpb24gbGlrZSAKJ3V0ZjglJyks IGJ1dCBjb3VsZG4n
dCBzZWUgYW55dGhpbmcgdGhhdCB3b3VsZCBkbyB0aGlzLgoKLSBTdGV2ZQoK Ci0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpSYWRhbiBD b21wdXRhdGlvbmFs
IEx0ZC4KClRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNz YWdlIGFuZCBhbnkg
ZmlsZXMgdHJhbnNtaXR0ZWQgd2l0aCBpdCBhcmUgY29uZmlkZW50aWFsIGFu ZCBpbnRlbmRlZCBm
b3IgdGhlIGFkZHJlc3NlZShzKSBvbmx5LiAgSWYgeW91IGhhdmUgcmVjZWl2 ZWQgdGhpcyBtZXNz
YWdlIGluIGVycm9yIG9yIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMsIHBsZWFz ZSBub3RpZnkgdGhl
IHNlbmRlciBpbW1lZGlhdGVseS4gIFRoZSB1bmF1dGhvcml6ZWQgdXNlLCBk aXNjbG9zdXJlLCBj
b3B5aW5nIG9yIGFsdGVyYXRpb24gb2YgdGhpcyBtZXNzYWdlIGlzIHN0cmlj dGx5IGZvcmJpZGRl
bi4gIE5vdGUgdGhhdCBhbnkgdmlld3Mgb3Igb3BpbmlvbnMgcHJlc2VudGVk IGluIHRoaXMgZW1h
aWwgYXJlIHNvbGVseSB0aG9zZSBvZiB0aGUgYXV0aG9yIGFuZCBkbyBub3Qg bmVjZXNzYXJpbHkg
cmVwcmVzZW50IHRob3NlIG9mIFJhZGFuIENvbXB1dGF0aW9uYWwgTHRkLiAg VGhlIHJlY2lwaWVu
dChzKSBvZiB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGNoZWNrIGl0IGFuZCBhbnkg YXR0YWNoZWQgZmls
ZXMgZm9yIHZpcnVzZXM6IFJhZGFuIENvbXB1dGF0aW9uYWwgd2lsbCBhY2Nl cHQgbm8gbGlhYmls
aXR5IGZvciBhbnkgZGFtYWdlIGNhdXNlZCBieSBhbnkgdmlydXMgdHJhbnNt aXR0ZWQgYnkgdGhp
cyBlbWFpbC4K

Re: How to achieve "accent-insensitive" searching

am 18.03.2005 14:13:02 von Richard Davis

Steve Hay wrote:
> You'd heard of case-insensitive searching. What about
> "accent-insensitive" searching?


Hi Steve

No answers from here, I'm afraid, but it's an area that interests me, so
I'd love to hear how you do sort this out. Others must have solved this:
Google, for example, gives me similar (but not the same!?) results if I
search for "città" or "citta".

Since you're working with a web front end, I wonder if there's any
mileage in adapting the PHP approach below, that manipulates HTML
entities to zap accents. I know it doesn't get to the heart of your
problem on the database/SQL side, but it's intriguing nonetheless.



In order to get rid of accents, we don't need to reach as far out as the
ascii tables. HTML has the lovely property that accents are added to the
character X in the form &Xmodif; where modif stands for the modification
of the original character: acute, grave, uml, etc.
There are far fewer accents than accented letters so this should do the
trick whether or not it is intended for HTML or not:

function replace_accents($in_string)
{
$out_string = htmlentities($in_string);

$out_string = str_replace("uml;", "", $out_string);
$out_string = str_replace("acute;", "", $out_string);
$out_string = str_replace("grave;", "", $out_string);
$out_string = str_replace("cedil;", "", $out_string);
$out_string = str_replace("ring;", "", $out_string);
$out_string = str_replace("circ;", "", $out_string);
$out_string = str_replace("tilde;", "", $out_string);
$out_string = str_replace("lig;", "", $out_string);
$out_string = str_replace("slash;", "", $out_string);

$out_string = str_replace("&", "", $out_string);
return $out_string;
}

The function above assumes there are only letter in the input (no
ampersand, < and >, quotes, etc).

[ from: http://php.selwerd.nl/manual/fr/function.str-replace.php ]




Regards

Richard

P.S. I was also fascinated by this interesting article on related
problems of alphabetization: http://www.rostra.dk/alphabet/alpha_en.htm


--
/
\ Richard M Davis
/ Digital Archives Specialist
\ University of London Computer Centre
/ Tel: +44 (0) 20 7692 1350
\ mailto: r.davis@ulcc.ac.uk
/

--
MySQL Perl Mailing List
For list archives: http://lists.mysql.com/perl
To unsubscribe: http://lists.mysql.com/perl?unsub=gcdmp-msql-mysql-modules@m .gmane.org

Re: How to achieve "accent-insensitive" searching

am 18.03.2005 14:39:20 von Steve Hay

UmljaGFyZCBEYXZpcyB3cm90ZToKCj5TdGV2ZSBIYXkgd3JvdGU6Cj4gIAo+ Cj4+WW91J2QgaGVh
cmQgb2YgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2hpbmcuICBXaGF0IGFib3V0 IAo+PiJhY2NlbnQt
aW5zZW5zaXRpdmUiIHNlYXJjaGluZz8KPj4gICAgCj4+Cj4KPgo+SGkgU3Rl dmUKPgo+Tm8gYW5z
d2VycyBmcm9tIGhlcmUsIEknbSBhZnJhaWQsIGJ1dCBpdCdzIGFuIGFyZWEg dGhhdCBpbnRlcmVz
dHMgbWUsIHNvCj5JJ2QgbG92ZSB0byBoZWFyIGhvdyB5b3UgZG8gc29ydCB0 aGlzIG91dC4gT3Ro
ZXJzIG11c3QgaGF2ZSBzb2x2ZWQgdGhpczoKPkdvb2dsZSwgZm9yIGV4YW1w bGUsIGdpdmVzIG1l
IHNpbWlsYXIgKGJ1dCBub3QgdGhlIHNhbWUhPykgcmVzdWx0cyBpZiBJCj5z ZWFyY2ggZm9yICJj
aXR04CIgb3IgImNpdHRhIi4KPgo+U2luY2UgeW91J3JlIHdvcmtpbmcgd2l0 aCBhIHdlYiBmcm9u
dCBlbmQsIEkgd29uZGVyIGlmIHRoZXJlJ3MgYW55Cj5taWxlYWdlIGluIGFk YXB0aW5nIHRoZSBQ
SFAgYXBwcm9hY2ggYmVsb3csIHRoYXQgbWFuaXB1bGF0ZXMgSFRNTAo+ZW50 aXRpZXMgdG8gemFw
IGFjY2VudHMuIEkga25vdyBpdCBkb2Vzbid0IGdldCB0byB0aGUgaGVhcnQg b2YgeW91cgo+cHJv
YmxlbSBvbiB0aGUgZGF0YWJhc2UvU1FMIHNpZGUsIGJ1dCBpdCdzIGludHJp Z3Vpbmcgbm9uZXRo
ZWxlc3MuCj4gIAo+ClRoaXMgaXMgb25seSB1c2VmdWwgaWYgdGhlIGNoYXJh Y3RlcnMgYXJlIHdy
aXR0ZW4gYXMgSFRNTCBjaGFyYWN0ZXIgCmVudGl0aWVzIHRvIHN0YXJ0IHdp dGguICBJJ20gd29y
a2luZyB3aXRoIGNoYXJhY3RlcnMgZW5jb2RlZCBpbiBVVEYtOCwgCnNvIGl0 J3Mgbm90IHJlYWxs
eSBhbnkgdXNlLgoKPltzbmlwXQo+UC5TLiBJIHdhcyBhbHNvIGZhc2NpbmF0 ZWQgYnkgdGhpcyBp
bnRlcmVzdGluZyBhcnRpY2xlIG9uIHJlbGF0ZWQKPnByb2JsZW1zIG9mIGFs cGhhYmV0aXphdGlv
bjogaHR0cDovL3d3dy5yb3N0cmEuZGsvYWxwaGFiZXQvYWxwaGFfZW4uaHRt Cj4KVGhhdCdzIGFs
bCBhYm91dCBzb3J0aW5nLCB3aGljaCBJIGhhdmVuJ3QgZ290IHRvIHlldC4g IEZpcnN0LCBJIHdh
bnQgdGhlIAptZWFucyB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSByZXN1bHRz IHRvIHN0YXJ0IHdp
dGg7IHNvcnRpbmcgdGhlIHJlc3VsdHMgCmNvbWVzIGxhdGVyLiAgSSB3YXMg aG9waW5nIHRoYXQg
TXlTUUwncyB2YXJpb3VzIGNvbGxhdGlvbnMgd291bGQgCnN1ZmZpY2UsIGJ1 dCB0aGF0IGFydGlj
bGUgcmFpc2VzIHdob2xlIGNhbnMgb2Ygd29ybXMgdGhhdCBwcmVzdW1hYmx5 IAp3b24ndCBiZSAo
Y2FuJ3QgYmUpIGNvdmVyZWQgYnkgdGhlbS4KCi0gU3RldmUKCgotLS0tLS0t LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUmFkYW4gQ29tcHV0YXRp b25hbCBMdGQuCgpU
aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgbWVzc2FnZSBhbmQg YW55IGZpbGVzIHRy
YW5zbWl0dGVkIHdpdGggaXQgYXJlIGNvbmZpZGVudGlhbCBhbmQgaW50ZW5k ZWQgZm9yIHRoZSBh
ZGRyZXNzZWUocykgb25seS4gIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMg bWVzc2FnZSBpbiBl
cnJvciBvciB0aGVyZSBhcmUgYW55IHByb2JsZW1zLCBwbGVhc2Ugbm90aWZ5 IHRoZSBzZW5kZXIg
aW1tZWRpYXRlbHkuICBUaGUgdW5hdXRob3JpemVkIHVzZSwgZGlzY2xvc3Vy ZSwgY29weWluZyBv
ciBhbHRlcmF0aW9uIG9mIHRoaXMgbWVzc2FnZSBpcyBzdHJpY3RseSBmb3Ji aWRkZW4uICBOb3Rl
IHRoYXQgYW55IHZpZXdzIG9yIG9waW5pb25zIHByZXNlbnRlZCBpbiB0aGlz IGVtYWlsIGFyZSBz
b2xlbHkgdGhvc2Ugb2YgdGhlIGF1dGhvciBhbmQgZG8gbm90IG5lY2Vzc2Fy aWx5IHJlcHJlc2Vu
dCB0aG9zZSBvZiBSYWRhbiBDb21wdXRhdGlvbmFsIEx0ZC4gIFRoZSByZWNp cGllbnQocykgb2Yg
dGhpcyBtZXNzYWdlIHNob3VsZCBjaGVjayBpdCBhbmQgYW55IGF0dGFjaGVk IGZpbGVzIGZvciB2
aXJ1c2VzOiBSYWRhbiBDb21wdXRhdGlvbmFsIHdpbGwgYWNjZXB0IG5vIGxp YWJpbGl0eSBmb3Ig
YW55IGRhbWFnZSBjYXVzZWQgYnkgYW55IHZpcnVzIHRyYW5zbWl0dGVkIGJ5 IHRoaXMgZW1haWwu
Cg==