1#include <xrpl/beast/utility/instrumentation.h> 
    2#include <xrpl/crypto/RFC1751.h> 
    4#include <boost/algorithm/string/classification.hpp> 
    5#include <boost/algorithm/string/constants.hpp> 
    6#include <boost/algorithm/string/split.hpp> 
    7#include <boost/algorithm/string/trim.hpp> 
    8#include <boost/range/adaptor/copied.hpp> 
   24    "A",    
"ABE",  
"ACE",  
"ACT",  
"AD",   
"ADA",  
"ADD",  
"AGO",  
"AID",
 
   25    "AIM",  
"AIR",  
"ALL",  
"ALP",  
"AM",   
"AMY",  
"AN",   
"ANA",  
"AND",
 
   26    "ANN",  
"ANT",  
"ANY",  
"APE",  
"APS",  
"APT",  
"ARC",  
"ARE",  
"ARK",
 
   27    "ARM",  
"ART",  
"AS",   
"ASH",  
"ASK",  
"AT",   
"ATE",  
"AUG",  
"AUK",
 
   28    "AVE",  
"AWE",  
"AWK",  
"AWL",  
"AWN",  
"AX",   
"AYE",  
"BAD",  
"BAG",
 
   29    "BAH",  
"BAM",  
"BAN",  
"BAR",  
"BAT",  
"BAY",  
"BE",   
"BED",  
"BEE",
 
   30    "BEG",  
"BEN",  
"BET",  
"BEY",  
"BIB",  
"BID",  
"BIG",  
"BIN",  
"BIT",
 
   31    "BOB",  
"BOG",  
"BON",  
"BOO",  
"BOP",  
"BOW",  
"BOY",  
"BUB",  
"BUD",
 
   32    "BUG",  
"BUM",  
"BUN",  
"BUS",  
"BUT",  
"BUY",  
"BY",   
"BYE",  
"CAB",
 
   33    "CAL",  
"CAM",  
"CAN",  
"CAP",  
"CAR",  
"CAT",  
"CAW",  
"COD",  
"COG",
 
   34    "COL",  
"CON",  
"COO",  
"COP",  
"COT",  
"COW",  
"COY",  
"CRY",  
"CUB",
 
   35    "CUE",  
"CUP",  
"CUR",  
"CUT",  
"DAB",  
"DAD",  
"DAM",  
"DAN",  
"DAR",
 
   36    "DAY",  
"DEE",  
"DEL",  
"DEN",  
"DES",  
"DEW",  
"DID",  
"DIE",  
"DIG",
 
   37    "DIN",  
"DIP",  
"DO",   
"DOE",  
"DOG",  
"DON",  
"DOT",  
"DOW",  
"DRY",
 
   38    "DUB",  
"DUD",  
"DUE",  
"DUG",  
"DUN",  
"EAR",  
"EAT",  
"ED",   
"EEL",
 
   39    "EGG",  
"EGO",  
"ELI",  
"ELK",  
"ELM",  
"ELY",  
"EM",   
"END",  
"EST",
 
   40    "ETC",  
"EVA",  
"EVE",  
"EWE",  
"EYE",  
"FAD",  
"FAN",  
"FAR",  
"FAT",
 
   41    "FAY",  
"FED",  
"FEE",  
"FEW",  
"FIB",  
"FIG",  
"FIN",  
"FIR",  
"FIT",
 
   42    "FLO",  
"FLY",  
"FOE",  
"FOG",  
"FOR",  
"FRY",  
"FUM",  
"FUN",  
"FUR",
 
   43    "GAB",  
"GAD",  
"GAG",  
"GAL",  
"GAM",  
"GAP",  
"GAS",  
"GAY",  
"GEE",
 
   44    "GEL",  
"GEM",  
"GET",  
"GIG",  
"GIL",  
"GIN",  
"GO",   
"GOT",  
"GUM",
 
   45    "GUN",  
"GUS",  
"GUT",  
"GUY",  
"GYM",  
"GYP",  
"HA",   
"HAD",  
"HAL",
 
   46    "HAM",  
"HAN",  
"HAP",  
"HAS",  
"HAT",  
"HAW",  
"HAY",  
"HE",   
"HEM",
 
   47    "HEN",  
"HER",  
"HEW",  
"HEY",  
"HI",   
"HID",  
"HIM",  
"HIP",  
"HIS",
 
   48    "HIT",  
"HO",   
"HOB",  
"HOC",  
"HOE",  
"HOG",  
"HOP",  
"HOT",  
"HOW",
 
   49    "HUB",  
"HUE",  
"HUG",  
"HUH",  
"HUM",  
"HUT",  
"I",    
"ICY",  
"IDA",
 
   50    "IF",   
"IKE",  
"ILL",  
"INK",  
"INN",  
"IO",   
"ION",  
"IQ",   
"IRA",
 
   51    "IRE",  
"IRK",  
"IS",   
"IT",   
"ITS",  
"IVY",  
"JAB",  
"JAG",  
"JAM",
 
   52    "JAN",  
"JAR",  
"JAW",  
"JAY",  
"JET",  
"JIG",  
"JIM",  
"JO",   
"JOB",
 
   53    "JOE",  
"JOG",  
"JOT",  
"JOY",  
"JUG",  
"JUT",  
"KAY",  
"KEG",  
"KEN",
 
   54    "KEY",  
"KID",  
"KIM",  
"KIN",  
"KIT",  
"LA",   
"LAB",  
"LAC",  
"LAD",
 
   55    "LAG",  
"LAM",  
"LAP",  
"LAW",  
"LAY",  
"LEA",  
"LED",  
"LEE",  
"LEG",
 
   56    "LEN",  
