<?php
/**
* Checks if a $word is a concatenation of valid $symbols
* E.g. `$word = 'paw'`, `$symbols = array('p', 'pa', 'aw')` would return
* true, because `$word = 'p'.'aw'`
*
* (Too slow)
*/
function isValidWord( $word ,& $symbols ) {
$nodeExpansions = array ( ) ; if ( in_array ( $node , $symbols ) ) { return true ; } for ( $len = $nodeLength - 1 ; $len > 0 ; $len -- ) {
$nodeExpansions [ ] = substr ( $node , $len - $nodeLength ) ; }
}
}
return false ;
}
/**
* Recursive implementation proposed by Waleed Khan @ stackoverflow
*
* (Even slower)
*/
function search( & $array , $word , $word_so_far = '' ) {
if ( $word === $word_so_far ) {
return true ;
}
foreach ( $array as $symbol ) {
$new_word = $word_so_far . $symbol ;
if ( search( $array , $word , $new_word ) ) {
return true ;
}
}
}
return false ;
}
$minWordLength = 2 ;
$maxWordLength = 6 ;
$validWordsCount = 5 ;
$invalidWordsCount = 5 ;
'the' ,
'of' ,
'and' ,
'to' ,
'a' ,
'in' ,
'for' ,
'is' ,
'on' ,
'that' ,
'by' ,
'this' ,
'with' ,
'i' ,
'you' ,
'it' ,
'not' ,
'or' ,
'be' ,
'are' ,
'from' ,
'at' ,
'as' ,
'your' ,
'all' ,
'have' ,
'new' ,
'more' ,
'an' ,
'was' ,
'we' ,
'will' ,
'home' ,
'can' ,
'us' ,
'about' ,
'if' ,
'page' ,
'my' ,
'has' ,
'search' ,
'free' ,
'but' ,
'our' ,
'one' ,
'other' ,
'do' ,
'no' ,
'information' ,
'time' ,
'they' ,
'site' ,
'he' ,
'up' ,
'may' ,
'what' ,
'which' ,
'their' ,
'news' ,
'out' ,
'use' ,
'any' ,
'there' ,
'see' ,
'only' ,
'so' ,
'his' ,
'when' ,
'contact' ,
'here' ,
'business' ,
'who' ,
'web' ,
'also' ,
'now' ,
'help' ,
'get' ,
'pm' ,
'view' ,
'online' ,
'c' ,
'e' ,
'first' ,
'am' ,
'been' ,
'would' ,
'how' ,
'were' ,
'me' ,
's' ,
'services' ,
'some' ,
'these' ,
'click' ,
'its' ,
'like' ,
'service' ,
'x' ,
'than' ,
'find' ,
'price' ,
) ;
//careful here with potential concatenations of invalid symbols that make symbols from the valid symbols list!
$invalidSymbols = array ( 'b*' , 'c(d' , 'e.f' , 'efg..' , 'hij-' , 'spam`' , 'maps_?' , 'kk=' , '++t+a' , '___zz' ) ;
echo "minWordLength: {$minWordLength} \n " ;
echo "maxWordLength: {$maxWordLength} \n " ;
echo "validWordsCount: {$validWordsCount} \n " ;
echo "invalidWordsCount: {$invalidWordsCount} \n " ;
$validSymbolsMaxIndex = count ( $validSymbols ) - 1 ; echo "validSymbolsCount: " . ( $validSymbolsMaxIndex + 1 ) . "\n " ;
echo "invalidSymbolsCount: " . count ( $invalidSymbols ) . "}\n " ; for ( $i = 0 ; $i < $validWordsCount ; $i ++ ) {
$word = '' ;
$wordLength = mt_rand ( $minWordLength , $maxWordLength ) ; for ( $j = 0 ; $j < $wordLength ; $j ++ ) {
$word .= $validSymbols [ mt_rand ( 0 , $validSymbolsMaxIndex ) ] ; }
$validWords [ ] = $word ;
}
$invalidSymbolsMaxIndex = count ( $invalidSymbols ) - 1 ; for ( $i = 0 ; $i < $invalidWordsCount ; $i ++ ) {
$word = '' ;
$wordLength = mt_rand ( $minWordLength , $maxWordLength ) ; $invalidSymbolCount = 0 ;
for ( $j = $wordLength - 1 ; $j >= 0 ; $j -- ) {
$word .= ( ( $invalid = mt_rand ( 0 , 1 ) ) === 0 ) ?
$validSymbols [ mt_rand ( 0 , $validSymbolsMaxIndex ) ] : $invalidSymbols [ mt_rand ( 0 , $invalidSymbolsMaxIndex ) ] ; $invalidSymbolCount += $invalid ;
}
if ( $invalidSymbolCount === 0 ) {
$word .= $invalidSymbols [ mt_rand ( 0 , $invalidSymbolsMaxIndex ) ] ; } else {
$word .= ( ( $invalid = mt_rand ( 0 , 1 ) ) === 0 ) ?
$validSymbols [ mt_rand ( 0 , $validSymbolsMaxIndex ) ] : $invalidSymbols [ mt_rand ( 0 , $invalidSymbolsMaxIndex ) ] ; }
$invalidWords [ ] = $word ;
}
// isValidWord($word,$validSymbols)
foreach ( $validWords as $word ) {
if ( ! isValidWord( $word , $validSymbols ) ) {
echo "Error: Allegedly valid word `{$word} ` got flagged as invalid by isValidWord()\n " ;
break ;
}
}
foreach ( $invalidWords as $word ) {
if ( isValidWord( $word , $validSymbols ) ) {
echo "Error: Allegedly invalid word `{$word} ` got flagged as valid by isValidWord()\n " ;
break ;
}
}
echo "Exec. time using isValidWord(\$ word,\$ validSymbols): {$elapsedTime} seconds\n " ;
// search($validSymbols,$word)
foreach ( $validWords as $word ) {
if ( ! search( $validSymbols , $word ) ) {
echo "Error: Allegedly valid word `{$word} ` got flagged as invalid by search()\n " ;
break ;
}
}
foreach ( $invalidWords as $word ) {
if ( search( $validSymbols , $word ) ) {
echo "Error: Allegedly invalid word `{$word} ` got flagged as valid by search()\n " ;
break ;
}
}
echo "Exec. time using search(\$ validSymbols,\$ word): {$elapsedTime} seconds\n " ;
/*
* Regex implementation proposed by Waleed Khan @ stackoverflow
*
* (Fast enough, unfortunately it won't compile for big $validSymbol dictionaries (~10000 symbols): Regex too long)
*/
// preg_match('/^(preg_quote($validSymbols[0])|...|preg_quote($validSymbols[count($validSymbols)-1]))+$/',$word)
$regex = '/^(' ;
foreach ( $validSymbols as $symbol ) {
}
$regex = rtrim ( $regex , '|' ) ; $regex .= ')+$/' ;
foreach ( $validWords as $word ) {
echo "Error: Allegedly valid word `{$word} ` got flagged as invalid by preg_match()\n " ;
break ;
}
}
foreach ( $invalidWords as $word ) {
echo "Error: Allegedly invalid word `{$word} ` did not get flagged as invalid by preg_match()\n " ;
break ;
}
}
echo "Exec. time using preg_match('/^(preg_quote(\$ validSymbols[0])|...|preg_quote(\$ validSymbols[count(\$ validSymbols)-1]))+\$ /',\$ word): {$elapsedTime} seconds\n " ;
PD9waHAKLyoqCiAqIENoZWNrcyBpZiBhICR3b3JkIGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB2YWxpZCAkc3ltYm9scwogKiBFLmcuIGAkd29yZCA9ICdwYXcnYCwgYCRzeW1ib2xzID0gYXJyYXkoJ3AnLCAncGEnLCAnYXcnKWAgd291bGQgcmV0dXJuCiAqIHRydWUsIGJlY2F1c2UgYCR3b3JkID0gJ3AnLidhdydgCiAqCiAqIChUb28gc2xvdykKICovCmZ1bmN0aW9uIGlzVmFsaWRXb3JkKCR3b3JkLCYkc3ltYm9scyl7CiAgICAkbm9kZXMgPSBhcnJheSgkd29yZCk7CiAgICB3aGlsZSAoY291bnQoJG5vZGVzKT4wKXsKICAgICAgICAkbm9kZSA9IGFycmF5X3NoaWZ0KCRub2Rlcyk7CiAgICAgICAgJG5vZGVFeHBhbnNpb25zID0gYXJyYXkoKTsKICAgICAgICAkbm9kZUxlbmd0aCA9IHN0cmxlbigkbm9kZSk7CiAgICAgICAgaWYgKGluX2FycmF5KCRub2RlLCRzeW1ib2xzKSkgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgIGZvciAoJGxlbj0kbm9kZUxlbmd0aC0xOyRsZW4+MDskbGVuLS0pewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoc3Vic3RyKCRub2RlLCAwLCAkbGVuKSwgJHN5bWJvbHMpKXsKICAgICAgICAgICAgICAgICRub2RlRXhwYW5zaW9uc1tdID0gc3Vic3RyKCRub2RlLCAkbGVuLSRub2RlTGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbm9kZXMgPSBhcnJheV9tZXJnZSgkbm9kZUV4cGFuc2lvbnMsJG5vZGVzKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBwcm9wb3NlZCBieSBXYWxlZWQgS2hhbiBAIHN0YWNrb3ZlcmZsb3cKICoKICogKEV2ZW4gc2xvd2VyKQogKi8KZnVuY3Rpb24gc2VhcmNoKCYkYXJyYXksICR3b3JkLCAkd29yZF9zb19mYXIgPSAnJykgewogICAgaWYgKCR3b3JkID09PSAkd29yZF9zb19mYXIpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIAogICAgZm9yZWFjaCAoJGFycmF5IGFzICRzeW1ib2wpIHsKICAgICAgICAkbmV3X3dvcmQgPSAkd29yZF9zb19mYXIgLiAkc3ltYm9sOwogICAgICAgIGlmIChzdWJzdHIoJHdvcmQsIDAsIHN0cmxlbigkbmV3X3dvcmQpKSA9PT0gJG5ld193b3JkKSB7CiAgICAgICAgICAgIGlmIChzZWFyY2goJGFycmF5LCAkd29yZCwgJG5ld193b3JkKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAKICAgIHJldHVybiBmYWxzZTsKfQoKJG1pbldvcmRMZW5ndGggPSAyOwokbWF4V29yZExlbmd0aCA9IDY7CiR2YWxpZFdvcmRzQ291bnQgPSA1OwokaW52YWxpZFdvcmRzQ291bnQgPSA1OwokdmFsaWRTeW1ib2xzID0gYXJyYXkoCid0aGUnLAonb2YnLAonYW5kJywKJ3RvJywKJ2EnLAonaW4nLAonZm9yJywKJ2lzJywKJ29uJywKJ3RoYXQnLAonYnknLAondGhpcycsCid3aXRoJywKJ2knLAoneW91JywKJ2l0JywKJ25vdCcsCidvcicsCidiZScsCidhcmUnLAonZnJvbScsCidhdCcsCidhcycsCid5b3VyJywKJ2FsbCcsCidoYXZlJywKJ25ldycsCidtb3JlJywKJ2FuJywKJ3dhcycsCid3ZScsCid3aWxsJywKJ2hvbWUnLAonY2FuJywKJ3VzJywKJ2Fib3V0JywKJ2lmJywKJ3BhZ2UnLAonbXknLAonaGFzJywKJ3NlYXJjaCcsCidmcmVlJywKJ2J1dCcsCidvdXInLAonb25lJywKJ290aGVyJywKJ2RvJywKJ25vJywKJ2luZm9ybWF0aW9uJywKJ3RpbWUnLAondGhleScsCidzaXRlJywKJ2hlJywKJ3VwJywKJ21heScsCid3aGF0JywKJ3doaWNoJywKJ3RoZWlyJywKJ25ld3MnLAonb3V0JywKJ3VzZScsCidhbnknLAondGhlcmUnLAonc2VlJywKJ29ubHknLAonc28nLAonaGlzJywKJ3doZW4nLAonY29udGFjdCcsCidoZXJlJywKJ2J1c2luZXNzJywKJ3dobycsCid3ZWInLAonYWxzbycsCidub3cnLAonaGVscCcsCidnZXQnLAoncG0nLAondmlldycsCidvbmxpbmUnLAonYycsCidlJywKJ2ZpcnN0JywKJ2FtJywKJ2JlZW4nLAond291bGQnLAonaG93JywKJ3dlcmUnLAonbWUnLAoncycsCidzZXJ2aWNlcycsCidzb21lJywKJ3RoZXNlJywKJ2NsaWNrJywKJ2l0cycsCidsaWtlJywKJ3NlcnZpY2UnLAoneCcsCid0aGFuJywKJ2ZpbmQnLAoncHJpY2UnLAopOwovL2NhcmVmdWwgaGVyZSB3aXRoIHBvdGVudGlhbCBjb25jYXRlbmF0aW9ucyBvZiBpbnZhbGlkIHN5bWJvbHMgdGhhdCBtYWtlIHN5bWJvbHMgZnJvbSB0aGUgdmFsaWQgc3ltYm9scyBsaXN0IQokaW52YWxpZFN5bWJvbHMgPSBhcnJheSAoJ2IqJywnYyhkJywnZS5mJywnZWZnLi4nLCdoaWotJywnc3BhbWAnLCdtYXBzXz8nLCdraz0nLCcrK3QrYScsJ19fX3p6Jyk7CgplY2hvICJtaW5Xb3JkTGVuZ3RoOiB7JG1pbldvcmRMZW5ndGh9XG4iOwplY2hvICJtYXhXb3JkTGVuZ3RoOiB7JG1heFdvcmRMZW5ndGh9XG4iOwplY2hvICJ2YWxpZFdvcmRzQ291bnQ6IHskdmFsaWRXb3Jkc0NvdW50fVxuIjsKZWNobyAiaW52YWxpZFdvcmRzQ291bnQ6IHskaW52YWxpZFdvcmRzQ291bnR9XG4iOwoKJHZhbGlkU3ltYm9sc01heEluZGV4ID0gY291bnQoJHZhbGlkU3ltYm9scyktMTsKZWNobyAidmFsaWRTeW1ib2xzQ291bnQ6ICIuKCR2YWxpZFN5bWJvbHNNYXhJbmRleCsxKS4iXG4iOwplY2hvICJpbnZhbGlkU3ltYm9sc0NvdW50OiAiLmNvdW50KCRpbnZhbGlkU3ltYm9scykuIn1cbiI7CiR2YWxpZFdvcmRzID0gYXJyYXkoKTsKZm9yICgkaT0wOyRpPCR2YWxpZFdvcmRzQ291bnQ7JGkrKyl7CiAgICAkd29yZCA9ICcnOwogICAgJHdvcmRMZW5ndGggPSBtdF9yYW5kKCRtaW5Xb3JkTGVuZ3RoLCRtYXhXb3JkTGVuZ3RoKTsKICAgIGZvciAoJGo9MDskajwkd29yZExlbmd0aDskaisrKXsKICAgICAgICAkd29yZC49JHZhbGlkU3ltYm9sc1ttdF9yYW5kKDAsJHZhbGlkU3ltYm9sc01heEluZGV4KV07CiAgICB9CiAgICAkdmFsaWRXb3Jkc1tdID0gJHdvcmQ7Cn0KCiRpbnZhbGlkU3ltYm9sc01heEluZGV4ID0gY291bnQoJGludmFsaWRTeW1ib2xzKS0xOwokaW52YWxpZFdvcmRzID0gYXJyYXkoKTsKZm9yICgkaT0wOyRpPCRpbnZhbGlkV29yZHNDb3VudDskaSsrKXsKICAgICR3b3JkID0gJyc7CiAgICAkd29yZExlbmd0aCA9IG10X3JhbmQoJG1pbldvcmRMZW5ndGgsJG1heFdvcmRMZW5ndGgpOwogICAgJGludmFsaWRTeW1ib2xDb3VudCA9IDA7CiAgICBmb3IgKCRqPSR3b3JkTGVuZ3RoLTE7JGo+PTA7JGotLSl7CiAgICAgICAgJHdvcmQuPSgoJGludmFsaWQgPSBtdF9yYW5kKDAsMSkpPT09MCk/CiAgICAgICAgICAgICR2YWxpZFN5bWJvbHNbbXRfcmFuZCgwLCR2YWxpZFN5bWJvbHNNYXhJbmRleCldIDogCiAgICAgICAgICAgICRpbnZhbGlkU3ltYm9sc1ttdF9yYW5kKDAsJGludmFsaWRTeW1ib2xzTWF4SW5kZXgpXTsKICAgICAgICAkaW52YWxpZFN5bWJvbENvdW50Kz0kaW52YWxpZDsKICAgIH0KICAgIGlmICgkaW52YWxpZFN5bWJvbENvdW50PT09MCl7CiAgICAgICAgJHdvcmQuPSRpbnZhbGlkU3ltYm9sc1ttdF9yYW5kKDAsJGludmFsaWRTeW1ib2xzTWF4SW5kZXgpXTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHdvcmQuPSgoJGludmFsaWQgPSBtdF9yYW5kKDAsMSkpPT09MCk/CiAgICAgICAgICAgICR2YWxpZFN5bWJvbHNbbXRfcmFuZCgwLCR2YWxpZFN5bWJvbHNNYXhJbmRleCldIDogCiAgICAgICAgICAgICRpbnZhbGlkU3ltYm9sc1ttdF9yYW5kKDAsJGludmFsaWRTeW1ib2xzTWF4SW5kZXgpXTsKICAgIH0KICAgICRpbnZhbGlkV29yZHNbXSA9ICR3b3JkOwp9CgovLyBpc1ZhbGlkV29yZCgkd29yZCwkdmFsaWRTeW1ib2xzKQokc3RhcnQgPSBtaWNyb3RpbWUodHJ1ZSk7CmZvcmVhY2goJHZhbGlkV29yZHMgYXMgJHdvcmQpewogICAgaWYoIWlzVmFsaWRXb3JkKCR3b3JkLCR2YWxpZFN5bWJvbHMpKXsKICAgICAgICBlY2hvICJFcnJvcjogQWxsZWdlZGx5IHZhbGlkIHdvcmQgYHskd29yZH1gIGdvdCBmbGFnZ2VkIGFzIGludmFsaWQgYnkgaXNWYWxpZFdvcmQoKVxuIjsKICAgICAgICBicmVhazsKICAgIH0KfQoKZm9yZWFjaCgkaW52YWxpZFdvcmRzIGFzICR3b3JkKXsKICAgIGlmKGlzVmFsaWRXb3JkKCR3b3JkLCR2YWxpZFN5bWJvbHMpKXsKICAgICAgICBlY2hvICJFcnJvcjogQWxsZWdlZGx5IGludmFsaWQgd29yZCBgeyR3b3JkfWAgZ290IGZsYWdnZWQgYXMgdmFsaWQgYnkgaXNWYWxpZFdvcmQoKVxuIjsKICAgICAgICBicmVhazsKICAgIH0KfQokZWxhcHNlZFRpbWUgPSBtaWNyb3RpbWUodHJ1ZSkgLSAkc3RhcnQ7CmVjaG8gIkV4ZWMuIHRpbWUgdXNpbmcgaXNWYWxpZFdvcmQoXCR3b3JkLFwkdmFsaWRTeW1ib2xzKTogeyRlbGFwc2VkVGltZX0gc2Vjb25kc1xuIjsKCi8vIHNlYXJjaCgkdmFsaWRTeW1ib2xzLCR3b3JkKQokc3RhcnQgPSBtaWNyb3RpbWUodHJ1ZSk7CmZvcmVhY2goJHZhbGlkV29yZHMgYXMgJHdvcmQpewogICAgaWYoIXNlYXJjaCgkdmFsaWRTeW1ib2xzLCR3b3JkKSl7CiAgICAgICAgZWNobyAiRXJyb3I6IEFsbGVnZWRseSB2YWxpZCB3b3JkIGB7JHdvcmR9YCBnb3QgZmxhZ2dlZCBhcyBpbnZhbGlkIGJ5IHNlYXJjaCgpXG4iOwogICAgICAgIGJyZWFrOwogICAgfQp9Cgpmb3JlYWNoKCRpbnZhbGlkV29yZHMgYXMgJHdvcmQpewogICAgaWYoc2VhcmNoKCR2YWxpZFN5bWJvbHMsJHdvcmQpKXsKICAgICAgICBlY2hvICJFcnJvcjogQWxsZWdlZGx5IGludmFsaWQgd29yZCBgeyR3b3JkfWAgZ290IGZsYWdnZWQgYXMgdmFsaWQgYnkgc2VhcmNoKClcbiI7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KJGVsYXBzZWRUaW1lID0gbWljcm90aW1lKHRydWUpIC0gJHN0YXJ0OwplY2hvICJFeGVjLiB0aW1lIHVzaW5nIHNlYXJjaChcJHZhbGlkU3ltYm9scyxcJHdvcmQpOiB7JGVsYXBzZWRUaW1lfSBzZWNvbmRzXG4iOwovKgogKiAgUmVnZXggaW1wbGVtZW50YXRpb24gcHJvcG9zZWQgYnkgV2FsZWVkIEtoYW4gQCBzdGFja292ZXJmbG93CiAqCiAqIChGYXN0IGVub3VnaCwgdW5mb3J0dW5hdGVseSBpdCB3b24ndCBjb21waWxlIGZvciBiaWcgJHZhbGlkU3ltYm9sIGRpY3Rpb25hcmllcyAofjEwMDAwIHN5bWJvbHMpOiBSZWdleCB0b28gbG9uZykKICovCi8vIHByZWdfbWF0Y2goJy9eKHByZWdfcXVvdGUoJHZhbGlkU3ltYm9sc1swXSl8Li4ufHByZWdfcXVvdGUoJHZhbGlkU3ltYm9sc1tjb3VudCgkdmFsaWRTeW1ib2xzKS0xXSkpKyQvJywkd29yZCkKJHN0YXJ0ID0gbWljcm90aW1lKHRydWUpOwokcmVnZXggPSAnL14oJzsKZm9yZWFjaCAoJHZhbGlkU3ltYm9scyBhcyAkc3ltYm9sKXsKICAgICRyZWdleCAuPSAgcHJlZ19xdW90ZSgkc3ltYm9sLCcvJykuJ3wnOwp9CiRyZWdleCA9IHJ0cmltKCRyZWdleCwnfCcpOwokcmVnZXguPScpKyQvJzsKZm9yZWFjaCgkdmFsaWRXb3JkcyBhcyAkd29yZCl7CiAgICBpZihwcmVnX21hdGNoKCRyZWdleCwkd29yZCkhPT0xKXsKICAgICAgICBlY2hvICJFcnJvcjogQWxsZWdlZGx5IHZhbGlkIHdvcmQgYHskd29yZH1gIGdvdCBmbGFnZ2VkIGFzIGludmFsaWQgYnkgcHJlZ19tYXRjaCgpXG4iOwogICAgICAgIGJyZWFrOwogICAgfQp9Cgpmb3JlYWNoKCRpbnZhbGlkV29yZHMgYXMgJHdvcmQpewogICAgaWYocHJlZ19tYXRjaCgkcmVnZXgsJHdvcmQpIT09MCl7CiAgICAgICAgZWNobyAiRXJyb3I6IEFsbGVnZWRseSBpbnZhbGlkIHdvcmQgYHskd29yZH1gIGRpZCBub3QgZ2V0IGZsYWdnZWQgYXMgaW52YWxpZCBieSBwcmVnX21hdGNoKClcbiI7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KJGVsYXBzZWRUaW1lID0gbWljcm90aW1lKHRydWUpIC0gJHN0YXJ0OwplY2hvICJFeGVjLiB0aW1lIHVzaW5nIHByZWdfbWF0Y2goJy9eKHByZWdfcXVvdGUoXCR2YWxpZFN5bWJvbHNbMF0pfC4uLnxwcmVnX3F1b3RlKFwkdmFsaWRTeW1ib2xzW2NvdW50KFwkdmFsaWRTeW1ib2xzKS0xXSkpK1wkLycsXCR3b3JkKTogeyRlbGFwc2VkVGltZX0gc2Vjb25kc1xuIjsK