/* Copyright (c) 2019-2023 Homa Developers * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0+ */ /* This file contains the workload distributions from the Homa paper, plus * some functions to manipulate them. */ #include #include #include #include #include "dist.h" /** * dist_point_gen() - Constructor for the dist_point generator class. Sets the * distribution for the object, potentially merging buckets to reduce the * total number of points and calculates the mean. * @dist: Name of the desired distribution * @max_length: Assume that any lengths longer than this value will * be truncated to this. 0 means no truncation. * @min_bucket_frac: * Minimum increase in the @fraction values from point to point * in the distribution. Buckets from the raw distribution will * be merged if necessary to meet this threshold. A value of * 0 means don't combine buckets. * @max_size_ratio: * Maximum size ratio between the largest and smallest lengths * combined into one bucket; smaller buckets will be created * if necessary to ensure that a bucket doesn't have too much * variation in size. */ dist_point_gen::dist_point_gen(const char* dist, size_t max_length, double min_bucket_frac, double max_size_ratio) : dist_points() , dist_mean(0) , uniform_dist(0.0, 1.0) { char *end; if (max_length == 0) max_length = ~0UL; /* First check for a fixed-size distribution. */ int length = strtol(dist, &end, 10); if ((length != 0) && (*end == 0)) { dist_points.emplace_back(length, 1.0); dist_mean = length; return; } weight* points; if (strcmp(dist, "w1") == 0) { points = w1; } else if (strcmp(dist, "w2") == 0) { points = w2; } else if (strcmp(dist, "w3") == 0) { points = w3; } else if (strcmp(dist, "w4") == 0) { points = w4; } else if (strcmp(dist, "w5") == 0) { points = w5; } else if (strcmp(dist, "starve") == 0) { points = starve; } else { fprintf(stderr, "Invalid workload %s; must be w1, " "w2, w3, w4, w5, starve, or a number\n", dist); abort(); } /* Add up all the weights in the distribution. */ double total_weight = 0.0; for (weight *p = points; p->length > 0; p++) { total_weight += p->freq; } /* Convert from weights to cumulative fracions, and reduce the set * of points according to min_bucket_frac and max_size_ratio. */ double cur_frac = 0.0; dist_points.emplace_back(0, 0.0); for (weight *p = points; ; p++) { if (p->length == 0) { dist_points.back().fraction = 1.0; break; } if (p->length >= max_length) { dist_points.emplace_back(max_length, 1.0); break; } cur_frac += p->freq/total_weight; if (cur_frac >= 1.0) { dist_points.emplace_back(p->length, 1.0); break; } if ((cur_frac - dist_points.back().fraction >= min_bucket_frac) || (max_size_ratio*dist_points.back().length < p[1].length)) { dist_points.emplace_back(p->length, cur_frac); } } // Compute the mean value. double prev_fraction = 0.0; dist_mean = 0.0; for (cdf_point &point: dist_points) { dist_mean += point.length * (point.fraction - prev_fraction); prev_fraction = point.fraction; } return; } /** * operator() - Generate a value sampled randomly from this workload * distribution. * @rand_gen: Random number generator to use in generating samples. * * Return: A randomly sampled value. */ int dist_point_gen::operator()(std::mt19937 &rand_gen) { double cdf_fraction = uniform_dist(rand_gen); for (cdf_point &point: dist_points) { if (point.fraction >= cdf_fraction) return point.length; } fprintf(stderr, "ERROR: dist_point_gen::operator() failed to return" "a value\n"); abort(); } /** * dist_msg_overhead() - Returns the total number of overhead bytes * sent on the wire for a Homa message of a given size. The overhead * includes packet headers, preambles, interpacket gaps, and control * packets (such as grants) that are required in the normal case. * @length: Number of bytes in the message payload. * @mtu: Maximum size of an Ethernet payload. * * Return: Total overhead bytes for a message of the given length. */ int dist_point_gen::dist_msg_overhead(int length, int mtu) { int packet_data, packets, grants, common; /* Sizes of various sources of overhead. */ int preamble = 8; int ether = 18; int ip = 20; int homa_data = 48; int crc_gap = 16; int homa_grant = 33; int unsched = 70000; int grant_increment = 10000; packet_data = mtu - (ip + homa_data); packets = (length + packet_data - 1)/packet_data; if (length <= unsched) grants = 0; else grants = (length - unsched + grant_increment - 1) /grant_increment; common = preamble + ether + ip + crc_gap; return packets*(common + homa_data) + grants*(common + homa_grant); } /** * dist_overhead() - Returns the average number of overhead bytes sent * on the wire (everything that consumes link bandwidth except actual * message bytes, including packet headers, preambles, interpacket gaps, * etc.) per byte of actual message data. * @mtu: Maximum size of an Ethernet payload. */ double dist_point_gen::dist_overhead(int mtu) const { double avg_bytes, avg_overhead, prev_fraction; avg_bytes = 0.0; avg_overhead = 0.0; prev_fraction = 0.0; for (const cdf_point &point: dist_points) { avg_overhead += dist_msg_overhead(point.length, mtu) * (point.fraction - prev_fraction); avg_bytes += point.length * (point.fraction - prev_fraction); prev_fraction = point.fraction; } return avg_overhead/avg_bytes; } /** * sizes() - Returns a vector containing the value of every point in * this distribution. */ std::vector dist_point_gen::values() const { std::vector output; output.reserve(dist_points.size()); for (const cdf_point &point: dist_points) output.push_back(point.length); return output; } /** * CDF_fractions() - Returns a vector containing the cdf fraction of * every point in this distribution. */ std::vector dist_point_gen::cdf_fractions() const { std::vector output; output.reserve(dist_points.size()); for (const cdf_point &point: dist_points) { output.push_back(point.fraction); } return output; } /* * The following arrays store distributions for Workloads 1-5 from the Homa * SIGCOMM paper. The first number is a message length and the second * number indicates the relative frequency of messages of that length. * The end of each array is indicated by an entry with 0 for both length * and frequency. */ dist_point_gen::weight dist_point_gen::w1[] = { {8, 0.310940000000}, {9, 0.008370000000}, {10, 0.008370000000}, {11, 0.089890000000}, {12, 0.000920000000}, {13, 0.003260000000}, {14, 0.019800000000}, {15, 0.028450000000}, {16, 0.004821816501}, {17, 0.002484918415}, {18, 0.001291711243}, {19, 0.002685645864}, {20, 0.002827010816}, {21, 0.001468449928}, {22, 0.003050723947}, {23, 0.001583869550}, {24, 0.003288789983}, {25, 0.001706550780}, {26, 0.001749082128}, {27, 0.003629060233}, {28, 0.001881634149}, {29, 0.001927475692}, {30, 0.001974145968}, {31, 0.002021643341}, {32, 0.002069965005}, {33, 0.002119106921}, {34, 0.002169063740}, {35, 0.002219828741}, {36, 0.002271393751}, {37, 0.002323749077}, {38, 0.002376883429}, {39, 0.002430783843}, {40, 0.002485435607}, {41, 0.002540822183}, {43, 0.002596925133}, {44, 0.002653724034}, {45, 0.002711196410}, {47, 0.002769317651}, {48, 0.002828060938}, {50, 0.002887397171}, {51, 0.002947294894}, {53, 0.003007720229}, {54, 0.003068636805}, {56, 0.003130005695}, {57, 0.003191785357}, {59, 0.003253931574}, {61, 0.003316397409}, {63, 0.003379133150}, {65, 0.003442086278}, {67, 0.003505201429}, {69, 0.003568420369}, {71, 0.003631681974}, {73, 0.003694922225}, {75, 0.003758074203}, {77, 0.003821068101}, {79, 0.003883831248}, {82, 0.003946288134}, {84, 0.004008360462}, {87, 0.004069967204}, {89, 0.004131024667}, {92, 0.004191446588}, {95, 0.004251144227}, {97, 0.004310026486}, {100, 0.004368000042}, {103, 0.004424969496}, {106, 0.004480837536}, {110, 0.004535505123}, {113, 0.004588871689}, {116, 0.004640835359}, {120, 0.004691293183}, {123, 0.004740141390}, {127, 0.004787275662}, {131, 0.004832591420}, {135, 0.004875984129}, {139, 0.004917349617}, {143, 0.004956584415}, {147, 0.004993586106}, {151, 0.005028253686}, {156, 0.005060487945}, {161, 0.005090191849}, {165, 0.005117270938}, {170, 0.005141633727}, {175, 0.005163192116}, {181, 0.005181861801}, {186, 0.005197562684}, {191, 0.005210219288}, {197, 0.005219761159}, {203, 0.005226123274}, {209, 0.005229246424}, {215, 0.005229077603}, {222, 0.005225570363}, {228, 0.005218685169}, {235, 0.005208389722}, {242, 0.005194659263}, {249, 0.005177476851}, {257, 0.005156833607}, {264, 0.005132728935}, {272, 0.005105170705}, {280, 0.005074175391}, {289, 0.005039768190}, {297, 0.005001983077}, {306, 0.004960862840}, {315, 0.004916459054}, {324, 0.004868832023}, {334, 0.004818050669}, {344, 0.004764192379}, {354, 0.004707342807}, {365, 0.004647595628}, {376, 0.004585052250}, {387, 0.004519821483}, {398, 0.004452019166}, {410, 0.004381767752}, {422, 0.004309195861}, {435, 0.004234437789}, {448, 0.004157632998}, {461, 0.004078925568}, {475, 0.003998463624}, {489, 0.003916398747}, {503, 0.003832885366}, {518, 0.003748080136}, {534, 0.003662141307}, {549, 0.003575228088}, {566, 0.003487500016}, {582, 0.003399116324}, {600, 0.003310235316}, {618, 0.003221013766}, {636, 0.003131606319}, {655, 0.003042164922}, {674, 0.002952838282}, {694, 0.002863771339}, {715, 0.002775104785}, {736, 0.002686974608}, {758, 0.002599511671}, {780, 0.002512841334}, {804, 0.002427083112}, {827, 0.002342350376}, {852, 0.002258750093}, {877, 0.002176382614}, {903, 0.002095341495}, {930, 0.002015713370}, {958, 0.001937577859}, {986, 0.001861007519}, {1015, 0.001786067833}, {1046, 0.001712817241}, {1077, 0.001641307199}, {1108, 0.001571582281}, {1141, 0.001503680307}, {1175, 0.001437632500}, {1210, 0.001373463675}, {1246, 0.001311192449}, {1283, 0.001250831469}, {1321, 0.001192387668}, {1360, 0.001135862530}, {1401, 0.001081252371}, {1442, 0.001028548629}, {1485, 0.000977738166}, {1529, 0.000928803576}, {1574, 0.000881723491}, {1621, 0.000836472893}, {1669, 0.000793023425}, {1719, 0.000751343699}, {1770, 0.000711399598}, {1822, 0.000673154572}, {1876, 0.000636569930}, {1932, 0.000601605117}, {1989, 0.000568217987}, {2048, 0.000536365060}, {2109, 0.000506001772}, {2172, 0.000477082709}, {2236, 0.000449561826}, {2303, 0.000423392663}, {2371, 0.000398528532}, {2441, 0.000374922704}, {2514, 0.000352528575}, {2588, 0.000331299820}, {2665, 0.000311190536}, {2744, 0.000292155366}, {2826, 0.000274149618}, {2909, 0.000257129365}, {2996, 0.000241051539}, {3085, 0.000225874007}, {3176, 0.000211555641}, {3270, 0.000198056378}, {3367, 0.000185337267}, {3467, 0.000173360508}, {3570, 0.000162089486}, {3676, 0.000151488792}, {3785, 0.000141524239}, {3897, 0.000132162872}, {4013, 0.000123372971}, {4132, 0.000115124051}, {4255, 0.000107386849}, {4381, 0.000100133318}, {4511, 0.000093336608}, {4645, 0.000086971047}, {4782, 0.000081012119}, {4924, 0.000075436439}, {5070, 0.000070221726}, {5221, 0.000065346770}, {5376, 0.000060791409}, {5535, 0.000056536487}, {5699, 0.000052563830}, {5868, 0.000048856206}, {6043, 0.000045397293}, {6222, 0.000042171645}, {6406, 0.000039164656}, {6596, 0.000036362528}, {6792, 0.000033752235}, {6994, 0.000031321487}, {7201, 0.000029058702}, {7415, 0.000026952970}, {7635, 0.000024994023}, {7861, 0.000023172201}, {8094, 0.000021478424}, {8334, 0.000019904163}, {8582, 0.000018441411}, {8836, 0.000017082656}, {9098, 0.000015820851}, {9368, 0.000014649396}, {9646, 0.000013562106}, {9932, 0.000012553193}, {10227, 0.000011617240}, {10530, 0.000010749182}, {10843, 0.000009944284}, {11164, 0.000009198123}, {11496, 0.000008506567}, {11837, 0.000007865760}, {12188, 0.000007272104}, {12549, 0.000006722244}, {12922, 0.000006213052}, {13305, 0.000005741612}, {13700, 0.000005305209}, {14106, 0.000004901314}, {14524, 0.000004527574}, {14955, 0.000004181797}, {15399, 0.000003861946}, {15856, 0.000003566127}, {16326, 0.000003292579}, {16810, 0.000003039665}, {17309, 0.000002805865}, {17822, 0.000002589766}, {18351, 0.000002390057}, {18896, 0.000002205522}, {19456, 0.000002035030}, {20033, 0.000001877535}, {20627, 0.000001732064}, {21239, 0.000001597717}, {21869, 0.000001473659}, {22518, 0.000001359114}, {23186, 0.000001253366}, {23874, 0.000001155751}, {24582, 0.000001065652}, {25311, 0.000000982501}, {26062, 0.000000905769}, {26835, 0.000000834968}, {27631, 0.000000769645}, {28451, 0.000000709384}, {29295, 0.000000653796}, {30164, 0.000000602525}, {31059, 0.000000555239}, {31980, 0.000000511631}, {32929, 0.000000471420}, {33905, 0.000000434344}, {34911, 0.000000400160}, {35947, 0.000000368646}, {37013, 0.000000339596}, {38111, 0.000000312819}, {39242, 0.000000288138}, {40406, 0.000000265391}, {41604, 0.000000244428}, {42838, 0.000000225110}, {44109, 0.000000207309}, {45418, 0.000000190908}, {46765, 0.000000175797}, {48152, 0.000000161875}, {49580, 0.000000149049}, {51051, 0.000000137234}, {52565, 0.000000126351}, {54125, 0.000000116326}, {55730, 0.000000107093}, {57383, 0.000000098590}, {59086, 0.000000090758}, {60838, 0.000000083546}, {62643, 0.000000076904}, {64501, 0.000000070788}, {66415, 0.000000065157}, {68385, 0.000000059971}, {70413, 0.000000055197}, {72502, 0.000000050802}, {74653, 0.000000046755}, {76867, 0.000000043029}, {79147, 0.000000039599}, {81495, 0.000000036442}, {83912, 0.000000033536}, {86401, 0.000000030860}, {88964, 0.000000028398}, {91603, 0.000000026131}, {94321, 0.000000024045}, {97119, 0.000000022125}, {100000, 0.000000254317}, {0, 0}, }; dist_point_gen::weight dist_point_gen::w2[] = { {8, 0.170107627909}, {32, 0.018900847545}, {34, 0.013742745280}, {36, 0.013742745280}, {38, 0.013742745280}, {40, 0.013742745280}, {43, 0.013742745280}, {46, 0.013742745280}, {49, 0.013742745280}, {53, 0.013742745280}, {58, 0.013742745280}, {64, 0.013742745280}, {67, 0.001526724534}, {71, 0.001526724534}, {75, 0.001526724534}, {80, 0.001526724534}, {85, 0.001526724534}, {91, 0.001526724534}, {98, 0.001526724534}, {107, 0.001526724534}, {116, 0.001526724534}, {128, 0.001526724534}, {135, 0.012213636704}, {142, 0.012213636704}, {151, 0.012213636704}, {160, 0.012213636704}, {171, 0.012213636704}, {183, 0.012213636704}, {197, 0.012213636704}, {213, 0.012213636704}, {233, 0.012213636704}, {256, 0.012213636704}, {269, 0.044656107936}, {284, 0.044656107936}, {301, 0.044656107936}, {320, 0.044656107936}, {341, 0.044656107936}, {366, 0.044656107936}, {394, 0.044656107936}, {427, 0.044656107936}, {465, 0.044656107936}, {512, 0.044656107936}, {539, 0.004770951652}, {569, 0.004770951652}, {602, 0.004770951652}, {640, 0.004770951652}, {683, 0.004770951652}, {731, 0.004770951652}, {788, 0.004770951652}, {853, 0.004770951652}, {931, 0.004770951652}, {1024, 0.004770951652}, {1078, 0.002290057626}, {1138, 0.002290057626}, {1205, 0.002290057626}, {1280, 0.002290057626}, {1365, 0.002290057626}, {1463, 0.002290057626}, {1575, 0.002290057626}, {1707, 0.002290057626}, {1862, 0.002290057626}, {2048, 0.002290057626}, {2156, 0.001431284900}, {2276, 0.001431284900}, {2409, 0.001431284900}, {2560, 0.001431284900}, {2731, 0.001431284900}, {2926, 0.001431284900}, {3151, 0.001431284900}, {3413, 0.001431284900}, {3724, 0.001431284900}, {4096, 0.001431284900}, {4312, 0.000310112125}, {4551, 0.000310112125}, {4819, 0.000310112125}, {5120, 0.000310112125}, {5461, 0.000310112125}, {5851, 0.000310112125}, {6302, 0.000310112125}, {6827, 0.000310112125}, {7447, 0.000310112125}, {8192, 0.000310112125}, {8623, 0.000047709472}, {9102, 0.000047709472}, {9638, 0.000047709472}, {10240, 0.000047709472}, {10923, 0.000047709472}, {11703, 0.000047709472}, {12603, 0.000047709472}, {13653, 0.000047709472}, {14895, 0.000047709472}, {16384, 0.000047709472}, {17246, 0.000023854736}, {18204, 0.000023854736}, {19275, 0.000023854736}, {20480, 0.000023854736}, {21845, 0.000023854736}, {23406, 0.000023854736}, {25206, 0.000023854736}, {27307, 0.000023854736}, {29789, 0.000023854736}, {32768, 0.000023854736}, {34493, 0.000020872917}, {36409, 0.000020872917}, {38551, 0.000020872917}, {40960, 0.000020872917}, {43691, 0.000020872917}, {46811, 0.000020872917}, {50412, 0.000020872917}, {54613, 0.000020872917}, {59578, 0.000020872917}, {65536, 0.000020872917}, {68985, 0.000052182293}, {72818, 0.000052182293}, {77101, 0.000052182293}, {81920, 0.000052182293}, {87381, 0.000052182293}, {93623, 0.000052182293}, {100825, 0.000052182293}, {109227, 0.000052182293}, {119156, 0.000052182293}, {131072, 0.000052182293}, {137971, 0.000010436459}, {145636, 0.000010436459}, {154202, 0.000010436459}, {163840, 0.000010436459}, {174763, 0.000010436459}, {187246, 0.000010436459}, {201649, 0.000010436459}, {218453, 0.000010436459}, {238313, 0.000010436459}, {262144, 0.000010436459}, {275941, 0.000000745466}, {291271, 0.000000745466}, {308405, 0.000000745466}, {327680, 0.000000745466}, {349525, 0.000000745466}, {374491, 0.000000745466}, {403298, 0.000000745466}, {436907, 0.000000745466}, {476625, 0.000000745466}, {524288, 0.000000745466}, {573085, 0.000001730354}, {631896, 0.000001730354}, {704160, 0.000001730354}, {795085, 0.000001730354}, {912974, 0.000001730354}, {1071908, 0.000001730354}, {1297841, 0.000001730354}, {1644453, 0.000001730354}, {2243665, 0.000001730354}, {3529904, 0.000001730354}, {0, 0}, }; dist_point_gen::weight dist_point_gen::w3[] = { {8, 0.064882623003}, {32, 0.032441311501}, {36, 0.011589360408}, {40, 0.011589360408}, {46, 0.011589360408}, {53, 0.011589360408}, {64, 0.011589360408}, {70, 0.032717067661}, {77, 0.032717067661}, {85, 0.032717067661}, {96, 0.032717067661}, {110, 0.032717067661}, {128, 0.032717067661}, {137, 0.018290952605}, {146, 0.018290952605}, {158, 0.018290952605}, {171, 0.018290952605}, {186, 0.018290952605}, {205, 0.018290952605}, {228, 0.018290952605}, {256, 0.018290952605}, {268, 0.026092771524}, {282, 0.026092771524}, {296, 0.026092771524}, {313, 0.026092771524}, {331, 0.026092771524}, {352, 0.026092771524}, {375, 0.026092771524}, {402, 0.026092771524}, {433, 0.026092771524}, {469, 0.026092771524}, {512, 0.026092771524}, {531, 0.005591308448}, {551, 0.005591308448}, {573, 0.005591308448}, {597, 0.005591308448}, {623, 0.005591308448}, {652, 0.005591308448}, {683, 0.005591308448}, {717, 0.005591308448}, {755, 0.005591308448}, {796, 0.005591308448}, {843, 0.005591308448}, {896, 0.005591308448}, {956, 0.005591308448}, {1024, 0.005591308448}, {1053, 0.002536797540}, {1084, 0.002536797540}, {1117, 0.002536797540}, {1152, 0.002536797540}, {1189, 0.002536797540}, {1229, 0.002536797540}, {1271, 0.002536797540}, {1317, 0.002536797540}, {1365, 0.002536797540}, {1418, 0.002536797540}, {1475, 0.002536797540}, {1536, 0.002536797540}, {1603, 0.002536797540}, {1676, 0.002536797540}, {1755, 0.002536797540}, {1843, 0.002536797540}, {1940, 0.002536797540}, {2048, 0.002536797540}, {2092, 0.001087196886}, {2137, 0.001087196886}, {2185, 0.001087196886}, {2234, 0.001087196886}, {2286, 0.001087196886}, {2341, 0.001087196886}, {2398, 0.001087196886}, {2458, 0.001087196886}, {2521, 0.001087196886}, {2587, 0.001087196886}, {2657, 0.001087196886}, {2731, 0.001087196886}, {2809, 0.001087196886}, {2891, 0.001087196886}, {2979, 0.001087196886}, {3072, 0.001087196886}, {3171, 0.001087196886}, {3277, 0.001087196886}, {3390, 0.001087196886}, {3511, 0.001087196886}, {3641, 0.001087196886}, {3781, 0.001087196886}, {3932, 0.001087196886}, {4096, 0.001087196886}, {4163, 0.000946916618}, {4233, 0.000946916618}, {4304, 0.000946916618}, {4378, 0.000946916618}, {4455, 0.000946916618}, {4535, 0.000946916618}, {4617, 0.000946916618}, {4703, 0.000946916618}, {4792, 0.000946916618}, {4884, 0.000946916618}, {4979, 0.000946916618}, {5079, 0.000946916618}, {5183, 0.000946916618}, {5291, 0.000946916618}, {5403, 0.000946916618}, {5521, 0.000946916618}, {5643, 0.000946916618}, {5772, 0.000946916618}, {5906, 0.000946916618}, {6046, 0.000946916618}, {6194, 0.000946916618}, {6349, 0.000946916618}, {6512, 0.000946916618}, {6683, 0.000946916618}, {6864, 0.000946916618}, {7054, 0.000946916618}, {7256, 0.000946916618}, {7469, 0.000946916618}, {7696, 0.000946916618}, {7936, 0.000946916618}, {8192, 0.000946916618}, {8293, 0.000497194551}, {8397, 0.000497194551}, {8503, 0.000497194551}, {8612, 0.000497194551}, {8724, 0.000497194551}, {8839, 0.000497194551}, {8957, 0.000497194551}, {9078, 0.000497194551}, {9202, 0.000497194551}, {9330, 0.000497194551}, {9461, 0.000497194551}, {9596, 0.000497194551}, {9735, 0.000497194551}, {9879, 0.000497194551}, {10026, 0.000497194551}, {10178, 0.000497194551}, {10335, 0.000497194551}, {10496, 0.000497194551}, {10663, 0.000497194551}, {10835, 0.000497194551}, {11012, 0.000497194551}, {11196, 0.000497194551}, {11385, 0.000497194551}, {11582, 0.000497194551}, {11785, 0.000497194551}, {11995, 0.000497194551}, {12214, 0.000497194551}, {12440, 0.000497194551}, {12674, 0.000497194551}, {12918, 0.000497194551}, {13171, 0.000497194551}, {13435, 0.000497194551}, {13709, 0.000497194551}, {13995, 0.000497194551}, {14292, 0.000497194551}, {14603, 0.000497194551}, {14928, 0.000497194551}, {15267, 0.000497194551}, {15622, 0.000497194551}, {15994, 0.000497194551}, {16384, 0.000497194551}, {16540, 0.000107694235}, {16699, 0.000107694235}, {16861, 0.000107694235}, {17027, 0.000107694235}, {17195, 0.000107694235}, {17367, 0.000107694235}, {17542, 0.000107694235}, {17721, 0.000107694235}, {17904, 0.000107694235}, {18091, 0.000107694235}, {18281, 0.000107694235}, {18476, 0.000107694235}, {18674, 0.000107694235}, {18877, 0.000107694235}, {19085, 0.000107694235}, {19297, 0.000107694235}, {19514, 0.000107694235}, {19735, 0.000107694235}, {19962, 0.000107694235}, {20194, 0.000107694235}, {20432, 0.000107694235}, {20675, 0.000107694235}, {20924, 0.000107694235}, {21179, 0.000107694235}, {21441, 0.000107694235}, {21709, 0.000107694235}, {21984, 0.000107694235}, {22265, 0.000107694235}, {22555, 0.000107694235}, {22851, 0.000107694235}, {23156, 0.000107694235}, {23469, 0.000107694235}, {23790, 0.000107694235}, {24121, 0.000107694235}, {24461, 0.000107694235}, {24810, 0.000107694235}, {25170, 0.000107694235}, {25540, 0.000107694235}, {25921, 0.000107694235}, {26314, 0.000107694235}, {26719, 0.000107694235}, {27136, 0.000107694235}, {27567, 0.000107694235}, {28011, 0.000107694235}, {28471, 0.000107694235}, {28945, 0.000107694235}, {29436, 0.000107694235}, {29943, 0.000107694235}, {30468, 0.000107694235}, {31013, 0.000107694235}, {31576, 0.000107694235}, {32161, 0.000107694235}, {32768, 0.000107694235}, {33007, 0.000041360737}, {33250, 0.000041360737}, {33496, 0.000041360737}, {33746, 0.000041360737}, {34000, 0.000041360737}, {34257, 0.000041360737}, {34519, 0.000041360737}, {34784, 0.000041360737}, {35054, 0.000041360737}, {35328, 0.000041360737}, {35606, 0.000041360737}, {35889, 0.000041360737}, {36176, 0.000041360737}, {36468, 0.000041360737}, {36764, 0.000041360737}, {37065, 0.000041360737}, {37372, 0.000041360737}, {37683, 0.000041360737}, {38000, 0.000041360737}, {38322, 0.000041360737}, {38649, 0.000041360737}, {38983, 0.000041360737}, {39322, 0.000041360737}, {39667, 0.000041360737}, {40018, 0.000041360737}, {40375, 0.000041360737}, {40739, 0.000041360737}, {41109, 0.000041360737}, {41486, 0.000041360737}, {41870, 0.000041360737}, {42262, 0.000041360737}, {42660, 0.000041360737}, {43067, 0.000041360737}, {43481, 0.000041360737}, {43903, 0.000041360737}, {44333, 0.000041360737}, {44772, 0.000041360737}, {45220, 0.000041360737}, {45677, 0.000041360737}, {46143, 0.000041360737}, {46618, 0.000041360737}, {47104, 0.000041360737}, {47600, 0.000041360737}, {48106, 0.000041360737}, {48623, 0.000041360737}, {49152, 0.000041360737}, {49692, 0.000041360737}, {50244, 0.000041360737}, {50809, 0.000041360737}, {51386, 0.000041360737}, {51977, 0.000041360737}, {52581, 0.000041360737}, {53200, 0.000041360737}, {53833, 0.000041360737}, {54482, 0.000041360737}, {55146, 0.000041360737}, {55827, 0.000041360737}, {56525, 0.000041360737}, {57240, 0.000041360737}, {57974, 0.000041360737}, {58727, 0.000041360737}, {59500, 0.000041360737}, {60293, 0.000041360737}, {61108, 0.000041360737}, {61945, 0.000041360737}, {62805, 0.000041360737}, {63690, 0.000041360737}, {64600, 0.000041360737}, {65536, 0.000041360737}, {65902, 0.000043034963}, {66272, 0.000043034963}, {66647, 0.000043034963}, {67025, 0.000043034963}, {67408, 0.000043034963}, {67796, 0.000043034963}, {68188, 0.000043034963}, {68584, 0.000043034963}, {68985, 0.000043034963}, {69391, 0.000043034963}, {69802, 0.000043034963}, {70217, 0.000043034963}, {70638, 0.000043034963}, {71063, 0.000043034963}, {71494, 0.000043034963}, {71930, 0.000043034963}, {72371, 0.000043034963}, {72818, 0.000043034963}, {73270, 0.000043034963}, {73728, 0.000043034963}, {74192, 0.000043034963}, {74661, 0.000043034963}, {75137, 0.000043034963}, {75618, 0.000043034963}, {76106, 0.000043034963}, {76601, 0.000043034963}, {77101, 0.000043034963}, {77608, 0.000043034963}, {78122, 0.000043034963}, {78643, 0.000043034963}, {79171, 0.000043034963}, {79706, 0.000043034963}, {80248, 0.000043034963}, {80798, 0.000043034963}, {81355, 0.000043034963}, {81920, 0.000043034963}, {82493, 0.000043034963}, {83074, 0.000043034963}, {83663, 0.000043034963}, {84261, 0.000043034963}, {84867, 0.000043034963}, {85482, 0.000043034963}, {86106, 0.000043034963}, {86739, 0.000043034963}, {87381, 0.000043034963}, {88033, 0.000043034963}, {88695, 0.000043034963}, {89367, 0.000043034963}, {90049, 0.000043034963}, {90742, 0.000043034963}, {91446, 0.000043034963}, {92160, 0.000043034963}, {92886, 0.000043034963}, {93623, 0.000043034963}, {94372, 0.000043034963}, {95133, 0.000043034963}, {95906, 0.000043034963}, {96692, 0.000043034963}, {97492, 0.000043034963}, {98304, 0.000043034963}, {99130, 0.000043034963}, {99970, 0.000043034963}, {100825, 0.000043034963}, {101694, 0.000043034963}, {102578, 0.000043034963}, {103478, 0.000043034963}, {104394, 0.000043034963}, {105326, 0.000043034963}, {106275, 0.000043034963}, {107241, 0.000043034963}, {108225, 0.000043034963}, {109227, 0.000043034963}, {110247, 0.000043034963}, {111288, 0.000043034963}, {112347, 0.000043034963}, {113428, 0.000043034963}, {114529, 0.000043034963}, {115652, 0.000043034963}, {116797, 0.000043034963}, {117965, 0.000043034963}, {119156, 0.000043034963}, {120372, 0.000043034963}, {121613, 0.000043034963}, {122880, 0.000043034963}, {124173, 0.000043034963}, {125494, 0.000043034963}, {126844, 0.000043034963}, {128223, 0.000043034963}, {129632, 0.000043034963}, {131072, 0.000043034963}, {131630, 0.000011222285}, {132192, 0.000011222285}, {132760, 0.000011222285}, {133332, 0.000011222285}, {133909, 0.000011222285}, {134491, 0.000011222285}, {135079, 0.000011222285}, {135671, 0.000011222285}, {136269, 0.000011222285}, {136872, 0.000011222285}, {137480, 0.000011222285}, {138094, 0.000011222285}, {138713, 0.000011222285}, {139338, 0.000011222285}, {139968, 0.000011222285}, {140605, 0.000011222285}, {141247, 0.000011222285}, {141894, 0.000011222285}, {142548, 0.000011222285}, {143208, 0.000011222285}, {143874, 0.000011222285}, {144547, 0.000011222285}, {145225, 0.000011222285}, {145910, 0.000011222285}, {146602, 0.000011222285}, {147300, 0.000011222285}, {148005, 0.000011222285}, {148716, 0.000011222285}, {149435, 0.000011222285}, {150160, 0.000011222285}, {150893, 0.000011222285}, {151632, 0.000011222285}, {152379, 0.000011222285}, {153134, 0.000011222285}, {153895, 0.000011222285}, {154665, 0.000011222285}, {155442, 0.000011222285}, {156227, 0.000011222285}, {157020, 0.000011222285}, {157821, 0.000011222285}, {158631, 0.000011222285}, {159448, 0.000011222285}, {160275, 0.000011222285}, {161109, 0.000011222285}, {161953, 0.000011222285}, {162805, 0.000011222285}, {163667, 0.000011222285}, {164537, 0.000011222285}, {165417, 0.000011222285}, {166306, 0.000011222285}, {167205, 0.000011222285}, {168114, 0.000011222285}, {169033, 0.000011222285}, {169961, 0.000011222285}, {170901, 0.000011222285}, {171850, 0.000011222285}, {172810, 0.000011222285}, {173781, 0.000011222285}, {174763, 0.000011222285}, {175756, 0.000011222285}, {176760, 0.000011222285}, {177776, 0.000011222285}, {178803, 0.000011222285}, {179843, 0.000011222285}, {180895, 0.000011222285}, {181959, 0.000011222285}, {183035, 0.000011222285}, {184125, 0.000011222285}, {185227, 0.000011222285}, {186343, 0.000011222285}, {187473, 0.000011222285}, {188616, 0.000011222285}, {189773, 0.000011222285}, {190944, 0.000011222285}, {192130, 0.000011222285}, {193331, 0.000011222285}, {194547, 0.000011222285}, {195778, 0.000011222285}, {197025, 0.000011222285}, {198288, 0.000011222285}, {199568, 0.000011222285}, {200864, 0.000011222285}, {202176, 0.000011222285}, {203507, 0.000011222285}, {204854, 0.000011222285}, {206220, 0.000011222285}, {207604, 0.000011222285}, {209007, 0.000011222285}, {210429, 0.000011222285}, {211870, 0.000011222285}, {213331, 0.000011222285}, {214812, 0.000011222285}, {216315, 0.000011222285}, {217838, 0.000011222285}, {219383, 0.000011222285}, {220950, 0.000011222285}, {222540, 0.000011222285}, {224152, 0.000011222285}, {225788, 0.000011222285}, {227448, 0.000011222285}, {229133, 0.000011222285}, {230843, 0.000011222285}, {232579, 0.000011222285}, {234341, 0.000011222285}, {236130, 0.000011222285}, {237946, 0.000011222285}, {239791, 0.000011222285}, {241664, 0.000011222285}, {243567, 0.000011222285}, {245500, 0.000011222285}, {247464, 0.000011222285}, {249460, 0.000011222285}, {251488, 0.000011222285}, {253549, 0.000011222285}, {255645, 0.000011222285}, {257775, 0.000011222285}, {259941, 0.000011222285}, {262144, 0.000011222285}, {263003, 0.000006830897}, {263869, 0.000006830897}, {264739, 0.000006830897}, {265616, 0.000006830897}, {266499, 0.000006830897}, {267387, 0.000006830897}, {268281, 0.000006830897}, {269181, 0.000006830897}, {270088, 0.000006830897}, {271000, 0.000006830897}, {271919, 0.000006830897}, {272844, 0.000006830897}, {273775, 0.000006830897}, {274713, 0.000006830897}, {275657, 0.000006830897}, {276607, 0.000006830897}, {277564, 0.000006830897}, {278528, 0.000006830897}, {279498, 0.000006830897}, {280476, 0.000006830897}, {281460, 0.000006830897}, {282451, 0.000006830897}, {283449, 0.000006830897}, {284454, 0.000006830897}, {285466, 0.000006830897}, {286486, 0.000006830897}, {287513, 0.000006830897}, {288547, 0.000006830897}, {289589, 0.000006830897}, {290638, 0.000006830897}, {291695, 0.000006830897}, {292759, 0.000006830897}, {293832, 0.000006830897}, {294912, 0.000006830897}, {296000, 0.000006830897}, {297097, 0.000006830897}, {298201, 0.000006830897}, {299314, 0.000006830897}, {300435, 0.000006830897}, {301564, 0.000006830897}, {302702, 0.000006830897}, {303849, 0.000006830897}, {305004, 0.000006830897}, {306168, 0.000006830897}, {307341, 0.000006830897}, {308523, 0.000006830897}, {309715, 0.000006830897}, {310915, 0.000006830897}, {312125, 0.000006830897}, {313344, 0.000006830897}, {314573, 0.000006830897}, {315811, 0.000006830897}, {317060, 0.000006830897}, {318318, 0.000006830897}, {319586, 0.000006830897}, {320864, 0.000006830897}, {322153, 0.000006830897}, {323452, 0.000006830897}, {324761, 0.000006830897}, {326082, 0.000006830897}, {327413, 0.000006830897}, {328754, 0.000006830897}, {330107, 0.000006830897}, {331471, 0.000006830897}, {332847, 0.000006830897}, {334234, 0.000006830897}, {335632, 0.000006830897}, {337042, 0.000006830897}, {338464, 0.000006830897}, {339899, 0.000006830897}, {341345, 0.000006830897}, {342804, 0.000006830897}, {344275, 0.000006830897}, {345759, 0.000006830897}, {347256, 0.000006830897}, {348765, 0.000006830897}, {350288, 0.000006830897}, {351825, 0.000006830897}, {353375, 0.000006830897}, {354938, 0.000006830897}, {356516, 0.000006830897}, {358107, 0.000006830897}, {359713, 0.000006830897}, {361334, 0.000006830897}, {362969, 0.000006830897}, {364618, 0.000006830897}, {366283, 0.000006830897}, {367964, 0.000006830897}, {369659, 0.000006830897}, {371371, 0.000006830897}, {373098, 0.000006830897}, {374841, 0.000006830897}, {376601, 0.000006830897}, {378378, 0.000006830897}, {380171, 0.000006830897}, {381981, 0.000006830897}, {383809, 0.000006830897}, {385654, 0.000006830897}, {387517, 0.000006830897}, {389398, 0.000006830897}, {391298, 0.000006830897}, {393216, 0.000006830897}, {395153, 0.000006830897}, {397109, 0.000006830897}, {399085, 0.000006830897}, {401080, 0.000006830897}, {403096, 0.000006830897}, {405132, 0.000006830897}, {407188, 0.000006830897}, {409266, 0.000006830897}, {411364, 0.000006830897}, {413485, 0.000006830897}, {415627, 0.000006830897}, {417792, 0.000006830897}, {419979, 0.000006830897}, {422190, 0.000006830897}, {424424, 0.000006830897}, {426681, 0.000006830897}, {428963, 0.000006830897}, {431269, 0.000006830897}, {433600, 0.000006830897}, {435957, 0.000006830897}, {438339, 0.000006830897}, {440748, 0.000006830897}, {443183, 0.000006830897}, {445645, 0.000006830897}, {448134, 0.000006830897}, {450652, 0.000006830897}, {453198, 0.000006830897}, {455773, 0.000006830897}, {458378, 0.000006830897}, {461012, 0.000006830897}, {463677, 0.000006830897}, {466372, 0.000006830897}, {469100, 0.000006830897}, {471859, 0.000006830897}, {474651, 0.000006830897}, {477477, 0.000006830897}, {480336, 0.000006830897}, {483229, 0.000006830897}, {486158, 0.000006830897}, {489122, 0.000006830897}, {492123, 0.000006830897}, {495161, 0.000006830897}, {498236, 0.000006830897}, {501350, 0.000006830897}, {504504, 0.000006830897}, {507697, 0.000006830897}, {510930, 0.000006830897}, {514206, 0.000006830897}, {517523, 0.000006830897}, {520884, 0.000006830897}, {524288, 0.000006830897}, {526844, 0.000002521458}, {529425, 0.000002521458}, {532031, 0.000002521458}, {534663, 0.000002521458}, {537322, 0.000002521458}, {540006, 0.000002521458}, {542718, 0.000002521458}, {545458, 0.000002521458}, {548225, 0.000002521458}, {551020, 0.000002521458}, {553844, 0.000002521458}, {556697, 0.000002521458}, {559579, 0.000002521458}, {562492, 0.000002521458}, {565435, 0.000002521458}, {568408, 0.000002521458}, {571414, 0.000002521458}, {574451, 0.000002521458}, {577521, 0.000002521458}, {580624, 0.000002521458}, {583760, 0.000002521458}, {586931, 0.000002521458}, {590136, 0.000002521458}, {593376, 0.000002521458}, {596652, 0.000002521458}, {599964, 0.000002521458}, {603313, 0.000002521458}, {606700, 0.000002521458}, {610125, 0.000002521458}, {613590, 0.000002521458}, {617093, 0.000002521458}, {620637, 0.000002521458}, {624222, 0.000002521458}, {627848, 0.000002521458}, {631517, 0.000002521458}, {635229, 0.000002521458}, {638985, 0.000002521458}, {642786, 0.000002521458}, {646632, 0.000002521458}, {650524, 0.000002521458}, {654463, 0.000002521458}, {658451, 0.000002521458}, {662487, 0.000002521458}, {666573, 0.000002521458}, {670710, 0.000002521458}, {674899, 0.000002521458}, {679140, 0.000002521458}, {683435, 0.000002521458}, {687784, 0.000002521458}, {692190, 0.000002521458}, {696652, 0.000002521458}, {701172, 0.000002521458}, {705750, 0.000002521458}, {710390, 0.000002521458}, {715090, 0.000002521458}, {719853, 0.000002521458}, {724680, 0.000002521458}, {729573, 0.000002521458}, {734531, 0.000002521458}, {739558, 0.000002521458}, {744654, 0.000002521458}, {749820, 0.000002521458}, {755059, 0.000002521458}, {760371, 0.000002521458}, {765759, 0.000002521458}, {771224, 0.000002521458}, {776767, 0.000002521458}, {782390, 0.000002521458}, {788096, 0.000002521458}, {793885, 0.000002521458}, {799760, 0.000002521458}, {805723, 0.000002521458}, {811775, 0.000002521458}, {817919, 0.000002521458}, {824156, 0.000002521458}, {830490, 0.000002521458}, {836921, 0.000002521458}, {843453, 0.000002521458}, {850088, 0.000002521458}, {856827, 0.000002521458}, {863675, 0.000002521458}, {870633, 0.000002521458}, {877704, 0.000002521458}, {884890, 0.000002521458}, {892196, 0.000002521458}, {899623, 0.000002521458}, {907174, 0.000002521458}, {914854, 0.000002521458}, {922664, 0.000002521458}, {930609, 0.000002521458}, {938693, 0.000002521458}, {946917, 0.000002521458}, {955288, 0.000002521458}, {963807, 0.000002521458}, {972480, 0.000002521458}, {981310, 0.000002521458}, {990302, 0.000002521458}, {999461, 0.000002521458}, {1008790, 0.000002521458}, {1018296, 0.000002521458}, {1027982, 0.000002521458}, {1037854, 0.000002521458}, {1047917, 0.000002521458}, {1058178, 0.000002521458}, {1068642, 0.000002521458}, {1079314, 0.000002521458}, {1090202, 0.000002521458}, {1101312, 0.000002521458}, {1112651, 0.000002521458}, {1124225, 0.000002521458}, {1136043, 0.000002521458}, {1148112, 0.000002521458}, {1160440, 0.000002521458}, {1173036, 0.000002521458}, {1185908, 0.000002521458}, {1199066, 0.000002521458}, {1212519, 0.000002521458}, {1226277, 0.000002521458}, {1240351, 0.000002521458}, {1254752, 0.000002521458}, {1269492, 0.000002521458}, {1284581, 0.000002521458}, {1300034, 0.000002521458}, {1315863, 0.000002521458}, {1332082, 0.000002521458}, {1348706, 0.000002521458}, {1365751, 0.000002521458}, {1383231, 0.000002521458}, {1401165, 0.000002521458}, {1419570, 0.000002521458}, {1438465, 0.000002521458}, {1457870, 0.000002521458}, {1477805, 0.000002521458}, {1498294, 0.000002521458}, {1519358, 0.000002521458}, {1541023, 0.000002521458}, {1563315, 0.000002521458}, {1586261, 0.000002521458}, {1609891, 0.000002521458}, {1634235, 0.000002521458}, {1659327, 0.000002521458}, {1685202, 0.000002521458}, {1711896, 0.000002521458}, {1739450, 0.000002521458}, {1767905, 0.000002521458}, {1797307, 0.000002521458}, {1827703, 0.000002521458}, {1859145, 0.000002521458}, {1891687, 0.000002521458}, {1925389, 0.000002521458}, {1960314, 0.000002521458}, {1996529, 0.000002521458}, {2034108, 0.000002521458}, {2073128, 0.000002521458}, {2113675, 0.000002521458}, {2155839, 0.000002521458}, {2199720, 0.000002521458}, {2245424, 0.000002521458}, {2293067, 0.000002521458}, {2342777, 0.000002521458}, {2394689, 0.000002521458}, {2448954, 0.000002521458}, {2505735, 0.000002521458}, {2565212, 0.000002521458}, {2627581, 0.000002521458}, {2693059, 0.000002521458}, {2761883, 0.000002521458}, {2834317, 0.000002521458}, {2910653, 0.000002521458}, {2991214, 0.000002521458}, {3076362, 0.000002521458}, {3166500, 0.000002521458}, {3262080, 0.000002521458}, {3363608, 0.000002521458}, {3471660, 0.000002521458}, {3586885, 0.000002521458}, {3710020, 0.000002521458}, {3841911, 0.000002521458}, {3983524, 0.000002521458}, {4135977, 0.000002521458}, {4300563, 0.000002521458}, {4478791, 0.000002521458}, {4672430, 0.000002521458}, {4883570, 0.000002521458}, {5114695, 0.000002521458}, {5368784, 0.000002521458}, {5649438, 0.000002521458}, {5961053, 0.000002521458}, {6309051, 0.000002521458}, {6700199, 0.000002521458}, {7143054, 0.000002521458}, {7648594, 0.000002521458}, {8231141, 0.000002521458}, {8909743, 0.000002521458}, {9710291, 0.000002521458}, {10668901, 0.000002521458}, {11837511, 0.000002521458}, {13293619, 0.000002521458}, {15158197, 0.000002521458}, {0, 0}, }; dist_point_gen::weight dist_point_gen::w4[] = { {53, 0.000740000000}, {56, 0.000740000000}, {60, 0.000740000000}, {64, 0.000740000000}, {68, 0.000740000000}, {72, 0.000740000000}, {77, 0.000740000000}, {81, 0.000740000000}, {87, 0.000740000000}, {92, 0.000740000000}, {100, 0.000750000000}, {109, 0.000750000000}, {119, 0.000750000000}, {130, 0.000750000000}, {141, 0.000750000000}, {154, 0.000750000000}, {168, 0.000750000000}, {183, 0.000750000000}, {199, 0.000750000000}, {217, 0.000750000000}, {222, 0.002600000000}, {227, 0.002600000000}, {232, 0.002600000000}, {237, 0.002600000000}, {243, 0.002600000000}, {248, 0.002600000000}, {254, 0.002600000000}, {259, 0.002600000000}, {265, 0.002600000000}, {271, 0.002600000000}, {274, 0.001110000000}, {277, 0.001110000000}, {279, 0.001110000000}, {282, 0.001110000000}, {285, 0.001110000000}, {288, 0.001110000000}, {291, 0.001110000000}, {294, 0.001110000000}, {297, 0.001110000000}, {300, 0.001110000000}, {303, 0.008550000000}, {305, 0.008550000000}, {308, 0.008550000000}, {310, 0.008550000000}, {313, 0.008550000000}, {315, 0.008550000000}, {318, 0.008550000000}, {321, 0.008550000000}, {323, 0.008550000000}, {326, 0.008550000000}, {331, 0.006510000000}, {335, 0.006510000000}, {340, 0.006510000000}, {345, 0.006510000000}, {350, 0.006510000000}, {355, 0.006510000000}, {360, 0.006510000000}, {365, 0.006510000000}, {371, 0.006510000000}, {376, 0.006510000000}, {381, 0.002040000000}, {385, 0.002040000000}, {390, 0.002040000000}, {395, 0.002040000000}, {400, 0.002040000000}, {405, 0.002040000000}, {410, 0.002040000000}, {415, 0.002040000000}, {420, 0.002040000000}, {425, 0.002040000000}, {430, 0.004090000000}, {435, 0.004090000000}, {441, 0.004090000000}, {446, 0.004090000000}, {452, 0.004090000000}, {457, 0.004090000000}, {463, 0.004090000000}, {468, 0.004090000000}, {474, 0.004090000000}, {480, 0.004090000000}, {491, 0.019520000000}, {502, 0.019520000000}, {513, 0.019520000000}, {525, 0.019520000000}, {537, 0.019520000000}, {549, 0.019520000000}, {561, 0.019520000000}, {574, 0.019520000000}, {587, 0.019520000000}, {600, 0.019520000000}, {607, 0.005760000000}, {615, 0.005760000000}, {623, 0.005760000000}, {630, 0.005760000000}, {638, 0.005760000000}, {646, 0.005760000000}, {654, 0.005760000000}, {662, 0.005760000000}, {671, 0.005760000000}, {679, 0.005760000000}, {685, 0.003530000000}, {690, 0.003530000000}, {696, 0.003530000000}, {702, 0.003530000000}, {707, 0.003530000000}, {713, 0.003530000000}, {719, 0.003530000000}, {725, 0.003530000000}, {731, 0.003530000000}, {737, 0.003530000000}, {743, 0.002420000000}, {749, 0.002420000000}, {755, 0.002420000000}, {762, 0.002420000000}, {768, 0.002420000000}, {774, 0.002420000000}, {781, 0.002420000000}, {787, 0.002420000000}, {793, 0.002420000000}, {800, 0.002420000000}, {808, 0.001500000000}, {816, 0.001500000000}, {825, 0.001500000000}, {833, 0.001500000000}, {841, 0.001500000000}, {850, 0.001500000000}, {859, 0.001500000000}, {867, 0.001500000000}, {876, 0.001500000000}, {885, 0.001500000000}, {900, 0.001850000000}, {914, 0.001850000000}, {929, 0.001850000000}, {945, 0.001850000000}, {960, 0.001850000000}, {976, 0.001850000000}, {992, 0.001850000000}, {1009, 0.001850000000}, {1025, 0.001850000000}, {1042, 0.001850000000}, {1063, 0.001850000000}, {1085, 0.001850000000}, {1108, 0.001850000000}, {1130, 0.001850000000}, {1154, 0.001850000000}, {1177, 0.001850000000}, {1201, 0.001850000000}, {1226, 0.001850000000}, {1251, 0.001850000000}, {1277, 0.001850000000}, {1290, 0.001120000000}, {1303, 0.001120000000}, {1316, 0.001120000000}, {1330, 0.001120000000}, {1343, 0.001120000000}, {1357, 0.001120000000}, {1371, 0.001120000000}, {1385, 0.001120000000}, {1399, 0.001120000000}, {1413, 0.001120000000}, {1425, 0.000740000000}, {1436, 0.000740000000}, {1448, 0.000740000000}, {1460, 0.000740000000}, {1472, 0.000740000000}, {1484, 0.000740000000}, {1497, 0.000740000000}, {1509, 0.000740000000}, {1521, 0.000740000000}, {1534, 0.000740000000}, {1547, 0.002050000000}, {1559, 0.002050000000}, {1572, 0.002050000000}, {1585, 0.002050000000}, {1598, 0.002050000000}, {1611, 0.002050000000}, {1624, 0.002050000000}, {1637, 0.002050000000}, {1651, 0.002050000000}, {1664, 0.002050000000}, {1712, 0.000740000000}, {1762, 0.000740000000}, {1813, 0.000740000000}, {1865, 0.000740000000}, {1919, 0.000740000000}, {1975, 0.000740000000}, {2032, 0.000740000000}, {2091, 0.000740000000}, {2152, 0.000740000000}, {2214, 0.000740000000}, {2311, 0.000930000000}, {2412, 0.000930000000}, {2517, 0.000930000000}, {2627, 0.000930000000}, {2742, 0.000930000000}, {2862, 0.000930000000}, {2987, 0.000930000000}, {3118, 0.000930000000}, {3254, 0.000930000000}, {3396, 0.000930000000}, {3544, 0.000930000000}, {3699, 0.000930000000}, {3861, 0.000930000000}, {4030, 0.000930000000}, {4206, 0.000930000000}, {4390, 0.000930000000}, {4582, 0.000930000000}, {4783, 0.000930000000}, {4992, 0.000930000000}, {5210, 0.000930000000}, {5427, 0.001490000000}, {5652, 0.001490000000}, {5887, 0.001490000000}, {6132, 0.001490000000}, {6387, 0.001490000000}, {6653, 0.001490000000}, {6929, 0.001490000000}, {7217, 0.001490000000}, {7517, 0.001490000000}, {7830, 0.001490000000}, {9012, 0.001300000000}, {10373, 0.001300000000}, {11939, 0.001300000000}, {13741, 0.001300000000}, {15816, 0.001300000000}, {18203, 0.001300000000}, {20952, 0.001300000000}, {24115, 0.001300000000}, {27756, 0.001300000000}, {31946, 0.001300000000}, {32405, 0.000930000000}, {32871, 0.000930000000}, {33343, 0.000930000000}, {33822, 0.000930000000}, {34308, 0.000930000000}, {34801, 0.000930000000}, {35301, 0.000930000000}, {35808, 0.000930000000}, {36322, 0.000930000000}, {36844, 0.000930000000}, {37146, 0.000930000000}, {37450, 0.000930000000}, {37756, 0.000930000000}, {38065, 0.000930000000}, {38377, 0.000930000000}, {38691, 0.000930000000}, {39007, 0.000930000000}, {39327, 0.000930000000}, {39648, 0.000930000000}, {39973, 0.000930000000}, {40382, 0.001860000000}, {40796, 0.001860000000}, {41214, 0.001860000000}, {41636, 0.001860000000}, {42062, 0.001860000000}, {42493, 0.001860000000}, {42928, 0.001860000000}, {43367, 0.001860000000}, {43811, 0.001860000000}, {44260, 0.001860000000}, {44531, 0.002040000000}, {44804, 0.002040000000}, {45079, 0.002040000000}, {45356, 0.002040000000}, {45634, 0.002040000000}, {45913, 0.002040000000}, {46195, 0.002040000000}, {46478, 0.002040000000}, {46763, 0.002040000000}, {47050, 0.002040000000}, {47435, 0.003720000000}, {47823, 0.003720000000}, {48215, 0.003720000000}, {48609, 0.003720000000}, {49007, 0.003720000000}, {49408, 0.003720000000}, {49813, 0.003720000000}, {50221, 0.003720000000}, {50632, 0.003720000000}, {51046, 0.003720000000}, {52097, 0.000740000000}, {53169, 0.000740000000}, {54264, 0.000740000000}, {55381, 0.000740000000}, {56521, 0.000740000000}, {57684, 0.000740000000}, {58872, 0.000740000000}, {60084, 0.000740000000}, {61321, 0.000740000000}, {62583, 0.000740000000}, {63353, 0.000930000000}, {64132, 0.000930000000}, {64921, 0.000930000000}, {65720, 0.000930000000}, {66528, 0.000930000000}, {67347, 0.000930000000}, {68175, 0.000930000000}, {69014, 0.000930000000}, {69863, 0.000930000000}, {70722, 0.000930000000}, {71156, 0.000930000000}, {71592, 0.000930000000}, {72031, 0.000930000000}, {72473, 0.000930000000}, {72917, 0.000930000000}, {73364, 0.000930000000}, {73814, 0.000930000000}, {74266, 0.000930000000}, {74722, 0.000930000000}, {75180, 0.000930000000}, {75795, 0.002970000000}, {76416, 0.002970000000}, {77041, 0.002970000000}, {77672, 0.002970000000}, {78307, 0.002970000000}, {78948, 0.002970000000}, {79595, 0.002970000000}, {80246, 0.002970000000}, {80903, 0.002970000000}, {81565, 0.002970000000}, {83414, 0.001680000000}, {85305, 0.001680000000}, {87238, 0.001680000000}, {89216, 0.001680000000}, {91238, 0.001680000000}, {93306, 0.001680000000}, {95421, 0.001680000000}, {97584, 0.001680000000}, {99796, 0.001680000000}, {102058, 0.001680000000}, {103313, 0.000930000000}, {104584, 0.000930000000}, {105871, 0.000930000000}, {107173, 0.000930000000}, {108492, 0.000930000000}, {109826, 0.000930000000}, {111177, 0.000930000000}, {112545, 0.000930000000}, {113929, 0.000930000000}, {115331, 0.000930000000}, {116988, 0.000920000000}, {118669, 0.000920000000}, {120373, 0.000920000000}, {122103, 0.000920000000}, {123857, 0.000920000000}, {125636, 0.000920000000}, {127441, 0.000920000000}, {129272, 0.000920000000}, {131129, 0.000920000000}, {133013, 0.000920000000}, {135199, 0.000940000000}, {137421, 0.000940000000}, {139679, 0.000940000000}, {141975, 0.000940000000}, {144308, 0.000940000000}, {146680, 0.000940000000}, {149091, 0.000940000000}, {151541, 0.000940000000}, {154032, 0.000940000000}, {156563, 0.000940000000}, {159136, 0.000930000000}, {161752, 0.000930000000}, {164410, 0.000930000000}, {167112, 0.000930000000}, {169859, 0.000930000000}, {172651, 0.000930000000}, {175488, 0.000930000000}, {178373, 0.000930000000}, {181304, 0.000930000000}, {184284, 0.000930000000}, {186932, 0.000920000000}, {189618, 0.000920000000}, {192343, 0.000920000000}, {195107, 0.000920000000}, {197911, 0.000920000000}, {200755, 0.000920000000}, {203640, 0.000920000000}, {206566, 0.000920000000}, {209535, 0.000920000000}, {212546, 0.000920000000}, {215160, 0.000930000000}, {217805, 0.000930000000}, {220484, 0.000930000000}, {223195, 0.000930000000}, {225940, 0.000930000000}, {228718, 0.000930000000}, {231530, 0.000930000000}, {234377, 0.000930000000}, {237259, 0.000930000000}, {240177, 0.000930000000}, {244622, 0.000930000000}, {249150, 0.000930000000}, {253761, 0.000930000000}, {258458, 0.000930000000}, {263241, 0.000930000000}, {268113, 0.000930000000}, {273075, 0.000930000000}, {278129, 0.000930000000}, {283277, 0.000930000000}, {288520, 0.000930000000}, {302981, 0.000930000000}, {318166, 0.000930000000}, {334113, 0.000930000000}, {350858, 0.000930000000}, {368444, 0.000930000000}, {386910, 0.000930000000}, {406302, 0.000930000000}, {426666, 0.000930000000}, {448051, 0.000930000000}, {470507, 0.000930000000}, {492079, 0.000560000000}, {514641, 0.000560000000}, {538237, 0.000560000000}, {562914, 0.000560000000}, {588723, 0.000560000000}, {615716, 0.000560000000}, {643946, 0.000560000000}, {673470, 0.000560000000}, {704348, 0.000560000000}, {736642, 0.000560000000}, {754877, 0.000370000000}, {773563, 0.000370000000}, {792711, 0.000370000000}, {812333, 0.000370000000}, {832442, 0.000370000000}, {853048, 0.000370000000}, {874164, 0.000370000000}, {895802, 0.000370000000}, {917977, 0.000370000000}, {940700, 0.000370000000}, {1002039, 0.000930000000}, {1067379, 0.000930000000}, {1136978, 0.000930000000}, {1211116, 0.000930000000}, {1290088, 0.000930000000}, {1374210, 0.000930000000}, {1463817, 0.000930000000}, {1559267, 0.000930000000}, {1660940, 0.000930000000}, {1769244, 0.000930000000}, {1805665, 0.000560000000}, {1842837, 0.000560000000}, {1880773, 0.000560000000}, {1919490, 0.000560000000}, {1959005, 0.000560000000}, {1999332, 0.000560000000}, {2040490, 0.000560000000}, {2082496, 0.000560000000}, {2125366, 0.000560000000}, {2169118, 0.000560000000}, {2527289, 0.001300000000}, {2944602, 0.001300000000}, {3430822, 0.001300000000}, {3997329, 0.001300000000}, {4657379, 0.001300000000}, {5426418, 0.001300000000}, {6322443, 0.001300000000}, {7366423, 0.001300000000}, {8582787, 0.001300000000}, {10000000, 0.001300000000}, {0, 0}, }; dist_point_gen::weight dist_point_gen::w5[] = { {1430, 0.025000000000}, {2860, 0.025000000000}, {4290, 0.025000000000}, {5720, 0.025000000000}, {7150, 0.025000000000}, {8580, 0.025000000000}, {10010, 0.007143000000}, {11440, 0.007143000000}, {13230, 0.007143000000}, {14700, 0.007142000000}, {16170, 0.007143000000}, {17640, 0.007143000000}, {19110, 0.007143000000}, {20580, 0.016667000000}, {22050, 0.016666000000}, {23520, 0.016667000000}, {24990, 0.016667000000}, {26460, 0.016666000000}, {27930, 0.016667000000}, {29400, 0.007143000000}, {30870, 0.007143000000}, {32340, 0.007143000000}, {33810, 0.007142000000}, {35280, 0.007143000000}, {36750, 0.007143000000}, {38220, 0.007143000000}, {39690, 0.007143000000}, {41160, 0.007143000000}, {42630, 0.007143000000}, {44100, 0.007142000000}, {45570, 0.007143000000}, {47040, 0.007143000000}, {48510, 0.007143000000}, {49980, 0.006500000000}, {51450, 0.006500000000}, {52920, 0.006500000000}, {54390, 0.006500000000}, {55860, 0.006500000000}, {57330, 0.006500000000}, {58800, 0.006500000000}, {60270, 0.006500000000}, {61740, 0.006500000000}, {63210, 0.006500000000}, {64680, 0.006500000000}, {66150, 0.006500000000}, {67620, 0.006500000000}, {69090, 0.006500000000}, {70560, 0.006500000000}, {72030, 0.006500000000}, {73500, 0.006500000000}, {74970, 0.006500000000}, {76440, 0.006500000000}, {77910, 0.006500000000}, {79380, 0.000875000000}, {80850, 0.000875000000}, {82320, 0.000875000000}, {83790, 0.000875000000}, {85260, 0.000875000000}, {86730, 0.000875000000}, {88200, 0.000875000000}, {89670, 0.000875000000}, {91140, 0.000875000000}, {92610, 0.000875000000}, {94080, 0.000875000000}, {95550, 0.000875000000}, {97020, 0.000875000000}, {98490, 0.000875000000}, {99960, 0.000875000000}, {101430, 0.000875000000}, {102900, 0.000875000000}, {104370, 0.000875000000}, {105840, 0.000875000000}, {107310, 0.000875000000}, {108780, 0.000875000000}, {110250, 0.000875000000}, {111720, 0.000875000000}, {113190, 0.000875000000}, {114660, 0.000875000000}, {116130, 0.000875000000}, {117600, 0.000875000000}, {119070, 0.000875000000}, {120540, 0.000875000000}, {122010, 0.000875000000}, {123480, 0.000875000000}, {124950, 0.000875000000}, {126420, 0.000875000000}, {127890, 0.000875000000}, {129360, 0.000875000000}, {130830, 0.000875000000}, {132300, 0.000875000000}, {133770, 0.000875000000}, {135240, 0.000875000000}, {136710, 0.000875000000}, {138180, 0.000875000000}, {139650, 0.000875000000}, {141120, 0.000875000000}, {142590, 0.000875000000}, {144060, 0.000875000000}, {145530, 0.000875000000}, {147000, 0.000875000000}, {148470, 0.000875000000}, {149940, 0.000875000000}, {151410, 0.000875000000}, {152880, 0.000875000000}, {154350, 0.000875000000}, {155820, 0.000875000000}, {157290, 0.000875000000}, {158760, 0.000875000000}, {160230, 0.000875000000}, {161700, 0.000875000000}, {163170, 0.000875000000}, {164640, 0.000875000000}, {166110, 0.000875000000}, {167580, 0.000875000000}, {169050, 0.000875000000}, {170520, 0.000875000000}, {171990, 0.000875000000}, {173460, 0.000875000000}, {174930, 0.000875000000}, {176400, 0.000875000000}, {177870, 0.000875000000}, {179340, 0.000875000000}, {180810, 0.000875000000}, {182280, 0.000875000000}, {183750, 0.000875000000}, {185220, 0.000875000000}, {186690, 0.000875000000}, {188160, 0.000875000000}, {189630, 0.000875000000}, {191100, 0.000875000000}, {192570, 0.000875000000}, {194040, 0.000875000000}, {195510, 0.000875000000}, {196980, 0.000187000000}, {198450, 0.000188000000}, {199920, 0.000187000000}, {201390, 0.000187000000}, {202860, 0.000187000000}, {204330, 0.000188000000}, {205800, 0.000187000000}, {207270, 0.000187000000}, {208740, 0.000187000000}, {210210, 0.000188000000}, {211680, 0.000187000000}, {213150, 0.000187000000}, {214620, 0.000187000000}, {216090, 0.000188000000}, {217560, 0.000187000000}, {219030, 0.000187000000}, {220500, 0.000188000000}, {221970, 0.000187000000}, {223440, 0.000187000000}, {224910, 0.000187000000}, {226380, 0.000188000000}, {227850, 0.000187000000}, {229320, 0.000187000000}, {230790, 0.000187000000}, {232260, 0.000188000000}, {233730, 0.000187000000}, {235200, 0.000187000000}, {236670, 0.000187000000}, {238140, 0.000188000000}, {239610, 0.000187000000}, {241080, 0.000187000000}, {242550, 0.000188000000}, {244020, 0.000187000000}, {245490, 0.000187000000}, {246960, 0.000187000000}, {248430, 0.000188000000}, {249900, 0.000187000000}, {251370, 0.000187000000}, {252840, 0.000187000000}, {254310, 0.000188000000}, {255780, 0.000187000000}, {257250, 0.000187000000}, {258720, 0.000187000000}, {260190, 0.000188000000}, {261660, 0.000187000000}, {263130, 0.000187000000}, {264600, 0.000187000000}, {266070, 0.000188000000}, {267540, 0.000187000000}, {269010, 0.000187000000}, {270480, 0.000188000000}, {271950, 0.000187000000}, {273420, 0.000187000000}, {274890, 0.000187000000}, {276360, 0.000188000000}, {277830, 0.000187000000}, {279300, 0.000187000000}, {280770, 0.000187000000}, {282240, 0.000188000000}, {283710, 0.000187000000}, {285180, 0.000187000000}, {286650, 0.000187000000}, {288120, 0.000188000000}, {289590, 0.000187000000}, {291060, 0.000187000000}, {292530, 0.000188000000}, {294000, 0.000187000000}, {295470, 0.000187000000}, {296940, 0.000187000000}, {298410, 0.000188000000}, {299880, 0.000187000000}, {301350, 0.000187000000}, {302820, 0.000187000000}, {304290, 0.000188000000}, {305760, 0.000187000000}, {307230, 0.000187000000}, {308700, 0.000187000000}, {310170, 0.000188000000}, {311640, 0.000187000000}, {313110, 0.000187000000}, {314580, 0.000188000000}, {316050, 0.000187000000}, {317520, 0.000187000000}, {318990, 0.000187000000}, {320460, 0.000188000000}, {321930, 0.000187000000}, {323400, 0.000187000000}, {324870, 0.000187000000}, {326340, 0.000188000000}, {327810, 0.000187000000}, {329280, 0.000187000000}, {330750, 0.000187000000}, {332220, 0.000188000000}, {333690, 0.000187000000}, {335160, 0.000187000000}, {336630, 0.000188000000}, {338100, 0.000187000000}, {339570, 0.000187000000}, {341040, 0.000187000000}, {342510, 0.000188000000}, {343980, 0.000187000000}, {345450, 0.000187000000}, {346920, 0.000187000000}, {348390, 0.000188000000}, {349860, 0.000187000000}, {351330, 0.000187000000}, {352800, 0.000187000000}, {354270, 0.000188000000}, {355740, 0.000187000000}, {357210, 0.000187000000}, {358680, 0.000188000000}, {360150, 0.000187000000}, {361620, 0.000187000000}, {363090, 0.000187000000}, {364560, 0.000188000000}, {373380, 0.001123000000}, {392490, 0.002435000000}, {411600, 0.002434000000}, {432180, 0.002622000000}, {451290, 0.002434000000}, {470400, 0.002435000000}, {490980, 0.002621000000}, {510090, 0.002435000000}, {529200, 0.002434000000}, {549780, 0.002622000000}, {568890, 0.002435000000}, {588000, 0.002434000000}, {608580, 0.002622000000}, {627690, 0.002434000000}, {648270, 0.002622000000}, {667380, 0.002434000000}, {686490, 0.002435000000}, {707070, 0.002622000000}, {726180, 0.002434000000}, {745290, 0.002434000000}, {765870, 0.002622000000}, {784980, 0.002435000000}, {804090, 0.002434000000}, {824670, 0.002622000000}, {843780, 0.002434000000}, {862890, 0.002435000000}, {883470, 0.002621000000}, {902580, 0.002435000000}, {921690, 0.002434000000}, {942270, 0.002622000000}, {961380, 0.002435000000}, {980490, 0.002434000000}, {1005480, 0.002553000000}, {1030470, 0.002552000000}, {1053990, 0.002403000000}, {1078980, 0.002552000000}, {1103970, 0.002553000000}, {1127490, 0.002402000000}, {1152480, 0.002553000000}, {1177470, 0.002552000000}, {1200990, 0.002403000000}, {1225980, 0.002552000000}, {1250970, 0.002553000000}, {1274490, 0.002402000000}, {1299480, 0.002553000000}, {1324470, 0.002552000000}, {1347990, 0.002403000000}, {1372980, 0.002552000000}, {1397970, 0.002553000000}, {1421490, 0.002402000000}, {1446480, 0.002553000000}, {1470000, 0.002402000000}, {1494990, 0.002553000000}, {1519980, 0.002552000000}, {1543500, 0.002403000000}, {1568490, 0.002552000000}, {1593480, 0.002553000000}, {1617000, 0.002402000000}, {1641990, 0.002553000000}, {1666980, 0.002552000000}, {1690500, 0.002403000000}, {1715490, 0.002552000000}, {1740480, 0.002553000000}, {1764000, 0.002402000000}, {1788990, 0.002553000000}, {1813980, 0.002552000000}, {1837500, 0.002403000000}, {1862490, 0.002552000000}, {1887480, 0.002553000000}, {1911000, 0.002402000000}, {1935990, 0.002553000000}, {1959510, 0.002402000000}, {2033010, 0.002500000000}, {2106510, 0.002500000000}, {2180010, 0.002500000000}, {2253510, 0.002500000000}, {2327010, 0.002500000000}, {2400510, 0.002500000000}, {2474010, 0.002500000000}, {2547510, 0.002500000000}, {2621010, 0.002500000000}, {2694510, 0.002500000000}, {2768010, 0.002500000000}, {2841510, 0.002500000000}, {2915010, 0.002500000000}, {2988510, 0.002500000000}, {3062010, 0.002500000000}, {3135510, 0.002500000000}, {3209010, 0.002500000000}, {3282510, 0.002500000000}, {3356010, 0.002500000000}, {3429510, 0.002500000000}, {3503010, 0.002500000000}, {3576510, 0.002500000000}, {3650010, 0.002500000000}, {3723510, 0.002500000000}, {3797010, 0.002500000000}, {3870510, 0.002500000000}, {3944010, 0.002500000000}, {4017510, 0.002500000000}, {4091010, 0.002500000000}, {4164510, 0.002500000000}, {4238010, 0.002500000000}, {4311510, 0.002500000000}, {4385010, 0.002500000000}, {4458510, 0.002500000000}, {4532010, 0.002500000000}, {4605510, 0.002500000000}, {4679010, 0.002500000000}, {4752510, 0.002500000000}, {4826010, 0.002500000000}, {4899510, 0.002500000000}, {10291470, 0.002505000000}, {10780980, 0.002498000000}, {11270490, 0.002497000000}, {11761470, 0.002505000000}, {12250980, 0.002498000000}, {12740490, 0.002497000000}, {13231470, 0.002505000000}, {13720980, 0.002498000000}, {14210490, 0.002498000000}, {14701470, 0.002505000000}, {15190980, 0.002497000000}, {15680490, 0.002498000000}, {16171470, 0.002505000000}, {16660980, 0.002497000000}, {17150490, 0.002498000000}, {17641470, 0.002505000000}, {18130980, 0.002498000000}, {18620490, 0.002497000000}, {19111470, 0.002505000000}, {19600980, 0.002498000000}, {20090490, 0.002497000000}, {20581470, 0.002505000000}, {21070980, 0.002498000000}, {21560490, 0.002498000000}, {22051470, 0.002505000000}, {22540980, 0.002497000000}, {23030490, 0.002498000000}, {23521470, 0.002505000000}, {24010980, 0.002497000000}, {24500490, 0.002498000000}, {24991470, 0.002505000000}, {25480980, 0.002498000000}, {25970490, 0.002497000000}, {26461470, 0.002505000000}, {26950980, 0.002498000000}, {27440490, 0.002497000000}, {27931470, 0.002505000000}, {28420980, 0.002498000000}, {28910490, 0.002497000000}, {29400000, 0.002498000000}, {0, 0}, }; /* The distribution below is not representative of any real work load; it * is intended to maximize the likelihood that large requests starve. Run * it at 100% network load for 30 seconds or more. */ dist_point_gen::weight dist_point_gen::starve[] = { {100000, 100}, {200000, 100}, {300000, 100}, {400000, 100}, {500000, 100}, {600000, 100}, {700000, 100}, {800000, 100}, {900000, 100}, {1000000, 50}, };