"LEO",  
"LET",  
"LEW",  
"LID",  
"LIE",  
"LIN",  
"LIP",  
"LIT",
 
   57    "LO",   
"LOB",  
"LOG",  
"LOP",  
"LOS",  
"LOT",  
"LOU",  
"LOW",  
"LOY",
 
   58    "LUG",  
"LYE",  
"MA",   
"MAC",  
"MAD",  
"MAE",  
"MAN",  
"MAO",  
"MAP",
 
   59    "MAT",  
"MAW",  
"MAY",  
"ME",   
"MEG",  
"MEL",  
"MEN",  
"MET",  
"MEW",
 
   60    "MID",  
"MIN",  
"MIT",  
"MOB",  
"MOD",  
"MOE",  
"MOO",  
"MOP",  
"MOS",
 
   61    "MOT",  
"MOW",  
"MUD",  
"MUG",  
"MUM",  
"MY",   
"NAB",  
"NAG",  
"NAN",
 
   62    "NAP",  
"NAT",  
"NAY",  
"NE",   
"NED",  
"NEE",  
"NET",  
"NEW",  
"NIB",
 
   63    "NIL",  
"NIP",  
"NIT",  
"NO",   
"NOB",  
"NOD",  
"NON",  
"NOR",  
"NOT",
 
   64    "NOV",  
"NOW",  
"NU",   
"NUN",  
"NUT",  
"O",    
"OAF",  
"OAK",  
"OAR",
 
   65    "OAT",  
"ODD",  
"ODE",  
"OF",   
"OFF",  
"OFT",  
"OH",   
"OIL",  
"OK",
 
   66    "OLD",  
"ON",   
"ONE",  
"OR",   
"ORB",  
"ORE",  
"ORR",  
"OS",   
"OTT",
 
   67    "OUR",  
"OUT",  
"OVA",  
"OW",   
"OWE",  
"OWL",  
"OWN",  
"OX",   
"PA",
 
   68    "PAD",  
"PAL",  
"PAM",  
"PAN",  
"PAP",  
"PAR",  
"PAT",  
"PAW",  
"PAY",
 
   69    "PEA",  
"PEG",  
"PEN",  
"PEP",  
"PER",  
"PET",  
"PEW",  
"PHI",  
"PI",
 
   70    "PIE",  
"PIN",  
"PIT",  
"PLY",  
"PO",   
"POD",  
"POE",  
"POP",  
"POT",
 
   71    "POW",  
"PRO",  
"PRY",  
"PUB",  
"PUG",  
"PUN",  
"PUP",  
"PUT",  
"QUO",
 
   72    "RAG",  
"RAM",  
"RAN",  
"RAP",  
"RAT",  
"RAW",  
"RAY",  
"REB",  
"RED",
 
   73    "REP",  
"RET",  
"RIB",  
"RID",  
"RIG",  
"RIM",  
"RIO",  
"RIP",  
"ROB",
 
   74    "ROD",  
"ROE",  
"RON",  
"ROT",  
"ROW",  
"ROY",  
"RUB",  
"RUE",  
"RUG",
 
   75    "RUM",  
"RUN",  
"RYE",  
"SAC",  
"SAD",  
"SAG",  
"SAL",  
"SAM",  
"SAN",
 
   76    "SAP",  
"SAT",  
"SAW",  
"SAY",  
"SEA",  
"SEC",  
"SEE",  
"SEN",  
"SET",
 
   77    "SEW",  
"SHE",  
"SHY",  
"SIN",  
"SIP",  
"SIR",  
"SIS",  
"SIT",  
"SKI",
 
   78    "SKY",  
"SLY",  
"SO",   
"SOB",  
"SOD",  
"SON",  
"SOP",  
"SOW",  
"SOY",
 
   79    "SPA",  
"SPY",  
"SUB",  
"SUD",  
"SUE",  
"SUM",  
"SUN",  
"SUP",  
"TAB",
 
   80    "TAD",  
"TAG",  
"TAN",  
"TAP",  
"TAR",  
"TEA",  
"TED",  
"TEE",  
"TEN",
 
   81    "THE",  
"THY",  
"TIC",  
"TIE",  
"TIM",  
"TIN",  
"TIP",  
"TO",   
"TOE",
 
   82    "TOG",  
"TOM",  
"TON",  
"TOO",  
"TOP",  
"TOW",  
"TOY",  
"TRY",  
"TUB",
 
   83    "TUG",  
"TUM",  
"TUN",  
"TWO",  
"UN",   
"UP",   
"US",   
"USE",  
"VAN",
 
   84    "VAT",  
"VET",  
"VIE",  
"WAD",  
"WAG",  
"WAR",  
"WAS",  
"WAY",  
"WE",
 
   85    "WEB",  
"WED",  
"WEE",  
"WET",  
"WHO",  
"WHY",  
"WIN",  
"WIT",  
"WOK",
 
   86    "WON",  
"WOO",  
"WOW",  
"WRY",  
"WU",   
"YAM",  
"YAP",  
"YAW",  
"YE",
 
   87    "YEA",  
"YES",  
"YET",  
"YOU",  
"ABED", 
"ABEL", 
"ABET", 
"ABLE", 
"ABUT",
 
   88    "ACHE", 
"ACID", 
"ACME", 
"ACRE", 
"ACTA", 
"ACTS", 
"ADAM", 
"ADDS", 
"ADEN",
 
   89    "AFAR", 
"AFRO", 
"AGEE", 
"AHEM", 
"AHOY", 
"AIDA", 
"AIDE", 
"AIDS", 
"AIRY",
 
   90    "AJAR", 
