1/** 2 * Required JavaScript for challenge/response spam protection 3 */ 4document.addEventListener('DOMContentLoaded', () => 5{ 6 [...document.querySelectorAll('[id$="-cr-field"]')].forEach(element => 7 { 8 let [expiration,challenge,delay] = atob(element.value).split('|'); 9 10 if (delay === undefined) { 11 // The CR field has already been submitted by the client, but server side validation may have failed 12 return; 13 } 14 15 setTimeout(() => 16 { 17 element.value = btoa(expiration + '|' + challenge.replace(/[a-z]/gi, char => 18 { 19 return String.fromCharCode( char.charCodeAt(0) + ( char.toUpperCase() <= 'M' ? 13 : -13 ) )/* https://stackoverflow.com/a/14553231 */ 20 })) 21 }, 1e3 * delay) 22 }) 23});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.