"AKIN", 
"ALAN", 
"ALEC", 
"ALGA", 
"ALIA", 
"ALLY", 
"ALMA", 
"ALOE",
 
   91    "ALSO", 
"ALTO", 
"ALUM", 
"ALVA", 
"AMEN", 
"AMES", 
"AMID", 
"AMMO", 
"AMOK",
 
   92    "AMOS", 
"AMRA", 
"ANDY", 
"ANEW", 
"ANNA", 
"ANNE", 
"ANTE", 
"ANTI", 
"AQUA",
 
   93    "ARAB", 
"ARCH", 
"AREA", 
"ARGO", 
"ARID", 
"ARMY", 
"ARTS", 
"ARTY", 
"ASIA",
 
   94    "ASKS", 
"ATOM", 
"AUNT", 
"AURA", 
"AUTO", 
"AVER", 
"AVID", 
"AVIS", 
"AVON",
 
   95    "AVOW", 
"AWAY", 
"AWRY", 
"BABE", 
"BABY", 
"BACH", 
"BACK", 
"BADE", 
"BAIL",
 
   96    "BAIT", 
"BAKE", 
"BALD", 
"BALE", 
"BALI", 
"BALK", 
"BALL", 
"BALM", 
"BAND",
 
   97    "BANE", 
"BANG", 
"BANK", 
"BARB", 
"BARD", 
"BARE", 
"BARK", 
"BARN", 
"BARR",
 
   98    "BASE", 
"BASH", 
"BASK", 
"BASS", 
"BATE", 
"BATH", 
"BAWD", 
"BAWL", 
"BEAD",
 
   99    "BEAK", 
"BEAM", 
"BEAN", 
"BEAR", 
"BEAT", 
"BEAU", 
"BECK", 
"BEEF", 
"BEEN",
 
  100    "BEER", 
"BEET", 
"BELA", 
"BELL", 
"BELT", 
"BEND", 
"BENT", 
"BERG", 
"BERN",
 
  101    "BERT", 
"BESS", 
"BEST", 
"BETA", 
"BETH", 
"BHOY", 
"BIAS", 
"BIDE", 
"BIEN",
 
  102    "BILE", 
"BILK", 
"BILL", 
"BIND", 
"BING", 
"BIRD", 
"BITE", 
"BITS", 
"BLAB",
 
  103    "BLAT", 
"BLED", 
"BLEW", 
"BLOB", 
"BLOC", 
"BLOT", 
"BLOW", 
"BLUE", 
"BLUM",
 
  104    "BLUR", 
"BOAR", 
"BOAT", 
"BOCA", 
"BOCK", 
"BODE", 
"BODY", 
"BOGY", 
"BOHR",
 
  105    "BOIL", 
"BOLD", 
"BOLO", 
"BOLT", 
"BOMB", 
"BONA", 
"BOND", 
"BONE", 
"BONG",
 
  106    "BONN", 
"BONY", 
"BOOK", 
"BOOM", 
"BOON", 
"BOOT", 
"BORE", 
"BORG", 
"BORN",
 
  107    "BOSE", 
"BOSS", 
"BOTH", 
"BOUT", 
"BOWL", 
"BOYD", 
"BRAD", 
"BRAE", 
"BRAG",
 
  108    "BRAN", 
"BRAY", 
"BRED", 
"BREW", 
"BRIG", 
"BRIM", 
"BROW", 
"BUCK", 
"BUDD",
 
  109    "BUFF", 
"BULB", 
"BULK", 
"BULL", 
"BUNK", 
"BUNT", 
"BUOY", 
"BURG", 
"BURL",
 
  110    "BURN", 
"BURR", 
"BURT", 
"BURY", 
"BUSH", 
"BUSS", 
"BUST", 
"BUSY", 
"BYTE",
 
  111    "CADY", 
"CAFE", 
"CAGE", 
"CAIN", 
"CAKE", 
"CALF", 
"CALL", 
"CALM", 
"CAME",
 
  112    "CANE", 
"CANT", 
"CARD", 
"CARE", 
"CARL", 
"CARR", 
"CART", 
"CASE", 
"CASH",
 
  113    "CASK", 
"CAST", 
"CAVE", 
"CEIL", 
"CELL", 
"CENT", 
"CERN", 
"CHAD", 
"CHAR",
 
  114    "CHAT", 
"CHAW", 
"CHEF", 
"CHEN", 
"CHEW", 
"CHIC", 
"CHIN", 
"CHOU", 
"CHOW",
 
  115    "CHUB", 
"CHUG", 
"CHUM", 
"CITE", 
"CITY", 
"CLAD", 
"CLAM", 
"CLAN", 
"CLAW",
 
  116    "CLAY", 
"CLOD", 
"CLOG", 
"CLOT", 
"CLUB", 
"CLUE", 
"COAL", 
"COAT", 
"COCA",
 
  117    "COCK", 
"COCO", 
"CODA", 
"CODE", 
"CODY", 
"COED", 
"COIL", 
"COIN", 
"COKE",
 
  118    "COLA", 
"COLD", 
"COLT", 
"COMA", 
"COMB", 
"COME", 
"COOK", 
"COOL", 
"COON",
 
  119    "COOT", 
"CORD", 
"CORE", 
"CORK", 
"CORN", 
"COST", 
"COVE", 
"COWL", 
"CRAB",
 
  120    "CRAG", 
"CRAM", 
"CRAY", 
"CREW", 
"CRIB", 
"CROW", 
"CRUD", 
"CUBA", 
"CUBE",
 
  121    "CUFF", 
"CULL", 
"CULT", 
"CUNY", 
"CURB", 
"CURD", 
"CURE", 
"CURL", 
"CURT",
 
  122    "CUTS", 
"DADE", 
"DALE", 
"DAME", 
"DANA", 
"DANE", 
"DANG", 
"DANK", 
"DARE",
 
  123    "DARK", 
"DARN", 
"DART", 
"DASH", 
"DATA", 
"DATE", 
"DAVE", 
"DAVY", 
"DAWN",
 
  124    "DAYS", 
"DEAD", 
"DEAF", 
"DEAL", 
"DEAN", 
"DEAR", 
"DEBT", 
"DECK", 
"DEED",
 
  125    "DEEM", 
"DEER", 
"DEFT", 
"DEFY", 
"DELL", 
"DENT", 
"DENY", 
"DESK", 
"DIAL",
 
  126    "DICE", 
"DIED", 
"DIET", 
"DIME", 
"DINE", 
"DING", 
"DINT", 
"DIRE", 
"DIRT",
 
  127    "DISC", 
"DISH", 
"DISK", 
"DIVE", 
"DOCK", 
"DOES", 
"DOLE", 
"DOLL", 
"DOLT",
 
  128    "DOME", 
"DONE", 
"DOOM", 
"DOOR", 
"DORA", 
"DOSE", 
"DOTE", 
"DOUG", 
"DOUR",
 
  129    "DOVE", 
"DOWN", 
"DRAB", 
"DRAG", 
"DRAM", 
"DRAW", 
"DREW", 
"DRUB", 
"DRUG",
 
  130    "DRUM", 
"DUAL", 
"DUCK", 
"DUCT", 
"DUEL", 
"DUET", 
"DUKE", 
"DULL", 
"DUMB",
 
  131    "DUNE", 
"DUNK", 
"DUSK", 
"DUST", 
"DUTY", 
"EACH", 
"EARL", 
"EARN", 
"EASE",
 
  132    "EAST", 
"EASY", 
"EBEN", 
"ECHO", 
"EDDY", 
"EDEN", 
"EDGE", 
"EDGY", 
"EDIT",
 
  133    "EDNA", 
"EGAN", 
"ELAN", 
"ELBA", 
"ELLA", 
"ELSE", 
"EMIL", 
"EMIT", 
"EMMA",
 
  134    "ENDS", 
"ERIC", 
"EROS", 
"EVEN", 
"EVER", 
"EVIL", 
"EYED", 
"FACE", 
"FACT",
 
  135    "FADE", 
"FAIL", 
"FAIN", 
"FAIR", 
"FAKE", 
"FALL", 
"FAME", 
"FANG", 
"FARM",
 
  136    "FAST", 
"FATE", 
"FAWN", 
"FEAR", 
"FEAT", 
"FEED", 
"FEEL", 
"FEET", 
"FELL",
 
  137    "FELT", 
"FEND", 
"FERN", 
"FEST", 
"FEUD", 
"FIEF", 
"FIGS", 
"FILE", 
"FILL",
 
  138    "FILM", 
"FIND", 
"FINE", 
"FINK", 
"FIRE", 
"FIRM", 
"FISH", 
"FISK", 
"FIST",
 
  139    "FITS", 
"FIVE", 
"FLAG", 
"FLAK", 
"FLAM", 
"FLAT", 
"FLAW", 
"FLEA", 
"FLED",
 
  140    "FLEW", 
"FLIT", 
"FLOC", 
"FLOG", 
"FLOW", 
"FLUB", 
"FLUE", 
"FOAL", 
"FOAM",
 
  141    "FOGY", 
"FOIL", 
"FOLD", 
"FOLK", 
"FOND", 
"FONT", 
"FOOD", 
"FOOL", 
"FOOT",
 
  142    "FORD", 
"FORE", 
"FORK", 
"FORM", 
"FORT", 
"FOSS", 
"FOUL", 
"FOUR", 
"FOWL",
 
  143    "FRAU", 
"FRAY", 
"FRED", 
"FREE", 
"FRET", 
"FREY", 
"FROG", 
"FROM", 
"FUEL",
 
  144    "FULL", 
"FUME", 
"FUND", 
"FUNK", 
"FURY", 
"FUSE", 
"FUSS", 
"GAFF", 
"GAGE",
 
  145    "GAIL", 
"GAIN", 
"GAIT", 
"GALA", 
"GALE", 
"GALL", 
"GALT", 
"GAME", 
"GANG",
 
  146    "GARB", 
"GARY", 
"GASH", 
"GATE", 
"GAUL", 
"GAUR", 
"GAVE", 
"GAWK", 
"GEAR",
 
  147    "GELD", 
"GENE", 
"GENT", 
"GERM", 
"GETS", 
"GIBE", 
"GIFT", 
"GILD", 
"GILL",
 
  148    "GILT", 
"GINA", 
"GIRD", 
"GIRL", 
"GIST", 
"GIVE", 
"GLAD", 
"GLEE", 
"GLEN",
 
  149    "GLIB", 
"GLOB", 
"GLOM", 
"GLOW", 
"GLUE", 
"GLUM", 
"GLUT", 
"GOAD", 
"GOAL",
 
  150    "GOAT", 
"GOER", 
"GOES", 
"GOLD", 
"GOLF", 
"GONE", 
"GONG", 
"GOOD", 
"GOOF",
 
  151    "GORE", 
"GORY", 
"GOSH", 
"GOUT", 
"GOWN", 
"GRAB", 
"GRAD", 
"GRAY", 
"GREG",
 
  152    "GREW", 
"GREY", 
"GRID", 
"GRIM", 
"GRIN", 
"GRIT", 
"GROW", 
"GRUB", 
"GULF",
 
  153    "GULL", 
"GUNK", 
"GURU", 
"GUSH", 
"GUST", 
"GWEN", 
"GWYN", 
"HAAG", 
"HAAS",
 
  154    "HACK", 
"HAIL", 
"HAIR", 
"HALE", 
"HALF", 
"HALL", 
"HALO", 
"HALT", 
"HAND",
 
  155    "HANG", 
"HANK", 
"HANS", 
"HARD", 
"HARK", 
"HARM", 
"HART", 
"HASH", 
"HAST",
 
  156    "HATE", 
"HATH", 
"HAUL", 
"HAVE", 
"HAWK", 
"HAYS", 
"HEAD", 
"HEAL", 
"HEAR",
 
  157    "HEAT", 
"HEBE", 
"HECK", 
"HEED", 
"HEEL", 
"HEFT", 
"HELD", 
"HELL", 
"HELM",
 
  158    "HERB", 
"HERD", 
"HERE", 
"HERO", 
"HERS", 
"HESS", 
"HEWN", 
"HICK", 
"HIDE",
 
  159    "HIGH", 
"HIKE", 
"HILL", 
"HILT", 
"HIND", 
"HINT", 
"HIRE", 
"HISS", 
"HIVE",
 
  160    "HOBO", 
"HOCK", 
"HOFF", 
"HOLD", 
"HOLE", 
"HOLM", 
"HOLT", 
"HOME", 
"HONE",
 
  161    "HONK", 
"HOOD", 
"HOOF", 
"HOOK", 
"HOOT", 
"HORN", 
"HOSE", 
"HOST", 
"HOUR",
 
  162    "HOVE", 
"HOWE", 
"HOWL", 
"HOYT", 
"HUCK", 
"HUED", 
"HUFF", 
"HUGE", 
"HUGH",
 
  163    "HUGO", 
"HULK", 
"HULL", 
"HUNK", 
"HUNT", 
"HURD", 
"HURL", 
"HURT", 
"HUSH",
 
  164    "HYDE", 
"HYMN", 
"IBIS", 
"ICON", 
"IDEA", 
"IDLE", 
"IFFY", 
"INCA", 
"INCH",
 
  165    "INTO", 
"IONS", 
"IOTA", 
"IOWA", 
"IRIS", 
"IRMA", 
"IRON", 
"ISLE", 
"ITCH",
 
  166    "ITEM", 
"IVAN", 
"JACK", 
"JADE", 
"JAIL", 
"JAKE", 
"JANE", 
"JAVA", 
"JEAN",
 
  167    "JEFF", 
"JERK", 
"JESS", 
"JEST", 
"JIBE", 
"JILL", 
"JILT", 
"JIVE", 
"JOAN",
 
  168    "JOBS", 
"JOCK", 
"JOEL", 
"JOEY", 
"JOHN", 
"JOIN", 
"JOKE", 
"JOLT", 
"JOVE",
 
  169    "JUDD", 
"JUDE", 
"JUDO", 
"JUDY", 
"JUJU", 
"JUKE", 
"JULY", 
"JUNE", 
"JUNK",
 
  170    "JUNO", 
"JURY", 
"JUST", 
"JUTE", 
"KAHN", 
"KALE", 
"KANE", 
"KANT", 
"KARL",
 
  171    "KATE", 
"KEEL", 
"KEEN", 
"KENO", 
"KENT", 
"KERN", 
"KERR", 
"KEYS", 
"KICK",
 
  172    "KILL", 
"KIND", 
"KING", 
"KIRK", 
"KISS", 
"KITE", 
"KLAN", 
"KNEE", 
"KNEW",
 
  173    "KNIT", 
"KNOB", 
"KNOT", 
"KNOW", 
"KOCH", 
"KONG", 
"KUDO", 
"KURD", 
"KURT",
 
  174    "KYLE", 
"LACE", 
"LACK", 
"LACY", 
"LADY", 
"LAID", 
"LAIN", 
"LAIR", 
"LAKE",
 
  175    "LAMB", 
"LAME", 
"LAND", 
"LANE", 
"LANG", 
"LARD", 
"LARK", 
"LASS", 
"LAST",
 
  176    "LATE", 
"LAUD", 
"LAVA", 
"LAWN", 
"LAWS", 
"LAYS", 
"LEAD", 
"LEAF", 
"LEAK",
 
  177    "LEAN", 
"LEAR", 
"LEEK", 
"LEER", 
"LEFT", 
"LEND", 
"LENS", 
"LENT", 
"LEON",
 
  178    "LESK", 
"LESS", 
"LEST", 
"LETS", 
"LIAR", 
"LICE", 
"LICK", 
"LIED", 
"LIEN",
 
  179    "LIES", 
"LIEU", 
"LIFE", 
"LIFT", 
"LIKE", 
"LILA", 
"LILT", 
"LILY", 
"LIMA",
 
  180    "LIMB", 
"LIME", 
"LIND", 
"LINE", 
"LINK", 
"LINT", 
"LION", 
"LISA", 
"LIST",
 
  181    "LIVE", 
"LOAD", 
"LOAF", 
"LOAM", 
"LOAN", 
"LOCK", 
"LOFT", 
"LOGE", 
"LOIS",
 
  182    "LOLA", 
"LONE", 
"LONG", 
"LOOK", 
"LOON", 
"LOOT", 
"LORD", 
"LORE", 
"LOSE",
 
  183    "LOSS", 
"LOST", 
"LOUD", 
"LOVE", 
"LOWE", 
"LUCK", 
"LUCY", 
"LUGE", 
"LUKE",
 
  184    "LULU", 
"LUND", 
"LUNG", 
"LURA", 
"LURE", 
"LURK", 
"LUSH", 
"LUST", 
"LYLE",
 
  185    "LYNN", 
"LYON", 
"LYRA", 
"MACE", 
"MADE", 
"MAGI", 
"MAID", 
"MAIL", 
"MAIN",
 
  186    "MAKE", 
"MALE", 
"MALI", 
"MALL", 
"MALT", 
"MANA", 
"MANN", 
"MANY", 
"MARC",
 
  187    "MARE", 
"MARK", 
"MARS", 
"MART", 
"MARY", 
"MASH", 
"MASK", 
"MASS", 
"MAST",
 
  188    "MATE", 
"MATH", 
"MAUL", 
"MAYO", 
"MEAD", 
"MEAL", 
"MEAN", 
"MEAT", 
"MEEK",
 
  189    "MEET", 
"MELD", 
"MELT", 
"MEMO", 
"MEND", 
"MENU", 
"MERT", 
"MESH", 
"MESS",
 
  190    "MICE", 
"MIKE", 
"MILD", 
"MILE", 
"MILK", 
"MILL", 
"MILT", 
"MIMI", 
"MIND",
 
  191    "MINE", 
"MINI", 
"MINK", 
"MINT", 
"MIRE", 
"MISS", 
"MIST", 
"MITE", 
"MITT",
 
  192    "MOAN", 
"MOAT", 
"MOCK", 
"MODE", 
"MOLD", 
"MOLE", 
"MOLL", 
"MOLT", 
"MONA",
 
  193    "MONK", 
"MONT", 
"MOOD", 
"MOON", 
"MOOR", 
"MOOT", 
"MORE", 
"MORN", 
"MORT",
 
  194    "MOSS", 
"MOST", 
"MOTH", 
"MOVE", 
"MUCH", 
"MUCK", 
"MUDD", 
"MUFF", 
"MULE",
 
  195    "MULL", 
"MURK", 
"MUSH", 
"MUST", 
"MUTE", 
"MUTT", 
"MYRA", 
"MYTH", 
"NAGY",
 
  196    "NAIL", 
"NAIR", 
"NAME", 
"NARY", 
"NASH", 
"NAVE", 
"NAVY", 
"NEAL", 
"NEAR",
 
  197    "NEAT", 
"NECK", 
"NEED", 
"NEIL", 
"NELL", 
"NEON", 
"NERO", 
"NESS", 
"NEST",
 
  198    "NEWS", 
"NEWT", 
"NIBS", 
"NICE", 
"NICK", 
"NILE", 
"NINA", 
"NINE", 
"NOAH",
 
  199    "NODE", 
"NOEL", 
"NOLL", 
"NONE", 
"NOOK", 
"NOON", 
"NORM", 
"NOSE", 
"NOTE",
 
  200    "NOUN", 
"NOVA", 
"NUDE", 
"NULL", 
"NUMB", 
"OATH", 
"OBEY", 
"OBOE", 
"ODIN",
 
  201    "OHIO", 
"OILY", 
"OINT", 
"OKAY", 
"OLAF", 
"OLDY", 
"OLGA", 
"OLIN", 
"OMAN",
 
  202    "OMEN", 
"OMIT", 
"ONCE", 
"ONES", 
"ONLY", 
"ONTO", 
"ONUS", 
"ORAL", 
"ORGY",
 
  203    "OSLO", 
"OTIS", 
"OTTO", 
"OUCH", 
"OUST", 
"OUTS", 
"OVAL", 
"OVEN", 
"OVER",
 
  204    "OWLY", 
"OWNS", 
"QUAD", 
"QUIT", 
"QUOD", 
"RACE", 
"RACK", 
"RACY", 
"RAFT",
 
  205    "RAGE", 
"RAID", 
"RAIL", 
"RAIN", 
"RAKE", 
"RANK", 
"RANT", 
"RARE", 
"RASH",
 
  206    "RATE", 
"RAVE", 
"RAYS", 
"READ", 
"REAL", 
"REAM", 
"REAR", 
"RECK", 
"REED",
 
  207    "REEF", 
"REEK", 
"REEL", 
"REID", 
"REIN", 
"RENA", 
"REND", 
"RENT", 
"REST",
 
  208    "RICE", 
"RICH", 
"RICK", 
"RIDE", 
"RIFT", 
"RILL", 
"RIME", 
"RING", 
"RINK",
 
  209    "RISE", 
"RISK", 
"RITE", 
"ROAD", 
"ROAM", 
"ROAR", 
"ROBE", 
"ROCK", 
"RODE",
 
  210    "ROIL", 
"ROLL", 
"ROME", 
"ROOD", 
"ROOF", 
"ROOK", 
"ROOM", 
"ROOT", 
"ROSA",
 
  211    "ROSE", 
"ROSS", 
"ROSY", 
"ROTH", 
"ROUT", 
"ROVE", 
"ROWE", 
"ROWS", 
"RUBE",
 
  212    "RUBY", 
"RUDE", 
"RUDY", 
"RUIN", 
"RULE", 
"RUNG", 
"RUNS", 
"RUNT", 
"RUSE",
 
  213    "RUSH", 
"RUSK", 
"RUSS", 
"RUST", 
"RUTH", 
"SACK", 
"SAFE", 
"SAGE", 
"SAID",
 
  214    "SAIL", 
"SALE", 
"SALK", 
"SALT", 
"SAME", 
"SAND", 
"SANE", 
"SANG", 
"SANK",
 
  215    "SARA", 
"SAUL", 
"SAVE", 
"SAYS", 
"SCAN", 
"SCAR", 
"SCAT", 
"SCOT", 
"SEAL",
 
  216    "SEAM", 
"SEAR", 
"SEAT", 
"SEED", 
"SEEK", 
"SEEM", 
"SEEN", 
"SEES", 
"SELF",
 
  217    "SELL", 
"SEND", 
"SENT", 
"SETS", 
"SEWN", 
"SHAG", 
"SHAM", 
"SHAW", 
"SHAY",
 
  218    "SHED", 
"SHIM", 
"SHIN", 
"SHOD", 
"SHOE", 
"SHOT", 
"SHOW", 
"SHUN", 
"SHUT",
 
  219    "SICK", 
"SIDE", 
"SIFT", 
"SIGH", 
"SIGN", 
"SILK", 
"SILL", 
"SILO", 
"SILT",
 
  220    "SINE", 
"SING", 
"SINK", 
"SIRE", 
"SITE", 
"SITS", 
"SITU", 
"SKAT", 
"SKEW",
 
  221    "SKID", 
"SKIM", 
"SKIN", 
"SKIT", 
"SLAB", 
"SLAM", 
"SLAT", 
"SLAY", 
"SLED",
 
  222    "SLEW", 
"SLID", 
"SLIM", 
"SLIT", 
"SLOB", 
"SLOG", 
"SLOT", 
"SLOW", 
"SLUG",
 
  223    "SLUM", 
"SLUR", 
"SMOG", 
"SMUG", 
"SNAG", 
"SNOB", 
"SNOW", 
"SNUB", 
"SNUG",
 
  224    "SOAK", 
"SOAR", 
"SOCK", 
"SODA", 
"SOFA", 
"SOFT", 
"SOIL", 
"SOLD", 
"SOME",
 
  225    "SONG", 
"SOON", 
"SOOT", 
"SORE", 
"SORT", 
"SOUL", 
"SOUR", 
"SOWN", 
"STAB",
 
  226    "STAG", 
"STAN", 
"STAR", 
"STAY", 
"STEM", 
"STEW", 
"STIR", 
"STOW", 
"STUB",
 
  227    "STUN", 
"SUCH", 
"SUDS", 
"SUIT", 
"SULK", 
"SUMS", 
"SUNG", 
"SUNK", 
"SURE",
 
  228    "SURF", 
"SWAB", 
"SWAG", 
"SWAM", 
"SWAN", 
"SWAT", 
"SWAY", 
"SWIM", 
"SWUM",
 
  229    "TACK", 
"TACT", 
"TAIL", 
"TAKE", 
"TALE", 
"TALK", 
"TALL", 
"TANK", 
"TASK",
 
  230    "TATE", 
"TAUT", 
"TEAL", 
"TEAM", 
"TEAR", 
"TECH", 
"TEEM", 
"TEEN", 
"TEET",
 
  231    "TELL", 
"TEND", 
"TENT", 
"TERM", 
"TERN", 
"TESS", 
"TEST", 
"THAN", 
"THAT",
 
  232    "THEE", 
"THEM", 
"THEN", 
"THEY", 
"THIN", 
"THIS", 
"THUD", 
"THUG", 
"TICK",
 
  233    "TIDE", 
"TIDY", 
"TIED", 
"TIER", 
"TILE", 
"TILL", 
"TILT", 
"TIME", 
"TINA",
 
  234    "TINE", 
"TINT", 
"TINY", 
"TIRE", 
"TOAD", 
"TOGO", 
"TOIL", 
"TOLD", 
"TOLL",
 
  235    "TONE", 
"TONG", 
"TONY", 
"TOOK", 
"TOOL", 
"TOOT", 
"TORE", 
"TORN", 
"TOTE",
 
  236    "TOUR", 
"TOUT", 
"TOWN", 
"TRAG", 
"TRAM", 
"TRAY", 
"TREE", 
"TREK", 
"TRIG",
 
  237    "TRIM", 
"TRIO", 
"TROD", 
"TROT", 
"TROY", 
"TRUE", 
"TUBA", 
"TUBE", 
"TUCK",
 
  238    "TUFT", 
"TUNA", 
"TUNE", 
"TUNG", 
"TURF", 
"TURN", 
"TUSK", 
"TWIG", 
"TWIN",
 
  239    "TWIT", 
"ULAN", 
"UNIT", 
"URGE", 
"USED", 
"USER", 
"USES", 
"UTAH", 
"VAIL",
 
  240    "VAIN", 
"VALE", 
"VARY", 
"VASE", 
"VAST", 
"VEAL", 
"VEDA", 
"VEIL", 
"VEIN",
 
  241    "VEND", 
"VENT", 
"VERB", 
"VERY", 
"VETO", 
"VICE", 
"VIEW", 
"VINE", 
"VISE",
 
  242    "VOID", 
"VOLT", 
"VOTE", 
"WACK", 
"WADE", 
"WAGE", 
"WAIL", 
"WAIT", 
"WAKE",
 
  243    "WALE", 
"WALK", 
"WALL", 
"WALT", 
"WAND", 
"WANE", 
"WANG", 
"WANT", 
"WARD",
 
  244    "WARM", 
"WARN", 
"WART", 
"WASH", 
"WAST", 
"WATS", 
"WATT", 
"WAVE", 
"WAVY",
 
  245    "WAYS", 
"WEAK", 
"WEAL", 
"WEAN", 
"WEAR", 
"WEED", 
"WEEK", 
"WEIR", 
"WELD",
 
  246    "WELL", 
"WELT", 
"WENT", 
"WERE", 
"WERT", 
"WEST", 
"WHAM", 
"WHAT", 
"WHEE",
 
  247    "WHEN", 
"WHET", 
"WHOA", 
"WHOM", 
"WICK", 
"WIFE", 
"WILD", 
"WILL", 
"WIND",
 
  248    "WINE", 
"WING", 
"WINK", 
"WINO", 
"WIRE", 
"WISE", 
"WISH", 
"WITH", 
"WOLF",
 
  249    "WONT", 
"WOOD", 
"WOOL", 
"WORD", 
"WORE", 
"WORK", 
"WORM", 
"WORN", 
"WOVE",
 
  250    "WRIT", 
"WYNN", 
"YALE", 
"YANG", 
"YANK", 
"YARD", 
"YARN", 
"YAWL", 
"YAWN",
 
  251    "YEAH", 
"YEAR", 
"YELL", 
"YOGA", 
"YOKE"};
 
  263    XRPL_ASSERT(length <= 11, 
"ripple::RFC1751::extract : maximum length");
 
  264    XRPL_ASSERT(start >= 0, 
"ripple::RFC1751::extract : minimum start");
 
  265    XRPL_ASSERT(length >= 0, 
"ripple::RFC1751::extract : minimum length");
 
  267        start + length <= 66,
 
  268        "ripple::RFC1751::extract : maximum start + length");
 
  270    int const shiftR = 24 - (length + (start % 8));
 
  272    cc = (shiftR < 16) ? s[start / 8 + 1] : 0;
 
  273    cr = (shiftR < 8) ? s[start / 8 + 2] : 0;
 
  275    x = ((long)(cl << 8 | cc) << 8 | cr);  
 
  277    x = (x & (0xffff >> (16 - length)));   
 
 
  290    memcpy(caBuffer, strData.
c_str(), 8);
 
  293    for (p = 0, i = 0; i < 64; i += 2)
 
  296    caBuffer[8] = char(p) << 6;
 
 
  315    XRPL_ASSERT(length <= 11, 
"ripple::RFC1751::insert : maximum length");
 
  316    XRPL_ASSERT(start >= 0, 
"ripple::RFC1751::insert : minimum start");
 
  317    XRPL_ASSERT(length >= 0, 
"ripple::RFC1751::insert : minimum length");
 
  319        start + length <= 66,
 
  320        "ripple::RFC1751::insert : maximum start + length");
 
  322    shift = ((8 - ((start + length) % 8)) % 8);
 
  323    y = (long)x << shift;
 
  324    cl = (y >> 16) & 0xff;
 
  325    cc = (y >> 8) & 0xff;
 
  328    if (shift + length > 16)
 
  331        s[start / 8 + 1] |= cc;
 
  332        s[start / 8 + 2] |= cr;
 
  334    else if (shift + length > 8)
 
  337        s[start / 8 + 1] |= cr;
 
 
  348    for (
auto& letter : strWord)
 
  350        if (islower(
static_cast<unsigned char>(letter)))
 
  351            letter = toupper(
static_cast<unsigned char>(letter));
 
  352        else if (letter == 
'1')
 
  354        else if (letter == 
'0')
 
  356        else if (letter == 
'5')
 
 
  367    while (iResult < 0 && iMin != iMax)
 
  370        int iMid = iMin + (iMax - iMin) / 2;
 
 
  399    if (6 != vsHuman.
size())
 
  405    for (
auto& strWord : vsHuman)
 
  407        int l = strWord.length();
 
  414        auto v = 
wsrch(strWord, l < 4 ? 0 : 571, l < 4 ? 570 : 2048);
 
  424    for (p = 0, i = 0; i < 64; i += 2)
 
  427    if ((p & 3) != 
extract(b, 64, 2))
 
 
  452    boost::algorithm::trim(strTrimmed);
 
  454    boost::algorithm::split(
 
  457        boost::algorithm::is_space(),
 
  458        boost::algorithm::token_compress_on);
 
  460    rc = 12 == vWords.
size() ? 1 : -1;
 
  463        rc = 
etob(strFirst, vWords | boost::adaptors::copied(0, 6));
 
  466        rc = 
etob(strSecond, vWords | boost::adaptors::copied(6, 12));
 
  469        strKey = strFirst + strSecond;
 
 
  484    strHuman = strFirst + 
" " + strSecond;
 
 
  493    unsigned char const* data = 
static_cast<unsigned char const*
>(blob);
 
  496    for (
size_t i = 0; i < bytes; ++i)
 
  499        hash += (hash << 10);
 
  504    hash ^= (hash >> 11);
 
  505    hash += (hash << 15);
 
 
static int wsrch(std::string const &strWord, int iMin, int iMax)
 
static int etob(std::string &strData, std::vector< std::string > vsHuman)
 
static void standard(std::string &strWord)
 
static char const  * s_dictionary[]
 
static void btoe(std::string &strHuman, std::string const &strData)
 
static void getEnglishFromKey(std::string &strHuman, std::string const &strKey)
Convert to human from a 128 bit key in big-endian format.
 
static void insert(char *s, int x, int start, int length)
 
static unsigned long extract(char const *s, int start, int length)
 
static std::string getWordFromBlob(void const *blob, size_t bytes)
Chooses a single dictionary word from the data.
 
static int getKeyFromEnglish(std::string &strKey, std::string const &strHuman)
Convert words separated by spaces into a 128 bit key in big-endian format.
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.