diff --git a/.gitignore b/.gitignore index aa7fabf..4c468cd 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,4 @@ shadow-gossipsub.yaml # Coverage files coverage.out -*.coverprofile +*.coverprofile \ No newline at end of file diff --git a/network_graph.py b/network_graph.py index 5e33837..f5605b7 100755 --- a/network_graph.py +++ b/network_graph.py @@ -28,110 +28,3005 @@ class NodeType: download_bw: int # in Mbps weight: int -australia = Location("australia", 290) -europe = Location("europe", 5599) - -east_asia = Location("east_asia", 1059) -west_asia = Location("west_asia", 161) - -na_east = Location("na_east", 2894) -na_west = Location("na_west", 1240) - +united_states = Location("united_states", 5031) # Manhattan +germany = Location("germany", 2241) # Berlin +france = Location("france", 1032) # Paris +finland = Location("finland", 962) # Helsinki +canada = Location("canada", 767) # Toronto +singapore = Location("singapore", 675) # Singapore +united_kingdom = Location("united_kingdom", 637) # London +japan = Location("japan", 523) # Tokyo +netherlands = Location("netherlands", 517) # Amsterdam +south_korea = Location("south_korea", 314) # Seoul +austria = Location("austria", 301) # Vienna +australia = Location("australia", 287) # Sydney +switzerland = Location("switzerland", 287) # Zurich +hong_kong = Location("hong_kong", 239) # Hong Kong +ireland = Location("ireland", 222) # Dublin +china = Location("china", 208) # Beijing +russia = Location("russia", 208) # Moscow +spain = Location("spain", 166) # Madrid +taiwan = Location("taiwan", 155) # Taipei +poland = Location("poland", 150) # Warsaw +moldova = Location("moldova", 111) # Chisinau +belgium = Location("belgium", 109) # Brussels +czechia = Location("czechia", 108) # Prague +sweden = Location("sweden", 103) # Stockholm +portugal = Location("portugal", 81) +lithuania = Location("lithuania", 70) +india = Location("india", 65) +italy = Location("italy", 65) +vietnam = Location("vietnam", 53) +romania = Location("romania", 51) +norway = Location("norway", 48) south_africa = Location("south_africa", 47) -south_america = Location("south_america", 36) +mexico = Location("mexico", 42) +denmark = Location("denmark", 42) +ukraine = Location("ukraine", 42) +slovenia = Location("slovenia", 41) +israel = Location("israel", 41) +new_zeland = Location("new_zeland", 38) +argentina = Location("argentina", 35) +thailand = Location("thailand", 33) +bulgaria = Location("bulgaria", 32) +malta = Location("malta", 27) +malayasia = Location("malayasia", 26) +latvia = Location("latvia", 26) +turkey = Location("turkey", 25) +greece = Location("greece", 24) +slovakia = Location("slovakia", 24) +croatia = Location("croatia", 24) +united_arab_emirates = Location("united_arab_emirates", 21) +# brazil = Location("brazil", 21) +hungary = Location("hungary", 21) +# serbia = Location('serbia', 19) +luxembourg = Location("luxembourg", 18) +indonesia = Location("indonesia", 18) +# belarus = Location("belarus", 17) +chile = Location("chile", 16) +estonia = Location("estonia", 15) +# bosnia_herzegovina = Location("bosnia_herzegovina", 13) +# cyprus = Location("cyprus", 12) supernode = NodeType("supernode", 50, 50, 0) fullnode = NodeType("fullnode", 15, 50, 100) node_types = [fullnode] -locations = [australia, europe, east_asia, west_asia, na_east, na_west, south_africa, south_america] - +locations = [united_states, germany, france, finland, canada, singapore, united_kingdom, japan, netherlands, south_korea, austria, australia, switzerland, hong_kong, ireland, china, russia, spain, taiwan, poland, moldova, belgium, czechia, sweden, portugal, lithuania, india, italy, vietnam, romania, norway, south_africa, mexico, denmark, ukraine, slovenia, israel, new_zeland, argentina, thailand, bulgaria, malta, malayasia, latvia, turkey, greece, slovakia, croatia, united_arab_emirates, hungary, luxembourg, indonesia, chile, estonia] """ -Edge latencies are picked up from https://www.cloudping.co/. We map regions based on their AWS Regions and set the latencies -based on the ping latencies between these regions. - -australia - ap-southeast-2 X -east_asia - ap-northeast-1 X -europe - eu-central-1 X -na_west - us-west-2 X -na_east - us-east-1 X -south_america - sa-east-1 X -south_africa - af-south-1 X -west_asia - me-south-1 X +Edge latencies are extracted from pings-2020-07-19-2020-07-20.csv using average latencies between cities. +Cities are mapped to server IDs from servers-2020-07-19.csv. +Only locations with ping data are included in the edges list. + +Locations with data (54 total): +- Original 24: united_states, germany, france, finland, canada, singapore, united_kingdom, japan, + netherlands, south_korea, austria, australia, switzerland, hong_kong, ireland, china, russia, + spain, taiwan, poland, moldova, belgium, czechia, sweden +- New 30: portugal, lithuania, india, italy, vietnam, romania, norway, south_africa, mexico, + denmark, ukraine, slovenia, israel, new_zeland, argentina, thailand, bulgaria, malta, + malayasia, latvia, turkey, greece, slovakia, croatia, united_arab_emirates, hungary, + luxembourg, indonesia, chile, estonia + +Locations without data (skipped): belarus, bosnia_herzegovina, brazil, cyprus, serbia """ edges = [ - Edge(australia, australia, 2), - Edge(australia, east_asia, 107), - Edge(australia, europe, 251), - Edge(australia, na_west, 141), - Edge(australia, na_east, 202), - Edge(australia, south_america, 316), - Edge(australia, south_africa, 409), - Edge(australia, west_asia, 185), - - Edge(east_asia, australia, 120), - Edge(east_asia, east_asia, 8), - Edge(east_asia, europe, 227), - Edge(east_asia, na_west, 101), - Edge(east_asia, na_east, 155), - Edge(east_asia, south_america, 264), - Edge(east_asia, south_africa, 394), - Edge(east_asia, west_asia, 175), - - Edge(europe, australia, 251), - Edge(europe, east_asia, 230), - Edge(europe, europe, 6), - Edge(europe, na_west, 145), - Edge(europe, na_east, 96), - Edge(europe, south_america, 206), - Edge(europe, south_africa, 154), - Edge(europe, west_asia, 86), - - Edge(na_west, australia, 143), - Edge(na_west, east_asia, 102), - Edge(na_west, europe, 145), - Edge(na_west, na_west, 5), - Edge(na_west, na_east, 65), - Edge(na_west, south_america, 180), - Edge(na_west, south_africa, 274), - Edge(na_west, west_asia, 267), - - Edge(na_east, australia, 206), - Edge(na_east, east_asia, 154), - Edge(na_east, europe, 97), - Edge(na_east, na_west, 67), - Edge(na_east, na_east, 9), - Edge(na_east, south_america, 115), - Edge(na_east, south_africa, 227), - Edge(na_east, west_asia, 170), - - Edge(south_america, australia, 311), - Edge(south_america, east_asia, 265), - Edge(south_america, europe, 206), - Edge(south_america, na_west, 176), - Edge(south_america, na_east, 115), - Edge(south_america, south_america, 6), - Edge(south_america, south_africa, 340), - Edge(south_america, west_asia, 277), - - Edge(south_africa, australia, 415), - Edge(south_africa, east_asia, 391), - Edge(south_africa, europe, 159), - Edge(south_africa, na_west, 276), - Edge(south_africa, na_east, 229), - Edge(south_africa, south_america, 343), - Edge(south_africa, south_africa, 3), - Edge(south_africa, west_asia, 248), - - Edge(west_asia, australia, 185), - Edge(west_asia, east_asia, 175), - Edge(west_asia, europe, 87), - Edge(west_asia, na_west, 262), - Edge(west_asia, na_east, 168), - Edge(west_asia, south_america, 276), - Edge(west_asia, south_africa, 249), - Edge(west_asia, west_asia, 2), + Edge(united_states, united_states, 2), + Edge(united_states, germany, 84), + Edge(united_states, france, 79), + Edge(united_states, finland, 100), + Edge(united_states, canada, 15), + Edge(united_states, singapore, 235), + Edge(united_states, united_kingdom, 70), + Edge(united_states, japan, 185), + Edge(united_states, netherlands, 79), + Edge(united_states, south_korea, 199), + Edge(united_states, austria, 97), + Edge(united_states, australia, 198), + Edge(united_states, switzerland, 91), + Edge(united_states, hong_kong, 199), + Edge(united_states, ireland, 79), + Edge(united_states, china, 274), + Edge(united_states, russia, 115), + Edge(united_states, spain, 93), + Edge(united_states, taiwan, 192), + Edge(united_states, poland, 99), + Edge(united_states, moldova, 129), + Edge(united_states, belgium, 90), + Edge(united_states, czechia, 95), + Edge(united_states, sweden, 99), + Edge(united_states, portugal, 107), + Edge(united_states, lithuania, 107), + Edge(united_states, india, 212), + Edge(united_states, italy, 98), + Edge(united_states, vietnam, 263), + Edge(united_states, romania, 117), + Edge(united_states, norway, 103), + Edge(united_states, south_africa, 238), + Edge(united_states, mexico, 67), + Edge(united_states, denmark, 100), + Edge(united_states, ukraine, 122), + Edge(united_states, slovenia, 92), + Edge(united_states, israel, 132), + Edge(united_states, new_zeland, 220), + Edge(united_states, argentina, 165), + Edge(united_states, thailand, 283), + Edge(united_states, bulgaria, 104), + Edge(united_states, malta, 125), + Edge(united_states, malayasia, 213), + Edge(united_states, latvia, 107), + Edge(united_states, turkey, 134), + Edge(united_states, greece, 126), + Edge(united_states, slovakia, 95), + Edge(united_states, croatia, 93), + Edge(united_states, united_arab_emirates, 175), + Edge(united_states, hungary, 152), + Edge(united_states, luxembourg, 90), + Edge(united_states, indonesia, 235), + Edge(united_states, chile, 133), + Edge(united_states, estonia, 99), + Edge(germany, united_states, 84), + Edge(germany, germany, 2), + Edge(germany, france, 11), + Edge(germany, finland, 41), + Edge(germany, canada, 96), + Edge(germany, singapore, 150), + Edge(germany, united_kingdom, 14), + Edge(germany, japan, 222), + Edge(germany, netherlands, 11), + Edge(germany, south_korea, 285), + Edge(germany, austria, 14), + Edge(germany, australia, 278), + Edge(germany, switzerland, 7), + Edge(germany, hong_kong, 201), + Edge(germany, ireland, 25), + Edge(germany, china, 223), + Edge(germany, russia, 44), + Edge(germany, spain, 33), + Edge(germany, taiwan, 284), + Edge(germany, poland, 21), + Edge(germany, moldova, 34), + Edge(germany, belgium, 10), + Edge(germany, czechia, 14), + Edge(germany, sweden, 28), + Edge(germany, portugal, 45), + Edge(germany, lithuania, 50), + Edge(germany, india, 145), + Edge(germany, italy, 16), + Edge(germany, vietnam, 225), + Edge(germany, romania, 26), + Edge(germany, norway, 29), + Edge(germany, south_africa, 173), + Edge(germany, mexico, 142), + Edge(germany, denmark, 13), + Edge(germany, ukraine, 32), + Edge(germany, slovenia, 29), + Edge(germany, israel, 68), + Edge(germany, new_zeland, 287), + Edge(germany, argentina, 233), + Edge(germany, thailand, 205), + Edge(germany, bulgaria, 27), + Edge(germany, malta, 33), + Edge(germany, malayasia, 166), + Edge(germany, latvia, 33), + Edge(germany, turkey, 36), + Edge(germany, greece, 43), + Edge(germany, slovakia, 13), + Edge(germany, croatia, 18), + Edge(germany, united_arab_emirates, 111), + Edge(germany, hungary, 17), + Edge(germany, luxembourg, 9), + Edge(germany, indonesia, 182), + Edge(germany, chile, 213), + Edge(germany, estonia, 29), + Edge(france, united_states, 79), + Edge(france, germany, 11), + Edge(france, france, 2), + Edge(france, finland, 33), + Edge(france, canada, 93), + Edge(france, singapore, 264), + Edge(france, united_kingdom, 9), + Edge(france, japan, 235), + Edge(france, netherlands, 10), + Edge(france, south_korea, 274), + Edge(france, austria, 22), + Edge(france, australia, 271), + Edge(france, switzerland, 20), + Edge(france, hong_kong, 261), + Edge(france, ireland, 18), + Edge(france, china, 238), + Edge(france, russia, 50), + Edge(france, spain, 18), + Edge(france, taiwan, 272), + Edge(france, poland, 33), + Edge(france, moldova, 48), + Edge(france, belgium, 10), + Edge(france, czechia, 24), + Edge(france, sweden, 31), + Edge(france, portugal, 44), + Edge(france, lithuania, 45), + Edge(france, india, 208), + Edge(france, italy, 20), + Edge(france, vietnam, 261), + Edge(france, romania, 37), + Edge(france, norway, 107), + Edge(france, south_africa, 169), + Edge(france, mexico, 137), + Edge(france, denmark, 24), + Edge(france, ukraine, 48), + Edge(france, slovenia, 44), + Edge(france, israel, 69), + Edge(france, new_zeland, 285), + Edge(france, argentina, 239), + Edge(france, thailand, 176), + Edge(france, bulgaria, 41), + Edge(france, malta, 43), + Edge(france, malayasia, 245), + Edge(france, latvia, 48), + Edge(france, turkey, 52), + Edge(france, greece, 54), + Edge(france, slovakia, 23), + Edge(france, croatia, 34), + Edge(france, united_arab_emirates, 128), + Edge(france, hungary, 28), + Edge(france, luxembourg, 8), + Edge(france, indonesia, 272), + Edge(france, chile, 204), + Edge(france, estonia, 39), + Edge(finland, united_states, 100), + Edge(finland, germany, 41), + Edge(finland, france, 33), + Edge(finland, finland, 2), + Edge(finland, canada, 112), + Edge(finland, singapore, 186), + Edge(finland, united_kingdom, 35), + Edge(finland, japan, 243), + Edge(finland, netherlands, 27), + Edge(finland, south_korea, 266), + Edge(finland, austria, 33), + Edge(finland, australia, 279), + Edge(finland, switzerland, 40), + Edge(finland, hong_kong, 269), + Edge(finland, ireland, 46), + Edge(finland, china, 207), + Edge(finland, russia, 17), + Edge(finland, spain, 58), + Edge(finland, taiwan, 290), + Edge(finland, poland, 57), + Edge(finland, moldova, 54), + Edge(finland, belgium, 33), + Edge(finland, czechia, 37), + Edge(finland, sweden, 8), + Edge(finland, portugal, 69), + Edge(finland, lithuania, 14), + Edge(finland, india, 176), + Edge(finland, italy, 40), + Edge(finland, vietnam, 225), + Edge(finland, romania, 50), + Edge(finland, norway, 17), + Edge(finland, south_africa, 190), + Edge(finland, mexico, 164), + Edge(finland, denmark, 28), + Edge(finland, ukraine, 57), + Edge(finland, slovenia, 33), + Edge(finland, israel, 84), + Edge(finland, new_zeland, 297), + Edge(finland, argentina, 277), + Edge(finland, thailand, 211), + Edge(finland, bulgaria, 43), + Edge(finland, malta, 58), + Edge(finland, malayasia, 185), + Edge(finland, latvia, 7), + Edge(finland, turkey, 63), + Edge(finland, greece, 67), + Edge(finland, slovakia, 38), + Edge(finland, croatia, 40), + Edge(finland, united_arab_emirates, 119), + Edge(finland, hungary, 40), + Edge(finland, luxembourg, 36), + Edge(finland, indonesia, 283), + Edge(finland, chile, 237), + Edge(finland, estonia, 7), + Edge(canada, united_states, 15), + Edge(canada, germany, 95), + Edge(canada, france, 93), + Edge(canada, finland, 112), + Edge(canada, canada, 2), + Edge(canada, singapore, 252), + Edge(canada, united_kingdom, 91), + Edge(canada, japan, 179), + Edge(canada, netherlands, 95), + Edge(canada, south_korea, 189), + Edge(canada, austria, 110), + Edge(canada, australia, 206), + Edge(canada, switzerland, 111), + Edge(canada, hong_kong, 242), + Edge(canada, ireland, 98), + Edge(canada, china, 220), + Edge(canada, russia, 135), + Edge(canada, spain, 115), + Edge(canada, taiwan, 199), + Edge(canada, poland, 129), + Edge(canada, moldova, 136), + Edge(canada, belgium, 98), + Edge(canada, czechia, 112), + Edge(canada, sweden, 115), + Edge(canada, portugal, 124), + Edge(canada, lithuania, 124), + Edge(canada, india, 224), + Edge(canada, italy, 118), + Edge(canada, vietnam, 261), + Edge(canada, romania, 127), + Edge(canada, norway, 118), + Edge(canada, south_africa, 252), + Edge(canada, mexico, 75), + Edge(canada, denmark, 108), + Edge(canada, ukraine, 128), + Edge(canada, slovenia, 108), + Edge(canada, israel, 149), + Edge(canada, new_zeland, 229), + Edge(canada, argentina, 177), + Edge(canada, thailand, 283), + Edge(canada, bulgaria, 128), + Edge(canada, malta, 134), + Edge(canada, malayasia, 250), + Edge(canada, latvia, 117), + Edge(canada, turkey, 138), + Edge(canada, greece, 142), + Edge(canada, slovakia, 112), + Edge(canada, croatia, 106), + Edge(canada, united_arab_emirates, 189), + Edge(canada, hungary, 124), + Edge(canada, luxembourg, 108), + Edge(canada, indonesia, 257), + Edge(canada, chile, 153), + Edge(canada, estonia, 110), + Edge(singapore, united_states, 235), + Edge(singapore, germany, 150), + Edge(singapore, france, 263), + Edge(singapore, finland, 185), + Edge(singapore, canada, 251), + Edge(singapore, singapore, 2), + Edge(singapore, united_kingdom, 170), + Edge(singapore, japan, 79), + Edge(singapore, netherlands, 163), + Edge(singapore, south_korea, 107), + Edge(singapore, austria, 167), + Edge(singapore, australia, 93), + Edge(singapore, switzerland, 169), + Edge(singapore, hong_kong, 33), + Edge(singapore, ireland, 253), + Edge(singapore, china, 207), + Edge(singapore, russia, 178), + Edge(singapore, spain, 190), + Edge(singapore, taiwan, 54), + Edge(singapore, poland, 190), + Edge(singapore, moldova, 196), + Edge(singapore, belgium, 167), + Edge(singapore, czechia, 245), + Edge(singapore, sweden, 180), + Edge(singapore, portugal, 196), + Edge(singapore, lithuania, 185), + Edge(singapore, india, 69), + Edge(singapore, italy, 174), + Edge(singapore, vietnam, 56), + Edge(singapore, romania, 186), + Edge(singapore, norway, 176), + Edge(singapore, south_africa, 346), + Edge(singapore, mexico, 231), + Edge(singapore, denmark, 170), + Edge(singapore, ukraine, 268), + Edge(singapore, slovenia, 185), + Edge(singapore, israel, 197), + Edge(singapore, new_zeland, 116), + Edge(singapore, argentina, 373), + Edge(singapore, thailand, 31), + Edge(singapore, bulgaria, 172), + Edge(singapore, malta, 284), + Edge(singapore, malayasia, 8), + Edge(singapore, latvia, 183), + Edge(singapore, turkey, 284), + Edge(singapore, greece, 275), + Edge(singapore, slovakia, 254), + Edge(singapore, croatia, 163), + Edge(singapore, united_arab_emirates, 339), + Edge(singapore, hungary, 257), + Edge(singapore, luxembourg, 179), + Edge(singapore, indonesia, 14), + Edge(singapore, chile, 358), + Edge(singapore, estonia, 176), + Edge(united_kingdom, united_states, 69), + Edge(united_kingdom, germany, 14), + Edge(united_kingdom, france, 9), + Edge(united_kingdom, finland, 35), + Edge(united_kingdom, canada, 90), + Edge(united_kingdom, singapore, 170), + Edge(united_kingdom, united_kingdom, 2), + Edge(united_kingdom, japan, 217), + Edge(united_kingdom, netherlands, 8), + Edge(united_kingdom, south_korea, 270), + Edge(united_kingdom, austria, 28), + Edge(united_kingdom, australia, 280), + Edge(united_kingdom, switzerland, 23), + Edge(united_kingdom, hong_kong, 215), + Edge(united_kingdom, ireland, 12), + Edge(united_kingdom, china, 237), + Edge(united_kingdom, russia, 46), + Edge(united_kingdom, spain, 24), + Edge(united_kingdom, taiwan, 272), + Edge(united_kingdom, poland, 31), + Edge(united_kingdom, moldova, 51), + Edge(united_kingdom, belgium, 10), + Edge(united_kingdom, czechia, 27), + Edge(united_kingdom, sweden, 30), + Edge(united_kingdom, portugal, 51), + Edge(united_kingdom, lithuania, 36), + Edge(united_kingdom, india, 143), + Edge(united_kingdom, italy, 27), + Edge(united_kingdom, vietnam, 217), + Edge(united_kingdom, romania, 41), + Edge(united_kingdom, norway, 28), + Edge(united_kingdom, south_africa, 157), + Edge(united_kingdom, mexico, 135), + Edge(united_kingdom, denmark, 18), + Edge(united_kingdom, ukraine, 49), + Edge(united_kingdom, slovenia, 33), + Edge(united_kingdom, israel, 65), + Edge(united_kingdom, new_zeland, 265), + Edge(united_kingdom, argentina, 233), + Edge(united_kingdom, thailand, 259), + Edge(united_kingdom, bulgaria, 40), + Edge(united_kingdom, malta, 46), + Edge(united_kingdom, malayasia, 193), + Edge(united_kingdom, latvia, 39), + Edge(united_kingdom, turkey, 46), + Edge(united_kingdom, greece, 56), + Edge(united_kingdom, slovakia, 27), + Edge(united_kingdom, croatia, 34), + Edge(united_kingdom, united_arab_emirates, 177), + Edge(united_kingdom, hungary, 28), + Edge(united_kingdom, luxembourg, 16), + Edge(united_kingdom, indonesia, 194), + Edge(united_kingdom, chile, 201), + Edge(united_kingdom, estonia, 34), + Edge(japan, united_states, 184), + Edge(japan, germany, 222), + Edge(japan, france, 235), + Edge(japan, finland, 243), + Edge(japan, canada, 179), + Edge(japan, singapore, 79), + Edge(japan, united_kingdom, 217), + Edge(japan, japan, 2), + Edge(japan, netherlands, 240), + Edge(japan, south_korea, 37), + Edge(japan, austria, 234), + Edge(japan, australia, 114), + Edge(japan, switzerland, 227), + Edge(japan, hong_kong, 50), + Edge(japan, ireland, 263), + Edge(japan, china, 81), + Edge(japan, russia, 194), + Edge(japan, spain, 230), + Edge(japan, taiwan, 33), + Edge(japan, poland, 249), + Edge(japan, moldova, 280), + Edge(japan, belgium, 232), + Edge(japan, czechia, 272), + Edge(japan, sweden, 248), + Edge(japan, portugal, 273), + Edge(japan, lithuania, 246), + Edge(japan, india, 259), + Edge(japan, italy, 275), + Edge(japan, vietnam, 110), + Edge(japan, romania, 278), + Edge(japan, norway, 255), + Edge(japan, south_africa, 412), + Edge(japan, mexico, 156), + Edge(japan, denmark, 234), + Edge(japan, ukraine, 255), + Edge(japan, slovenia, 225), + Edge(japan, israel, 292), + Edge(japan, new_zeland, 203), + Edge(japan, argentina, 310), + Edge(japan, thailand, 113), + Edge(japan, bulgaria, 255), + Edge(japan, malta, 274), + Edge(japan, malayasia, 80), + Edge(japan, latvia, 254), + Edge(japan, turkey, 290), + Edge(japan, greece, 312), + Edge(japan, slovakia, 283), + Edge(japan, croatia, 225), + Edge(japan, united_arab_emirates, 341), + Edge(japan, hungary, 242), + Edge(japan, luxembourg, 240), + Edge(japan, indonesia, 80), + Edge(japan, chile, 356), + Edge(japan, estonia, 241), + Edge(netherlands, united_states, 79), + Edge(netherlands, germany, 12), + Edge(netherlands, france, 10), + Edge(netherlands, finland, 27), + Edge(netherlands, canada, 95), + Edge(netherlands, singapore, 163), + Edge(netherlands, united_kingdom, 7), + Edge(netherlands, japan, 240), + Edge(netherlands, netherlands, 2), + Edge(netherlands, south_korea, 273), + Edge(netherlands, austria, 19), + Edge(netherlands, australia, 291), + Edge(netherlands, switzerland, 15), + Edge(netherlands, hong_kong, 239), + Edge(netherlands, ireland, 20), + Edge(netherlands, china, 261), + Edge(netherlands, russia, 50), + Edge(netherlands, spain, 27), + Edge(netherlands, taiwan, 260), + Edge(netherlands, poland, 28), + Edge(netherlands, moldova, 40), + Edge(netherlands, belgium, 5), + Edge(netherlands, czechia, 24), + Edge(netherlands, sweden, 25), + Edge(netherlands, portugal, 42), + Edge(netherlands, lithuania, 32), + Edge(netherlands, india, 158), + Edge(netherlands, italy, 17), + Edge(netherlands, vietnam, 214), + Edge(netherlands, romania, 36), + Edge(netherlands, norway, 21), + Edge(netherlands, south_africa, 183), + Edge(netherlands, mexico, 149), + Edge(netherlands, denmark, 18), + Edge(netherlands, ukraine, 46), + Edge(netherlands, slovenia, 24), + Edge(netherlands, israel, 70), + Edge(netherlands, new_zeland, 275), + Edge(netherlands, argentina, 238), + Edge(netherlands, thailand, 205), + Edge(netherlands, bulgaria, 33), + Edge(netherlands, malta, 41), + Edge(netherlands, malayasia, 168), + Edge(netherlands, latvia, 33), + Edge(netherlands, turkey, 43), + Edge(netherlands, greece, 51), + Edge(netherlands, slovakia, 24), + Edge(netherlands, croatia, 45), + Edge(netherlands, united_arab_emirates, 109), + Edge(netherlands, hungary, 36), + Edge(netherlands, luxembourg, 11), + Edge(netherlands, indonesia, 265), + Edge(netherlands, chile, 227), + Edge(netherlands, estonia, 30), + Edge(south_korea, united_states, 199), + Edge(south_korea, germany, 284), + Edge(south_korea, france, 274), + Edge(south_korea, finland, 266), + Edge(south_korea, canada, 188), + Edge(south_korea, singapore, 107), + Edge(south_korea, united_kingdom, 270), + Edge(south_korea, japan, 35), + Edge(south_korea, netherlands, 273), + Edge(south_korea, south_korea, 2), + Edge(south_korea, austria, 294), + Edge(south_korea, australia, 308), + Edge(south_korea, switzerland, 292), + Edge(south_korea, hong_kong, 181), + Edge(south_korea, ireland, 283), + Edge(south_korea, china, 193), + Edge(south_korea, russia, 275), + Edge(south_korea, spain, 270), + Edge(south_korea, taiwan, 64), + Edge(south_korea, poland, 298), + Edge(south_korea, moldova, 315), + Edge(south_korea, belgium, 277), + Edge(south_korea, czechia, 294), + Edge(south_korea, sweden, 257), + Edge(south_korea, portugal, 293), + Edge(south_korea, lithuania, 276), + Edge(south_korea, india, 390), + Edge(south_korea, italy, 296), + Edge(south_korea, vietnam, 216), + Edge(south_korea, romania, 312), + Edge(south_korea, norway, 289), + Edge(south_korea, south_africa, 399), + Edge(south_korea, mexico, 177), + Edge(south_korea, denmark, 286), + Edge(south_korea, ukraine, 316), + Edge(south_korea, slovenia, 283), + Edge(south_korea, israel, 298), + Edge(south_korea, new_zeland, 321), + Edge(south_korea, argentina, 324), + Edge(south_korea, thailand, 206), + Edge(south_korea, bulgaria, 273), + Edge(south_korea, malta, 309), + Edge(south_korea, malayasia, 105), + Edge(south_korea, latvia, 298), + Edge(south_korea, turkey, 314), + Edge(south_korea, greece, 327), + Edge(south_korea, slovakia, 292), + Edge(south_korea, croatia, 282), + Edge(south_korea, united_arab_emirates, 313), + Edge(south_korea, hungary, 313), + Edge(south_korea, luxembourg, 279), + Edge(south_korea, indonesia, 211), + Edge(south_korea, chile, 316), + Edge(south_korea, estonia, 287), + Edge(austria, united_states, 97), + Edge(austria, germany, 14), + Edge(austria, france, 22), + Edge(austria, finland, 33), + Edge(austria, canada, 110), + Edge(austria, singapore, 167), + Edge(austria, united_kingdom, 28), + Edge(austria, japan, 234), + Edge(austria, netherlands, 19), + Edge(austria, south_korea, 294), + Edge(austria, austria, 2), + Edge(austria, australia, 296), + Edge(austria, switzerland, 15), + Edge(austria, hong_kong, 195), + Edge(austria, ireland, 36), + Edge(austria, china, 253), + Edge(austria, russia, 62), + Edge(austria, spain, 45), + Edge(austria, taiwan, 293), + Edge(austria, poland, 31), + Edge(austria, moldova, 36), + Edge(austria, belgium, 22), + Edge(austria, czechia, 2), + Edge(austria, sweden, 43), + Edge(austria, portugal, 55), + Edge(austria, lithuania, 22), + Edge(austria, india, 168), + Edge(austria, italy, 21), + Edge(austria, vietnam, 277), + Edge(austria, romania, 37), + Edge(austria, norway, 42), + Edge(austria, south_africa, 190), + Edge(austria, mexico, 161), + Edge(austria, denmark, 33), + Edge(austria, ukraine, 42), + Edge(austria, slovenia, 6), + Edge(austria, israel, 73), + Edge(austria, new_zeland, 299), + Edge(austria, argentina, 259), + Edge(austria, thailand, 188), + Edge(austria, bulgaria, 17), + Edge(austria, malta, 45), + Edge(austria, malayasia, 166), + Edge(austria, latvia, 33), + Edge(austria, turkey, 49), + Edge(austria, greece, 32), + Edge(austria, slovakia, 2), + Edge(austria, croatia, 6), + Edge(austria, united_arab_emirates, 128), + Edge(austria, hungary, 6), + Edge(austria, luxembourg, 17), + Edge(austria, indonesia, 201), + Edge(austria, chile, 226), + Edge(austria, estonia, 30), + Edge(australia, australia, 4), + Edge(australia, united_states, 198), + Edge(australia, germany, 278), + Edge(australia, france, 271), + Edge(australia, finland, 278), + Edge(australia, canada, 204), + Edge(australia, singapore, 93), + Edge(australia, united_kingdom, 280), + Edge(australia, japan, 114), + Edge(australia, netherlands, 290), + Edge(australia, south_korea, 308), + Edge(australia, austria, 296), + Edge(australia, switzerland, 283), + Edge(australia, hong_kong, 136), + Edge(australia, ireland, 277), + Edge(australia, china, 361), + Edge(australia, russia, 276), + Edge(australia, spain, 292), + Edge(australia, taiwan, 288), + Edge(australia, poland, 291), + Edge(australia, moldova, 329), + Edge(australia, belgium, 279), + Edge(australia, czechia, 279), + Edge(australia, sweden, 297), + Edge(australia, portugal, 312), + Edge(australia, lithuania, 280), + Edge(australia, india, 321), + Edge(australia, italy, 290), + Edge(australia, vietnam, 166), + Edge(australia, romania, 299), + Edge(australia, norway, 290), + Edge(australia, south_africa, 446), + Edge(australia, mexico, 195), + Edge(australia, denmark, 294), + Edge(australia, ukraine, 323), + Edge(australia, slovenia, 272), + Edge(australia, israel, 320), + Edge(australia, new_zeland, 24), + Edge(australia, argentina, 338), + Edge(australia, thailand, 256), + Edge(australia, bulgaria, 312), + Edge(australia, malta, 307), + Edge(australia, malayasia, 145), + Edge(australia, latvia, 319), + Edge(australia, turkey, 328), + Edge(australia, greece, 305), + Edge(australia, slovakia, 276), + Edge(australia, croatia, 276), + Edge(australia, united_arab_emirates, 284), + Edge(australia, hungary, 291), + Edge(australia, luxembourg, 285), + Edge(australia, indonesia, 118), + Edge(australia, chile, 399), + Edge(australia, estonia, 288), + Edge(switzerland, united_states, 91), + Edge(switzerland, germany, 7), + Edge(switzerland, france, 20), + Edge(switzerland, finland, 40), + Edge(switzerland, canada, 111), + Edge(switzerland, singapore, 169), + Edge(switzerland, united_kingdom, 23), + Edge(switzerland, japan, 227), + Edge(switzerland, netherlands, 15), + Edge(switzerland, south_korea, 292), + Edge(switzerland, austria, 15), + Edge(switzerland, australia, 283), + Edge(switzerland, switzerland, 2), + Edge(switzerland, hong_kong, 212), + Edge(switzerland, ireland, 36), + Edge(switzerland, china, 316), + Edge(switzerland, russia, 46), + Edge(switzerland, spain, 44), + Edge(switzerland, taiwan, 288), + Edge(switzerland, poland, 26), + Edge(switzerland, moldova, 43), + Edge(switzerland, belgium, 21), + Edge(switzerland, czechia, 15), + Edge(switzerland, sweden, 43), + Edge(switzerland, portugal, 56), + Edge(switzerland, lithuania, 39), + Edge(switzerland, india, 163), + Edge(switzerland, italy, 19), + Edge(switzerland, vietnam, 232), + Edge(switzerland, romania, 31), + Edge(switzerland, norway, 31), + Edge(switzerland, south_africa, 185), + Edge(switzerland, mexico, 160), + Edge(switzerland, denmark, 19), + Edge(switzerland, ukraine, 39), + Edge(switzerland, slovenia, 21), + Edge(switzerland, israel, 71), + Edge(switzerland, new_zeland, 317), + Edge(switzerland, argentina, 255), + Edge(switzerland, thailand, 177), + Edge(switzerland, bulgaria, 45), + Edge(switzerland, malta, 48), + Edge(switzerland, malayasia, 172), + Edge(switzerland, latvia, 38), + Edge(switzerland, turkey, 43), + Edge(switzerland, greece, 45), + Edge(switzerland, slovakia, 14), + Edge(switzerland, croatia, 22), + Edge(switzerland, united_arab_emirates, 122), + Edge(switzerland, hungary, 22), + Edge(switzerland, luxembourg, 20), + Edge(switzerland, indonesia, 185), + Edge(switzerland, chile, 233), + Edge(switzerland, estonia, 31), + Edge(hong_kong, united_states, 199), + Edge(hong_kong, germany, 201), + Edge(hong_kong, france, 261), + Edge(hong_kong, finland, 269), + Edge(hong_kong, canada, 241), + Edge(hong_kong, singapore, 33), + Edge(hong_kong, united_kingdom, 215), + Edge(hong_kong, japan, 50), + Edge(hong_kong, netherlands, 239), + Edge(hong_kong, south_korea, 182), + Edge(hong_kong, austria, 195), + Edge(hong_kong, australia, 137), + Edge(hong_kong, switzerland, 211), + Edge(hong_kong, hong_kong, 2), + Edge(hong_kong, ireland, 270), + Edge(hong_kong, china, 44), + Edge(hong_kong, russia, 225), + Edge(hong_kong, spain, 214), + Edge(hong_kong, taiwan, 28), + Edge(hong_kong, poland, 267), + Edge(hong_kong, moldova, 251), + Edge(hong_kong, belgium, 244), + Edge(hong_kong, czechia, 261), + Edge(hong_kong, sweden, 209), + Edge(hong_kong, portugal, 296), + Edge(hong_kong, lithuania, 280), + Edge(hong_kong, india, 112), + Edge(hong_kong, italy, 258), + Edge(hong_kong, vietnam, 50), + Edge(hong_kong, romania, 253), + Edge(hong_kong, norway, 355), + Edge(hong_kong, south_africa, 307), + Edge(hong_kong, mexico, 223), + Edge(hong_kong, denmark, 348), + Edge(hong_kong, ukraine, 289), + Edge(hong_kong, slovenia, 249), + Edge(hong_kong, israel, 233), + Edge(hong_kong, new_zeland, 152), + Edge(hong_kong, argentina, 378), + Edge(hong_kong, thailand, 65), + Edge(hong_kong, bulgaria, 270), + Edge(hong_kong, malta, 273), + Edge(hong_kong, malayasia, 40), + Edge(hong_kong, latvia, 325), + Edge(hong_kong, turkey, 359), + Edge(hong_kong, greece, 270), + Edge(hong_kong, slovakia, 261), + Edge(hong_kong, croatia, 242), + Edge(hong_kong, united_arab_emirates, 229), + Edge(hong_kong, hungary, 269), + Edge(hong_kong, luxembourg, 249), + Edge(hong_kong, indonesia, 47), + Edge(hong_kong, chile, 357), + Edge(hong_kong, estonia, 249), + Edge(ireland, united_states, 79), + Edge(ireland, germany, 26), + Edge(ireland, france, 18), + Edge(ireland, finland, 45), + Edge(ireland, canada, 98), + Edge(ireland, singapore, 253), + Edge(ireland, united_kingdom, 12), + Edge(ireland, japan, 264), + Edge(ireland, netherlands, 20), + Edge(ireland, south_korea, 283), + Edge(ireland, austria, 36), + Edge(ireland, australia, 277), + Edge(ireland, switzerland, 36), + Edge(ireland, hong_kong, 270), + Edge(ireland, ireland, 2), + Edge(ireland, china, 312), + Edge(ireland, russia, 61), + Edge(ireland, spain, 34), + Edge(ireland, taiwan, 271), + Edge(ireland, poland, 42), + Edge(ireland, moldova, 60), + Edge(ireland, belgium, 24), + Edge(ireland, czechia, 40), + Edge(ireland, sweden, 41), + Edge(ireland, portugal, 57), + Edge(ireland, lithuania, 47), + Edge(ireland, india, 165), + Edge(ireland, italy, 35), + Edge(ireland, vietnam, 274), + Edge(ireland, romania, 51), + Edge(ireland, norway, 47), + Edge(ireland, south_africa, 167), + Edge(ireland, mexico, 148), + Edge(ireland, denmark, 32), + Edge(ireland, ukraine, 63), + Edge(ireland, slovenia, 37), + Edge(ireland, israel, 76), + Edge(ireland, new_zeland, 298), + Edge(ireland, argentina, 234), + Edge(ireland, thailand, 253), + Edge(ireland, bulgaria, 62), + Edge(ireland, malta, 59), + Edge(ireland, malayasia, 211), + Edge(ireland, latvia, 58), + Edge(ireland, turkey, 84), + Edge(ireland, greece, 68), + Edge(ireland, slovakia, 39), + Edge(ireland, croatia, 36), + Edge(ireland, united_arab_emirates, 131), + Edge(ireland, hungary, 42), + Edge(ireland, luxembourg, 25), + Edge(ireland, indonesia, 284), + Edge(ireland, chile, 223), + Edge(ireland, estonia, 38), + Edge(china, united_states, 297), + Edge(china, germany, 241), + Edge(china, france, 234), + Edge(china, finland, 203), + Edge(china, canada, 227), + Edge(china, singapore, 220), + Edge(china, united_kingdom, 253), + Edge(china, japan, 115), + Edge(china, netherlands, 262), + Edge(china, south_korea, 223), + Edge(china, austria, 255), + Edge(china, australia, 365), + Edge(china, switzerland, 330), + Edge(china, hong_kong, 43), + Edge(china, ireland, 317), + Edge(china, china, 2), + Edge(china, russia, 139), + Edge(china, spain, 335), + Edge(china, taiwan, 88), + Edge(china, poland, 269), + Edge(china, moldova, 215), + Edge(china, belgium, 366), + Edge(china, czechia, 210), + Edge(china, sweden, 252), + Edge(china, portugal, 281), + Edge(china, lithuania, 259), + Edge(china, india, 241), + Edge(china, italy, 302), + Edge(china, vietnam, 284), + Edge(china, romania, 211), + Edge(china, norway, 229), + Edge(china, south_africa, 231), + Edge(china, mexico, 311), + Edge(china, denmark, 224), + Edge(china, ukraine, 215), + Edge(china, slovenia, 381), + Edge(china, israel, 301), + Edge(china, new_zeland, 355), + Edge(china, argentina, 426), + Edge(china, thailand, 101), + Edge(china, bulgaria, 218), + Edge(china, malta, 312), + Edge(china, malayasia, 170), + Edge(china, latvia, 243), + Edge(china, turkey, 335), + Edge(china, greece, 306), + Edge(china, slovakia, 245), + Edge(china, croatia, 348), + Edge(china, united_arab_emirates, 200), + Edge(china, hungary, 391), + Edge(china, luxembourg, 290), + Edge(china, indonesia, 133), + Edge(china, chile, 374), + Edge(china, estonia, 313), + Edge(russia, united_states, 115), + Edge(russia, germany, 44), + Edge(russia, france, 50), + Edge(russia, finland, 17), + Edge(russia, canada, 136), + Edge(russia, singapore, 178), + Edge(russia, united_kingdom, 46), + Edge(russia, japan, 194), + Edge(russia, netherlands, 50), + Edge(russia, south_korea, 277), + Edge(russia, austria, 62), + Edge(russia, australia, 276), + Edge(russia, switzerland, 45), + Edge(russia, hong_kong, 224), + Edge(russia, ireland, 61), + Edge(russia, china, 139), + Edge(russia, russia, 2), + Edge(russia, spain, 67), + Edge(russia, taiwan, 310), + Edge(russia, poland, 67), + Edge(russia, moldova, 56), + Edge(russia, belgium, 45), + Edge(russia, czechia, 53), + Edge(russia, sweden, 22), + Edge(russia, portugal, 79), + Edge(russia, lithuania, 23), + Edge(russia, india, 196), + Edge(russia, italy, 54), + Edge(russia, vietnam, 315), + Edge(russia, romania, 62), + Edge(russia, norway, 29), + Edge(russia, south_africa, 223), + Edge(russia, mexico, 183), + Edge(russia, denmark, 28), + Edge(russia, ukraine, 11), + Edge(russia, slovenia, 61), + Edge(russia, israel, 99), + Edge(russia, new_zeland, 307), + Edge(russia, argentina, 281), + Edge(russia, thailand, 251), + Edge(russia, bulgaria, 67), + Edge(russia, malta, 79), + Edge(russia, malayasia, 208), + Edge(russia, latvia, 22), + Edge(russia, turkey, 79), + Edge(russia, greece, 82), + Edge(russia, slovakia, 57), + Edge(russia, croatia, 55), + Edge(russia, united_arab_emirates, 134), + Edge(russia, hungary, 60), + Edge(russia, luxembourg, 47), + Edge(russia, indonesia, 199), + Edge(russia, chile, 258), + Edge(russia, estonia, 23), + Edge(spain, united_states, 93), + Edge(spain, germany, 33), + Edge(spain, france, 18), + Edge(spain, finland, 58), + Edge(spain, canada, 115), + Edge(spain, singapore, 190), + Edge(spain, united_kingdom, 24), + Edge(spain, japan, 230), + Edge(spain, netherlands, 27), + Edge(spain, south_korea, 270), + Edge(spain, austria, 45), + Edge(spain, australia, 292), + Edge(spain, switzerland, 44), + Edge(spain, hong_kong, 214), + Edge(spain, ireland, 34), + Edge(spain, china, 342), + Edge(spain, russia, 67), + Edge(spain, spain, 2), + Edge(spain, taiwan, 286), + Edge(spain, poland, 51), + Edge(spain, moldova, 72), + Edge(spain, belgium, 22), + Edge(spain, czechia, 40), + Edge(spain, sweden, 54), + Edge(spain, portugal, 41), + Edge(spain, lithuania, 56), + Edge(spain, india, 155), + Edge(spain, italy, 22), + Edge(spain, vietnam, 291), + Edge(spain, romania, 59), + Edge(spain, norway, 53), + Edge(spain, south_africa, 193), + Edge(spain, mexico, 162), + Edge(spain, denmark, 41), + Edge(spain, ukraine, 65), + Edge(spain, slovenia, 42), + Edge(spain, israel, 79), + Edge(spain, new_zeland, 275), + Edge(spain, argentina, 246), + Edge(spain, thailand, 183), + Edge(spain, bulgaria, 66), + Edge(spain, malta, 52), + Edge(spain, malayasia, 185), + Edge(spain, latvia, 58), + Edge(spain, turkey, 69), + Edge(spain, greece, 69), + Edge(spain, slovakia, 40), + Edge(spain, croatia, 39), + Edge(spain, united_arab_emirates, 120), + Edge(spain, hungary, 48), + Edge(spain, luxembourg, 25), + Edge(spain, indonesia, 218), + Edge(spain, chile, 245), + Edge(spain, estonia, 56), + Edge(taiwan, united_states, 192), + Edge(taiwan, germany, 284), + Edge(taiwan, france, 272), + Edge(taiwan, finland, 290), + Edge(taiwan, canada, 200), + Edge(taiwan, singapore, 54), + Edge(taiwan, united_kingdom, 272), + Edge(taiwan, japan, 33), + Edge(taiwan, netherlands, 259), + Edge(taiwan, south_korea, 66), + Edge(taiwan, austria, 293), + Edge(taiwan, australia, 288), + Edge(taiwan, switzerland, 288), + Edge(taiwan, hong_kong, 31), + Edge(taiwan, ireland, 271), + Edge(taiwan, china, 96), + Edge(taiwan, russia, 311), + Edge(taiwan, spain, 286), + Edge(taiwan, taiwan, 2), + Edge(taiwan, poland, 298), + Edge(taiwan, moldova, 320), + Edge(taiwan, belgium, 279), + Edge(taiwan, czechia, 294), + Edge(taiwan, sweden, 287), + Edge(taiwan, portugal, 299), + Edge(taiwan, lithuania, 290), + Edge(taiwan, india, 131), + Edge(taiwan, italy, 295), + Edge(taiwan, vietnam, 84), + Edge(taiwan, romania, 310), + Edge(taiwan, norway, 290), + Edge(taiwan, south_africa, 280), + Edge(taiwan, mexico, 204), + Edge(taiwan, denmark, 279), + Edge(taiwan, ukraine, 285), + Edge(taiwan, slovenia, 246), + Edge(taiwan, israel, 314), + Edge(taiwan, new_zeland, 176), + Edge(taiwan, argentina, 347), + Edge(taiwan, thailand, 94), + Edge(taiwan, bulgaria, 310), + Edge(taiwan, malta, 307), + Edge(taiwan, malayasia, 67), + Edge(taiwan, latvia, 302), + Edge(taiwan, turkey, 328), + Edge(taiwan, greece, 323), + Edge(taiwan, slovakia, 291), + Edge(taiwan, croatia, 247), + Edge(taiwan, united_arab_emirates, 163), + Edge(taiwan, hungary, 301), + Edge(taiwan, luxembourg, 283), + Edge(taiwan, indonesia, 81), + Edge(taiwan, chile, 379), + Edge(taiwan, estonia, 263), + Edge(poland, united_states, 99), + Edge(poland, germany, 21), + Edge(poland, france, 33), + Edge(poland, finland, 57), + Edge(poland, canada, 129), + Edge(poland, singapore, 190), + Edge(poland, united_kingdom, 31), + Edge(poland, japan, 249), + Edge(poland, netherlands, 28), + Edge(poland, south_korea, 298), + Edge(poland, austria, 32), + Edge(poland, australia, 291), + Edge(poland, switzerland, 26), + Edge(poland, hong_kong, 267), + Edge(poland, ireland, 42), + Edge(poland, china, 243), + Edge(poland, russia, 66), + Edge(poland, spain, 51), + Edge(poland, taiwan, 301), + Edge(poland, poland, 2), + Edge(poland, moldova, 47), + Edge(poland, belgium, 28), + Edge(poland, czechia, 14), + Edge(poland, sweden, 46), + Edge(poland, portugal, 63), + Edge(poland, lithuania, 9), + Edge(poland, india, 183), + Edge(poland, italy, 33), + Edge(poland, vietnam, 226), + Edge(poland, romania, 43), + Edge(poland, norway, 38), + Edge(poland, south_africa, 197), + Edge(poland, mexico, 163), + Edge(poland, denmark, 39), + Edge(poland, ukraine, 22), + Edge(poland, slovenia, 49), + Edge(poland, israel, 82), + Edge(poland, new_zeland, 309), + Edge(poland, argentina, 266), + Edge(poland, thailand, 202), + Edge(poland, bulgaria, 68), + Edge(poland, malta, 53), + Edge(poland, malayasia, 193), + Edge(poland, latvia, 25), + Edge(poland, turkey, 45), + Edge(poland, greece, 39), + Edge(poland, slovakia, 14), + Edge(poland, croatia, 50), + Edge(poland, united_arab_emirates, 143), + Edge(poland, hungary, 44), + Edge(poland, luxembourg, 28), + Edge(poland, indonesia, 290), + Edge(poland, chile, 237), + Edge(poland, estonia, 21), + Edge(moldova, united_states, 129), + Edge(moldova, germany, 34), + Edge(moldova, france, 48), + Edge(moldova, finland, 54), + Edge(moldova, canada, 136), + Edge(moldova, singapore, 196), + Edge(moldova, united_kingdom, 51), + Edge(moldova, japan, 280), + Edge(moldova, netherlands, 40), + Edge(moldova, south_korea, 315), + Edge(moldova, austria, 36), + Edge(moldova, australia, 330), + Edge(moldova, switzerland, 43), + Edge(moldova, hong_kong, 251), + Edge(moldova, ireland, 59), + Edge(moldova, china, 219), + Edge(moldova, russia, 55), + Edge(moldova, spain, 72), + Edge(moldova, taiwan, 321), + Edge(moldova, poland, 47), + Edge(moldova, moldova, 2), + Edge(moldova, belgium, 59), + Edge(moldova, czechia, 40), + Edge(moldova, sweden, 71), + Edge(moldova, portugal, 87), + Edge(moldova, lithuania, 46), + Edge(moldova, india, 199), + Edge(moldova, italy, 46), + Edge(moldova, vietnam, 310), + Edge(moldova, romania, 13), + Edge(moldova, norway, 57), + Edge(moldova, south_africa, 217), + Edge(moldova, mexico, 174), + Edge(moldova, denmark, 54), + Edge(moldova, ukraine, 53), + Edge(moldova, slovenia, 34), + Edge(moldova, israel, 96), + Edge(moldova, new_zeland, 326), + Edge(moldova, argentina, 274), + Edge(moldova, thailand, 268), + Edge(moldova, bulgaria, 27), + Edge(moldova, malta, 76), + Edge(moldova, malayasia, 272), + Edge(moldova, latvia, 62), + Edge(moldova, turkey, 53), + Edge(moldova, greece, 54), + Edge(moldova, slovakia, 29), + Edge(moldova, croatia, 27), + Edge(moldova, united_arab_emirates, 133), + Edge(moldova, hungary, 29), + Edge(moldova, luxembourg, 53), + Edge(moldova, indonesia, 209), + Edge(moldova, chile, 254), + Edge(moldova, estonia, 54), + Edge(belgium, united_states, 90), + Edge(belgium, germany, 11), + Edge(belgium, france, 10), + Edge(belgium, finland, 33), + Edge(belgium, canada, 98), + Edge(belgium, singapore, 167), + Edge(belgium, united_kingdom, 10), + Edge(belgium, japan, 232), + Edge(belgium, netherlands, 6), + Edge(belgium, south_korea, 277), + Edge(belgium, austria, 23), + Edge(belgium, australia, 279), + Edge(belgium, switzerland, 21), + Edge(belgium, hong_kong, 244), + Edge(belgium, ireland, 24), + Edge(belgium, china, 356), + Edge(belgium, russia, 45), + Edge(belgium, spain, 22), + Edge(belgium, taiwan, 281), + Edge(belgium, poland, 29), + Edge(belgium, moldova, 59), + Edge(belgium, belgium, 2), + Edge(belgium, czechia, 25), + Edge(belgium, sweden, 29), + Edge(belgium, portugal, 48), + Edge(belgium, lithuania, 38), + Edge(belgium, india, 139), + Edge(belgium, italy, 20), + Edge(belgium, vietnam, 338), + Edge(belgium, romania, 48), + Edge(belgium, norway, 30), + Edge(belgium, south_africa, 175), + Edge(belgium, mexico, 139), + Edge(belgium, denmark, 17), + Edge(belgium, ukraine, 49), + Edge(belgium, slovenia, 27), + Edge(belgium, israel, 68), + Edge(belgium, new_zeland, 277), + Edge(belgium, argentina, 223), + Edge(belgium, thailand, 185), + Edge(belgium, bulgaria, 44), + Edge(belgium, malta, 44), + Edge(belgium, malayasia, 167), + Edge(belgium, latvia, 37), + Edge(belgium, turkey, 48), + Edge(belgium, greece, 54), + Edge(belgium, slovakia, 24), + Edge(belgium, croatia, 27), + Edge(belgium, united_arab_emirates, 114), + Edge(belgium, hungary, 28), + Edge(belgium, luxembourg, 10), + Edge(belgium, indonesia, 355), + Edge(belgium, chile, 212), + Edge(belgium, estonia, 32), + Edge(czechia, united_states, 95), + Edge(czechia, germany, 14), + Edge(czechia, france, 24), + Edge(czechia, finland, 37), + Edge(czechia, canada, 112), + Edge(czechia, singapore, 245), + Edge(czechia, united_kingdom, 27), + Edge(czechia, japan, 272), + Edge(czechia, netherlands, 24), + Edge(czechia, south_korea, 295), + Edge(czechia, austria, 2), + Edge(czechia, australia, 279), + Edge(czechia, switzerland, 15), + Edge(czechia, hong_kong, 261), + Edge(czechia, ireland, 40), + Edge(czechia, china, 203), + Edge(czechia, russia, 53), + Edge(czechia, spain, 40), + Edge(czechia, taiwan, 294), + Edge(czechia, poland, 14), + Edge(czechia, moldova, 40), + Edge(czechia, belgium, 25), + Edge(czechia, czechia, 2), + Edge(czechia, sweden, 37), + Edge(czechia, portugal, 63), + Edge(czechia, lithuania, 30), + Edge(czechia, india, 230), + Edge(czechia, italy, 18), + Edge(czechia, vietnam, 356), + Edge(czechia, romania, 27), + Edge(czechia, norway, 122), + Edge(czechia, south_africa, 186), + Edge(czechia, mexico, 165), + Edge(czechia, denmark, 21), + Edge(czechia, ukraine, 26), + Edge(czechia, slovenia, 23), + Edge(czechia, israel, 79), + Edge(czechia, new_zeland, 281), + Edge(czechia, argentina, 264), + Edge(czechia, thailand, 193), + Edge(czechia, bulgaria, 15), + Edge(czechia, malta, 47), + Edge(czechia, malayasia, 265), + Edge(czechia, latvia, 37), + Edge(czechia, turkey, 36), + Edge(czechia, greece, 26), + Edge(czechia, slovakia, 1), + Edge(czechia, croatia, 13), + Edge(czechia, united_arab_emirates, 136), + Edge(czechia, hungary, 8), + Edge(czechia, luxembourg, 19), + Edge(czechia, indonesia, 261), + Edge(czechia, chile, 229), + Edge(czechia, estonia, 46), + Edge(sweden, united_states, 98), + Edge(sweden, germany, 28), + Edge(sweden, france, 31), + Edge(sweden, finland, 8), + Edge(sweden, canada, 115), + Edge(sweden, singapore, 180), + Edge(sweden, united_kingdom, 30), + Edge(sweden, japan, 248), + Edge(sweden, netherlands, 25), + Edge(sweden, south_korea, 257), + Edge(sweden, austria, 43), + Edge(sweden, australia, 296), + Edge(sweden, switzerland, 42), + Edge(sweden, hong_kong, 209), + Edge(sweden, ireland, 41), + Edge(sweden, china, 277), + Edge(sweden, russia, 22), + Edge(sweden, spain, 54), + Edge(sweden, taiwan, 286), + Edge(sweden, poland, 45), + Edge(sweden, moldova, 69), + Edge(sweden, belgium, 28), + Edge(sweden, czechia, 37), + Edge(sweden, sweden, 2), + Edge(sweden, portugal, 63), + Edge(sweden, lithuania, 13), + Edge(sweden, india, 179), + Edge(sweden, italy, 41), + Edge(sweden, vietnam, 305), + Edge(sweden, romania, 63), + Edge(sweden, norway, 11), + Edge(sweden, south_africa, 191), + Edge(sweden, mexico, 160), + Edge(sweden, denmark, 11), + Edge(sweden, ukraine, 60), + Edge(sweden, slovenia, 47), + Edge(sweden, israel, 88), + Edge(sweden, new_zeland, 291), + Edge(sweden, argentina, 277), + Edge(sweden, thailand, 216), + Edge(sweden, bulgaria, 66), + Edge(sweden, malta, 63), + Edge(sweden, malayasia, 192), + Edge(sweden, latvia, 9), + Edge(sweden, turkey, 63), + Edge(sweden, greece, 64), + Edge(sweden, slovakia, 37), + Edge(sweden, croatia, 46), + Edge(sweden, united_arab_emirates, 144), + Edge(sweden, hungary, 48), + Edge(sweden, luxembourg, 34), + Edge(sweden, indonesia, 284), + Edge(sweden, chile, 228), + Edge(sweden, estonia, 7), + Edge(portugal, united_states, 107), + Edge(portugal, germany, 45), + Edge(portugal, france, 44), + Edge(portugal, finland, 69), + Edge(portugal, canada, 124), + Edge(portugal, singapore, 196), + Edge(portugal, united_kingdom, 51), + Edge(portugal, japan, 273), + Edge(portugal, netherlands, 41), + Edge(portugal, south_korea, 294), + Edge(portugal, austria, 55), + Edge(portugal, australia, 312), + Edge(portugal, switzerland, 56), + Edge(portugal, hong_kong, 296), + Edge(portugal, ireland, 57), + Edge(portugal, china, 290), + Edge(portugal, russia, 79), + Edge(portugal, spain, 41), + Edge(portugal, taiwan, 298), + Edge(portugal, poland, 63), + Edge(portugal, moldova, 87), + Edge(portugal, belgium, 48), + Edge(portugal, czechia, 63), + Edge(portugal, sweden, 63), + Edge(portugal, portugal, 2), + Edge(portugal, lithuania, 74), + Edge(portugal, india, 183), + Edge(portugal, italy, 57), + Edge(portugal, vietnam, 256), + Edge(portugal, romania, 79), + Edge(portugal, norway, 66), + Edge(portugal, south_africa, 212), + Edge(portugal, mexico, 181), + Edge(portugal, denmark, 57), + Edge(portugal, ukraine, 81), + Edge(portugal, slovenia, 70), + Edge(portugal, israel, 118), + Edge(portugal, new_zeland, 318), + Edge(portugal, argentina, 260), + Edge(portugal, thailand, 220), + Edge(portugal, bulgaria, 96), + Edge(portugal, malta, 77), + Edge(portugal, malayasia, 222), + Edge(portugal, latvia, 72), + Edge(portugal, turkey, 90), + Edge(portugal, greece, 90), + Edge(portugal, slovakia, 63), + Edge(portugal, croatia, 68), + Edge(portugal, united_arab_emirates, 137), + Edge(portugal, hungary, 70), + Edge(portugal, luxembourg, 53), + Edge(portugal, indonesia, 308), + Edge(portugal, chile, 243), + Edge(portugal, estonia, 74), + Edge(lithuania, united_states, 108), + Edge(lithuania, germany, 50), + Edge(lithuania, france, 45), + Edge(lithuania, finland, 13), + Edge(lithuania, canada, 124), + Edge(lithuania, singapore, 185), + Edge(lithuania, united_kingdom, 36), + Edge(lithuania, japan, 246), + Edge(lithuania, netherlands, 32), + Edge(lithuania, south_korea, 276), + Edge(lithuania, austria, 22), + Edge(lithuania, australia, 280), + Edge(lithuania, switzerland, 39), + Edge(lithuania, hong_kong, 280), + Edge(lithuania, ireland, 48), + Edge(lithuania, china, 241), + Edge(lithuania, russia, 23), + Edge(lithuania, spain, 56), + Edge(lithuania, taiwan, 290), + Edge(lithuania, poland, 9), + Edge(lithuania, moldova, 46), + Edge(lithuania, belgium, 38), + Edge(lithuania, czechia, 30), + Edge(lithuania, sweden, 13), + Edge(lithuania, portugal, 74), + Edge(lithuania, lithuania, 2), + Edge(lithuania, india, 163), + Edge(lithuania, italy, 41), + Edge(lithuania, vietnam, 296), + Edge(lithuania, romania, 38), + Edge(lithuania, norway, 36), + Edge(lithuania, south_africa, 198), + Edge(lithuania, mexico, 172), + Edge(lithuania, denmark, 35), + Edge(lithuania, ukraine, 30), + Edge(lithuania, slovenia, 26), + Edge(lithuania, israel, 88), + Edge(lithuania, new_zeland, 294), + Edge(lithuania, argentina, 288), + Edge(lithuania, thailand, 203), + Edge(lithuania, bulgaria, 49), + Edge(lithuania, malta, 74), + Edge(lithuania, malayasia, 184), + Edge(lithuania, latvia, 5), + Edge(lithuania, turkey, 60), + Edge(lithuania, greece, 55), + Edge(lithuania, slovakia, 30), + Edge(lithuania, croatia, 25), + Edge(lithuania, united_arab_emirates, 125), + Edge(lithuania, hungary, 34), + Edge(lithuania, luxembourg, 41), + Edge(lithuania, indonesia, 293), + Edge(lithuania, chile, 247), + Edge(lithuania, estonia, 10), + Edge(india, united_states, 211), + Edge(india, germany, 145), + Edge(india, france, 208), + Edge(india, finland, 176), + Edge(india, canada, 224), + Edge(india, singapore, 69), + Edge(india, united_kingdom, 143), + Edge(india, japan, 259), + Edge(india, netherlands, 150), + Edge(india, south_korea, 390), + Edge(india, austria, 164), + Edge(india, australia, 324), + Edge(india, switzerland, 163), + Edge(india, hong_kong, 112), + Edge(india, ireland, 165), + Edge(india, china, 244), + Edge(india, russia, 196), + Edge(india, spain, 155), + Edge(india, taiwan, 131), + Edge(india, poland, 183), + Edge(india, moldova, 199), + Edge(india, belgium, 139), + Edge(india, czechia, 230), + Edge(india, sweden, 179), + Edge(india, portugal, 183), + Edge(india, lithuania, 163), + Edge(india, india, 2), + Edge(india, italy, 158), + Edge(india, vietnam, 259), + Edge(india, romania, 186), + Edge(india, norway, 172), + Edge(india, south_africa, 371), + Edge(india, mexico, 302), + Edge(india, denmark, 168), + Edge(india, ukraine, 171), + Edge(india, slovenia, 174), + Edge(india, israel, 218), + Edge(india, new_zeland, 343), + Edge(india, argentina, 361), + Edge(india, thailand, 150), + Edge(india, bulgaria, 184), + Edge(india, malta, 178), + Edge(india, malayasia, 89), + Edge(india, latvia, 177), + Edge(india, turkey, 201), + Edge(india, greece, 263), + Edge(india, slovakia, 237), + Edge(india, croatia, 168), + Edge(india, united_arab_emirates, 239), + Edge(india, hungary, 172), + Edge(india, luxembourg, 220), + Edge(india, indonesia, 124), + Edge(india, chile, 343), + Edge(india, estonia, 227), + Edge(italy, united_states, 98), + Edge(italy, germany, 16), + Edge(italy, france, 20), + Edge(italy, finland, 40), + Edge(italy, canada, 119), + Edge(italy, singapore, 174), + Edge(italy, united_kingdom, 27), + Edge(italy, japan, 275), + Edge(italy, netherlands, 17), + Edge(italy, south_korea, 296), + Edge(italy, austria, 21), + Edge(italy, australia, 290), + Edge(italy, switzerland, 19), + Edge(italy, hong_kong, 258), + Edge(italy, ireland, 35), + Edge(italy, china, 292), + Edge(italy, russia, 54), + Edge(italy, spain, 22), + Edge(italy, taiwan, 297), + Edge(italy, poland, 33), + Edge(italy, moldova, 46), + Edge(italy, belgium, 19), + Edge(italy, czechia, 18), + Edge(italy, sweden, 41), + Edge(italy, portugal, 57), + Edge(italy, lithuania, 41), + Edge(italy, india, 157), + Edge(italy, italy, 2), + Edge(italy, vietnam, 211), + Edge(italy, romania, 39), + Edge(italy, norway, 29), + Edge(italy, south_africa, 186), + Edge(italy, mexico, 148), + Edge(italy, denmark, 37), + Edge(italy, ukraine, 54), + Edge(italy, slovenia, 19), + Edge(italy, israel, 61), + Edge(italy, new_zeland, 281), + Edge(italy, argentina, 236), + Edge(italy, thailand, 238), + Edge(italy, bulgaria, 49), + Edge(italy, malta, 25), + Edge(italy, malayasia, 169), + Edge(italy, latvia, 47), + Edge(italy, turkey, 53), + Edge(italy, greece, 48), + Edge(italy, slovakia, 17), + Edge(italy, croatia, 18), + Edge(italy, united_arab_emirates, 127), + Edge(italy, hungary, 25), + Edge(italy, luxembourg, 22), + Edge(italy, indonesia, 271), + Edge(italy, chile, 229), + Edge(italy, estonia, 33), + Edge(vietnam, united_states, 263), + Edge(vietnam, germany, 225), + Edge(vietnam, france, 261), + Edge(vietnam, finland, 225), + Edge(vietnam, canada, 261), + Edge(vietnam, singapore, 56), + Edge(vietnam, united_kingdom, 217), + Edge(vietnam, japan, 110), + Edge(vietnam, netherlands, 217), + Edge(vietnam, south_korea, 216), + Edge(vietnam, austria, 277), + Edge(vietnam, australia, 165), + Edge(vietnam, switzerland, 232), + Edge(vietnam, hong_kong, 50), + Edge(vietnam, ireland, 275), + Edge(vietnam, china, 299), + Edge(vietnam, russia, 316), + Edge(vietnam, spain, 291), + Edge(vietnam, taiwan, 84), + Edge(vietnam, poland, 227), + Edge(vietnam, moldova, 310), + Edge(vietnam, belgium, 337), + Edge(vietnam, czechia, 352), + Edge(vietnam, sweden, 306), + Edge(vietnam, portugal, 256), + Edge(vietnam, lithuania, 296), + Edge(vietnam, india, 259), + Edge(vietnam, italy, 211), + Edge(vietnam, vietnam, 2), + Edge(vietnam, romania, 238), + Edge(vietnam, norway, 222), + Edge(vietnam, south_africa, 321), + Edge(vietnam, mexico, 236), + Edge(vietnam, denmark, 280), + Edge(vietnam, ukraine, 373), + Edge(vietnam, slovenia, 284), + Edge(vietnam, israel, 322), + Edge(vietnam, new_zeland, 178), + Edge(vietnam, argentina, 413), + Edge(vietnam, thailand, 226), + Edge(vietnam, bulgaria, 226), + Edge(vietnam, malta, 299), + Edge(vietnam, malayasia, 56), + Edge(vietnam, latvia, 230), + Edge(vietnam, turkey, 379), + Edge(vietnam, greece, 378), + Edge(vietnam, slovakia, 349), + Edge(vietnam, croatia, 284), + Edge(vietnam, united_arab_emirates, 239), + Edge(vietnam, hungary, 246), + Edge(vietnam, luxembourg, 281), + Edge(vietnam, indonesia, 62), + Edge(vietnam, chile, 378), + Edge(vietnam, estonia, 298), + Edge(romania, united_states, 117), + Edge(romania, germany, 26), + Edge(romania, france, 37), + Edge(romania, finland, 50), + Edge(romania, canada, 127), + Edge(romania, singapore, 186), + Edge(romania, united_kingdom, 41), + Edge(romania, japan, 278), + Edge(romania, netherlands, 36), + Edge(romania, south_korea, 313), + Edge(romania, austria, 37), + Edge(romania, australia, 300), + Edge(romania, switzerland, 31), + Edge(romania, hong_kong, 253), + Edge(romania, ireland, 51), + Edge(romania, china, 215), + Edge(romania, russia, 61), + Edge(romania, spain, 59), + Edge(romania, taiwan, 310), + Edge(romania, poland, 43), + Edge(romania, moldova, 13), + Edge(romania, belgium, 48), + Edge(romania, czechia, 28), + Edge(romania, sweden, 63), + Edge(romania, portugal, 79), + Edge(romania, lithuania, 38), + Edge(romania, india, 186), + Edge(romania, italy, 40), + Edge(romania, vietnam, 238), + Edge(romania, romania, 2), + Edge(romania, norway, 50), + Edge(romania, south_africa, 206), + Edge(romania, mexico, 167), + Edge(romania, denmark, 49), + Edge(romania, ukraine, 55), + Edge(romania, slovenia, 43), + Edge(romania, israel, 90), + Edge(romania, new_zeland, 305), + Edge(romania, argentina, 264), + Edge(romania, thailand, 205), + Edge(romania, bulgaria, 16), + Edge(romania, malta, 71), + Edge(romania, malayasia, 185), + Edge(romania, latvia, 44), + Edge(romania, turkey, 42), + Edge(romania, greece, 46), + Edge(romania, slovakia, 27), + Edge(romania, croatia, 29), + Edge(romania, united_arab_emirates, 126), + Edge(romania, hungary, 23), + Edge(romania, luxembourg, 45), + Edge(romania, indonesia, 293), + Edge(romania, chile, 248), + Edge(romania, estonia, 49), + Edge(norway, united_states, 103), + Edge(norway, germany, 29), + Edge(norway, france, 107), + Edge(norway, finland, 17), + Edge(norway, canada, 118), + Edge(norway, singapore, 176), + Edge(norway, united_kingdom, 28), + Edge(norway, japan, 255), + Edge(norway, netherlands, 21), + Edge(norway, south_korea, 290), + Edge(norway, austria, 42), + Edge(norway, australia, 290), + Edge(norway, switzerland, 31), + Edge(norway, hong_kong, 355), + Edge(norway, ireland, 47), + Edge(norway, china, 242), + Edge(norway, russia, 29), + Edge(norway, spain, 53), + Edge(norway, taiwan, 292), + Edge(norway, poland, 38), + Edge(norway, moldova, 57), + Edge(norway, belgium, 30), + Edge(norway, czechia, 122), + Edge(norway, sweden, 11), + Edge(norway, portugal, 66), + Edge(norway, lithuania, 36), + Edge(norway, india, 172), + Edge(norway, italy, 29), + Edge(norway, vietnam, 221), + Edge(norway, romania, 50), + Edge(norway, norway, 2), + Edge(norway, south_africa, 199), + Edge(norway, mexico, 151), + Edge(norway, denmark, 10), + Edge(norway, ukraine, 53), + Edge(norway, slovenia, 41), + Edge(norway, israel, 92), + Edge(norway, new_zeland, 288), + Edge(norway, argentina, 263), + Edge(norway, thailand, 234), + Edge(norway, bulgaria, 51), + Edge(norway, malta, 61), + Edge(norway, malayasia, 254), + Edge(norway, latvia, 19), + Edge(norway, turkey, 57), + Edge(norway, greece, 148), + Edge(norway, slovakia, 122), + Edge(norway, croatia, 38), + Edge(norway, united_arab_emirates, 145), + Edge(norway, hungary, 47), + Edge(norway, luxembourg, 34), + Edge(norway, indonesia, 368), + Edge(norway, chile, 223), + Edge(norway, estonia, 16), + Edge(south_africa, united_states, 238), + Edge(south_africa, germany, 173), + Edge(south_africa, france, 169), + Edge(south_africa, finland, 190), + Edge(south_africa, canada, 252), + Edge(south_africa, singapore, 346), + Edge(south_africa, united_kingdom, 157), + Edge(south_africa, japan, 411), + Edge(south_africa, netherlands, 183), + Edge(south_africa, south_korea, 399), + Edge(south_africa, austria, 190), + Edge(south_africa, australia, 447), + Edge(south_africa, switzerland, 185), + Edge(south_africa, hong_kong, 307), + Edge(south_africa, ireland, 167), + Edge(south_africa, china, 231), + Edge(south_africa, russia, 223), + Edge(south_africa, spain, 193), + Edge(south_africa, taiwan, 280), + Edge(south_africa, poland, 197), + Edge(south_africa, moldova, 217), + Edge(south_africa, belgium, 174), + Edge(south_africa, czechia, 187), + Edge(south_africa, sweden, 192), + Edge(south_africa, portugal, 212), + Edge(south_africa, lithuania, 198), + Edge(south_africa, india, 371), + Edge(south_africa, italy, 186), + Edge(south_africa, vietnam, 321), + Edge(south_africa, romania, 206), + Edge(south_africa, norway, 199), + Edge(south_africa, south_africa, 2), + Edge(south_africa, mexico, 309), + Edge(south_africa, denmark, 183), + Edge(south_africa, ukraine, 201), + Edge(south_africa, slovenia, 186), + Edge(south_africa, israel, 216), + Edge(south_africa, new_zeland, 443), + Edge(south_africa, argentina, 410), + Edge(south_africa, thailand, 293), + Edge(south_africa, bulgaria, 198), + Edge(south_africa, malta, 199), + Edge(south_africa, malayasia, 278), + Edge(south_africa, latvia, 203), + Edge(south_africa, turkey, 210), + Edge(south_africa, greece, 222), + Edge(south_africa, slovakia, 188), + Edge(south_africa, croatia, 186), + Edge(south_africa, united_arab_emirates, 198), + Edge(south_africa, hungary, 186), + Edge(south_africa, luxembourg, 178), + Edge(south_africa, indonesia, 283), + Edge(south_africa, chile, 416), + Edge(south_africa, estonia, 192), + Edge(mexico, united_states, 67), + Edge(mexico, germany, 142), + Edge(mexico, france, 137), + Edge(mexico, finland, 165), + Edge(mexico, canada, 75), + Edge(mexico, singapore, 231), + Edge(mexico, united_kingdom, 135), + Edge(mexico, japan, 156), + Edge(mexico, netherlands, 149), + Edge(mexico, south_korea, 177), + Edge(mexico, austria, 161), + Edge(mexico, australia, 194), + Edge(mexico, switzerland, 160), + Edge(mexico, hong_kong, 223), + Edge(mexico, ireland, 148), + Edge(mexico, china, 312), + Edge(mexico, russia, 183), + Edge(mexico, spain, 162), + Edge(mexico, taiwan, 204), + Edge(mexico, poland, 163), + Edge(mexico, moldova, 174), + Edge(mexico, belgium, 139), + Edge(mexico, czechia, 165), + Edge(mexico, sweden, 160), + Edge(mexico, portugal, 181), + Edge(mexico, lithuania, 172), + Edge(mexico, india, 302), + Edge(mexico, italy, 148), + Edge(mexico, vietnam, 236), + Edge(mexico, romania, 167), + Edge(mexico, norway, 151), + Edge(mexico, south_africa, 308), + Edge(mexico, mexico, 2), + Edge(mexico, denmark, 145), + Edge(mexico, ukraine, 178), + Edge(mexico, slovenia, 165), + Edge(mexico, israel, 193), + Edge(mexico, new_zeland, 220), + Edge(mexico, argentina, 199), + Edge(mexico, thailand, 291), + Edge(mexico, bulgaria, 170), + Edge(mexico, malta, 172), + Edge(mexico, malayasia, 237), + Edge(mexico, latvia, 170), + Edge(mexico, turkey, 199), + Edge(mexico, greece, 193), + Edge(mexico, slovakia, 165), + Edge(mexico, croatia, 161), + Edge(mexico, united_arab_emirates, 239), + Edge(mexico, hungary, 185), + Edge(mexico, luxembourg, 142), + Edge(mexico, indonesia, 275), + Edge(mexico, chile, 155), + Edge(mexico, estonia, 165), + Edge(denmark, united_states, 100), + Edge(denmark, germany, 13), + Edge(denmark, france, 24), + Edge(denmark, finland, 28), + Edge(denmark, canada, 108), + Edge(denmark, singapore, 170), + Edge(denmark, united_kingdom, 17), + Edge(denmark, japan, 234), + Edge(denmark, netherlands, 17), + Edge(denmark, south_korea, 286), + Edge(denmark, austria, 33), + Edge(denmark, australia, 294), + Edge(denmark, switzerland, 19), + Edge(denmark, hong_kong, 348), + Edge(denmark, ireland, 32), + Edge(denmark, china, 238), + Edge(denmark, russia, 28), + Edge(denmark, spain, 41), + Edge(denmark, taiwan, 280), + Edge(denmark, poland, 39), + Edge(denmark, moldova, 54), + Edge(denmark, belgium, 17), + Edge(denmark, czechia, 21), + Edge(denmark, sweden, 11), + Edge(denmark, portugal, 57), + Edge(denmark, lithuania, 35), + Edge(denmark, india, 168), + Edge(denmark, italy, 37), + Edge(denmark, vietnam, 280), + Edge(denmark, romania, 49), + Edge(denmark, norway, 10), + Edge(denmark, south_africa, 183), + Edge(denmark, mexico, 145), + Edge(denmark, denmark, 2), + Edge(denmark, ukraine, 46), + Edge(denmark, slovenia, 45), + Edge(denmark, israel, 75), + Edge(denmark, new_zeland, 291), + Edge(denmark, argentina, 252), + Edge(denmark, thailand, 197), + Edge(denmark, bulgaria, 50), + Edge(denmark, malta, 47), + Edge(denmark, malayasia, 174), + Edge(denmark, latvia, 30), + Edge(denmark, turkey, 57), + Edge(denmark, greece, 48), + Edge(denmark, slovakia, 21), + Edge(denmark, croatia, 35), + Edge(denmark, united_arab_emirates, 129), + Edge(denmark, hungary, 32), + Edge(denmark, luxembourg, 20), + Edge(denmark, indonesia, 358), + Edge(denmark, chile, 223), + Edge(denmark, estonia, 28), + Edge(ukraine, united_states, 122), + Edge(ukraine, germany, 32), + Edge(ukraine, france, 48), + Edge(ukraine, finland, 57), + Edge(ukraine, canada, 128), + Edge(ukraine, singapore, 268), + Edge(ukraine, united_kingdom, 49), + Edge(ukraine, japan, 255), + Edge(ukraine, netherlands, 46), + Edge(ukraine, south_korea, 317), + Edge(ukraine, austria, 42), + Edge(ukraine, australia, 323), + Edge(ukraine, switzerland, 39), + Edge(ukraine, hong_kong, 289), + Edge(ukraine, ireland, 63), + Edge(ukraine, china, 251), + Edge(ukraine, russia, 11), + Edge(ukraine, spain, 65), + Edge(ukraine, taiwan, 285), + Edge(ukraine, poland, 22), + Edge(ukraine, moldova, 53), + Edge(ukraine, belgium, 49), + Edge(ukraine, czechia, 26), + Edge(ukraine, sweden, 60), + Edge(ukraine, portugal, 81), + Edge(ukraine, lithuania, 30), + Edge(ukraine, india, 171), + Edge(ukraine, italy, 54), + Edge(ukraine, vietnam, 378), + Edge(ukraine, romania, 55), + Edge(ukraine, norway, 53), + Edge(ukraine, south_africa, 201), + Edge(ukraine, mexico, 178), + Edge(ukraine, denmark, 46), + Edge(ukraine, ukraine, 2), + Edge(ukraine, slovenia, 36), + Edge(ukraine, israel, 94), + Edge(ukraine, new_zeland, 303), + Edge(ukraine, argentina, 281), + Edge(ukraine, thailand, 214), + Edge(ukraine, bulgaria, 47), + Edge(ukraine, malta, 74), + Edge(ukraine, malayasia, 197), + Edge(ukraine, latvia, 46), + Edge(ukraine, turkey, 64), + Edge(ukraine, greece, 48), + Edge(ukraine, slovakia, 26), + Edge(ukraine, croatia, 34), + Edge(ukraine, united_arab_emirates, 155), + Edge(ukraine, hungary, 32), + Edge(ukraine, luxembourg, 46), + Edge(ukraine, indonesia, 284), + Edge(ukraine, chile, 250), + Edge(ukraine, estonia, 39), + Edge(slovenia, united_states, 92), + Edge(slovenia, germany, 29), + Edge(slovenia, france, 44), + Edge(slovenia, finland, 33), + Edge(slovenia, canada, 107), + Edge(slovenia, singapore, 185), + Edge(slovenia, united_kingdom, 33), + Edge(slovenia, japan, 225), + Edge(slovenia, netherlands, 24), + Edge(slovenia, south_korea, 283), + Edge(slovenia, austria, 6), + Edge(slovenia, australia, 273), + Edge(slovenia, switzerland, 21), + Edge(slovenia, hong_kong, 249), + Edge(slovenia, ireland, 37), + Edge(slovenia, china, 389), + Edge(slovenia, russia, 61), + Edge(slovenia, spain, 42), + Edge(slovenia, taiwan, 246), + Edge(slovenia, poland, 49), + Edge(slovenia, moldova, 34), + Edge(slovenia, belgium, 26), + Edge(slovenia, czechia, 23), + Edge(slovenia, sweden, 47), + Edge(slovenia, portugal, 70), + Edge(slovenia, lithuania, 27), + Edge(slovenia, india, 174), + Edge(slovenia, italy, 19), + Edge(slovenia, vietnam, 283), + Edge(slovenia, romania, 43), + Edge(slovenia, norway, 41), + Edge(slovenia, south_africa, 186), + Edge(slovenia, mexico, 165), + Edge(slovenia, denmark, 45), + Edge(slovenia, ukraine, 37), + Edge(slovenia, slovenia, 2), + Edge(slovenia, israel, 90), + Edge(slovenia, new_zeland, 310), + Edge(slovenia, argentina, 262), + Edge(slovenia, thailand, 234), + Edge(slovenia, bulgaria, 20), + Edge(slovenia, malta, 50), + Edge(slovenia, malayasia, 169), + Edge(slovenia, latvia, 28), + Edge(slovenia, turkey, 57), + Edge(slovenia, greece, 44), + Edge(slovenia, slovakia, 24), + Edge(slovenia, croatia, 12), + Edge(slovenia, united_arab_emirates, 140), + Edge(slovenia, hungary, 11), + Edge(slovenia, luxembourg, 32), + Edge(slovenia, indonesia, 185), + Edge(slovenia, chile, 226), + Edge(slovenia, estonia, 37), + Edge(israel, united_states, 132), + Edge(israel, germany, 68), + Edge(israel, france, 68), + Edge(israel, finland, 85), + Edge(israel, canada, 149), + Edge(israel, singapore, 197), + Edge(israel, united_kingdom, 65), + Edge(israel, japan, 292), + Edge(israel, netherlands, 70), + Edge(israel, south_korea, 298), + Edge(israel, austria, 73), + Edge(israel, australia, 319), + Edge(israel, switzerland, 71), + Edge(israel, hong_kong, 233), + Edge(israel, ireland, 76), + Edge(israel, china, 274), + Edge(israel, russia, 99), + Edge(israel, spain, 79), + Edge(israel, taiwan, 314), + Edge(israel, poland, 82), + Edge(israel, moldova, 96), + Edge(israel, belgium, 68), + Edge(israel, czechia, 79), + Edge(israel, sweden, 88), + Edge(israel, portugal, 118), + Edge(israel, lithuania, 88), + Edge(israel, india, 218), + Edge(israel, italy, 61), + Edge(israel, vietnam, 322), + Edge(israel, romania, 90), + Edge(israel, norway, 92), + Edge(israel, south_africa, 216), + Edge(israel, mexico, 193), + Edge(israel, denmark, 75), + Edge(israel, ukraine, 94), + Edge(israel, slovenia, 90), + Edge(israel, israel, 2), + Edge(israel, new_zeland, 328), + Edge(israel, argentina, 294), + Edge(israel, thailand, 261), + Edge(israel, bulgaria, 87), + Edge(israel, malta, 97), + Edge(israel, malayasia, 226), + Edge(israel, latvia, 89), + Edge(israel, turkey, 97), + Edge(israel, greece, 107), + Edge(israel, slovakia, 81), + Edge(israel, croatia, 81), + Edge(israel, united_arab_emirates, 163), + Edge(israel, hungary, 81), + Edge(israel, luxembourg, 67), + Edge(israel, indonesia, 234), + Edge(israel, chile, 263), + Edge(israel, estonia, 84), + Edge(new_zeland, united_states, 219), + Edge(new_zeland, germany, 287), + Edge(new_zeland, france, 287), + Edge(new_zeland, finland, 297), + Edge(new_zeland, canada, 229), + Edge(new_zeland, singapore, 116), + Edge(new_zeland, united_kingdom, 267), + Edge(new_zeland, japan, 206), + Edge(new_zeland, netherlands, 275), + Edge(new_zeland, south_korea, 321), + Edge(new_zeland, austria, 299), + Edge(new_zeland, australia, 24), + Edge(new_zeland, switzerland, 316), + Edge(new_zeland, hong_kong, 152), + Edge(new_zeland, ireland, 298), + Edge(new_zeland, china, 349), + Edge(new_zeland, russia, 307), + Edge(new_zeland, spain, 275), + Edge(new_zeland, taiwan, 182), + Edge(new_zeland, poland, 312), + Edge(new_zeland, moldova, 326), + Edge(new_zeland, belgium, 277), + Edge(new_zeland, czechia, 281), + Edge(new_zeland, sweden, 291), + Edge(new_zeland, portugal, 321), + Edge(new_zeland, lithuania, 297), + Edge(new_zeland, india, 340), + Edge(new_zeland, italy, 280), + Edge(new_zeland, vietnam, 178), + Edge(new_zeland, romania, 304), + Edge(new_zeland, norway, 288), + Edge(new_zeland, south_africa, 445), + Edge(new_zeland, mexico, 217), + Edge(new_zeland, denmark, 291), + Edge(new_zeland, ukraine, 303), + Edge(new_zeland, slovenia, 309), + Edge(new_zeland, israel, 331), + Edge(new_zeland, new_zeland, 2), + Edge(new_zeland, argentina, 354), + Edge(new_zeland, thailand, 289), + Edge(new_zeland, bulgaria, 315), + Edge(new_zeland, malta, 312), + Edge(new_zeland, malayasia, 163), + Edge(new_zeland, latvia, 311), + Edge(new_zeland, turkey, 318), + Edge(new_zeland, greece, 315), + Edge(new_zeland, slovakia, 297), + Edge(new_zeland, croatia, 308), + Edge(new_zeland, united_arab_emirates, 294), + Edge(new_zeland, hungary, 298), + Edge(new_zeland, luxembourg, 301), + Edge(new_zeland, indonesia, 130), + Edge(new_zeland, chile, 332), + Edge(new_zeland, estonia, 316), + Edge(argentina, united_states, 165), + Edge(argentina, germany, 234), + Edge(argentina, france, 240), + Edge(argentina, finland, 279), + Edge(argentina, canada, 177), + Edge(argentina, singapore, 373), + Edge(argentina, united_kingdom, 232), + Edge(argentina, japan, 310), + Edge(argentina, netherlands, 241), + Edge(argentina, south_korea, 324), + Edge(argentina, austria, 259), + Edge(argentina, australia, 328), + Edge(argentina, switzerland, 255), + Edge(argentina, hong_kong, 378), + Edge(argentina, ireland, 236), + Edge(argentina, china, 455), + Edge(argentina, russia, 283), + Edge(argentina, spain, 246), + Edge(argentina, taiwan, 347), + Edge(argentina, poland, 266), + Edge(argentina, moldova, 275), + Edge(argentina, belgium, 222), + Edge(argentina, czechia, 261), + Edge(argentina, sweden, 276), + Edge(argentina, portugal, 260), + Edge(argentina, lithuania, 288), + Edge(argentina, india, 363), + Edge(argentina, italy, 237), + Edge(argentina, vietnam, 409), + Edge(argentina, romania, 263), + Edge(argentina, norway, 264), + Edge(argentina, south_africa, 410), + Edge(argentina, mexico, 199), + Edge(argentina, denmark, 253), + Edge(argentina, ukraine, 281), + Edge(argentina, slovenia, 262), + Edge(argentina, israel, 295), + Edge(argentina, new_zeland, 355), + Edge(argentina, argentina, 2), + Edge(argentina, thailand, 390), + Edge(argentina, bulgaria, 260), + Edge(argentina, malta, 259), + Edge(argentina, malayasia, 377), + Edge(argentina, latvia, 253), + Edge(argentina, turkey, 264), + Edge(argentina, greece, 291), + Edge(argentina, slovakia, 262), + Edge(argentina, croatia, 268), + Edge(argentina, united_arab_emirates, 346), + Edge(argentina, hungary, 252), + Edge(argentina, luxembourg, 227), + Edge(argentina, indonesia, 398), + Edge(argentina, chile, 158), + Edge(argentina, estonia, 270), + Edge(thailand, united_states, 282), + Edge(thailand, germany, 205), + Edge(thailand, france, 176), + Edge(thailand, finland, 212), + Edge(thailand, canada, 283), + Edge(thailand, singapore, 31), + Edge(thailand, united_kingdom, 256), + Edge(thailand, japan, 112), + Edge(thailand, netherlands, 205), + Edge(thailand, south_korea, 208), + Edge(thailand, austria, 188), + Edge(thailand, australia, 257), + Edge(thailand, switzerland, 177), + Edge(thailand, hong_kong, 65), + Edge(thailand, ireland, 254), + Edge(thailand, china, 120), + Edge(thailand, russia, 252), + Edge(thailand, spain, 182), + Edge(thailand, taiwan, 93), + Edge(thailand, poland, 201), + Edge(thailand, moldova, 269), + Edge(thailand, belgium, 185), + Edge(thailand, czechia, 192), + Edge(thailand, sweden, 216), + Edge(thailand, portugal, 221), + Edge(thailand, lithuania, 203), + Edge(thailand, india, 151), + Edge(thailand, italy, 242), + Edge(thailand, vietnam, 226), + Edge(thailand, romania, 206), + Edge(thailand, norway, 234), + Edge(thailand, south_africa, 292), + Edge(thailand, mexico, 291), + Edge(thailand, denmark, 198), + Edge(thailand, ukraine, 214), + Edge(thailand, slovenia, 233), + Edge(thailand, israel, 261), + Edge(thailand, new_zeland, 289), + Edge(thailand, argentina, 392), + Edge(thailand, thailand, 2), + Edge(thailand, bulgaria, 197), + Edge(thailand, malta, 226), + Edge(thailand, malayasia, 37), + Edge(thailand, latvia, 208), + Edge(thailand, turkey, 256), + Edge(thailand, greece, 259), + Edge(thailand, slovakia, 194), + Edge(thailand, croatia, 186), + Edge(thailand, united_arab_emirates, 212), + Edge(thailand, hungary, 196), + Edge(thailand, luxembourg, 183), + Edge(thailand, indonesia, 44), + Edge(thailand, chile, 373), + Edge(thailand, estonia, 227), + Edge(bulgaria, united_states, 104), + Edge(bulgaria, germany, 27), + Edge(bulgaria, france, 41), + Edge(bulgaria, finland, 43), + Edge(bulgaria, canada, 128), + Edge(bulgaria, singapore, 172), + Edge(bulgaria, united_kingdom, 40), + Edge(bulgaria, japan, 255), + Edge(bulgaria, netherlands, 34), + Edge(bulgaria, south_korea, 272), + Edge(bulgaria, austria, 17), + Edge(bulgaria, australia, 312), + Edge(bulgaria, switzerland, 45), + Edge(bulgaria, hong_kong, 270), + Edge(bulgaria, ireland, 62), + Edge(bulgaria, china, 217), + Edge(bulgaria, russia, 67), + Edge(bulgaria, spain, 66), + Edge(bulgaria, taiwan, 310), + Edge(bulgaria, poland, 67), + Edge(bulgaria, moldova, 26), + Edge(bulgaria, belgium, 44), + Edge(bulgaria, czechia, 15), + Edge(bulgaria, sweden, 66), + Edge(bulgaria, portugal, 96), + Edge(bulgaria, lithuania, 49), + Edge(bulgaria, india, 184), + Edge(bulgaria, italy, 49), + Edge(bulgaria, vietnam, 225), + Edge(bulgaria, romania, 16), + Edge(bulgaria, norway, 51), + Edge(bulgaria, south_africa, 198), + Edge(bulgaria, mexico, 171), + Edge(bulgaria, denmark, 50), + Edge(bulgaria, ukraine, 47), + Edge(bulgaria, slovenia, 20), + Edge(bulgaria, israel, 87), + Edge(bulgaria, new_zeland, 308), + Edge(bulgaria, argentina, 260), + Edge(bulgaria, thailand, 198), + Edge(bulgaria, bulgaria, 2), + Edge(bulgaria, malta, 67), + Edge(bulgaria, malayasia, 185), + Edge(bulgaria, latvia, 54), + Edge(bulgaria, turkey, 33), + Edge(bulgaria, greece, 14), + Edge(bulgaria, slovakia, 14), + Edge(bulgaria, croatia, 17), + Edge(bulgaria, united_arab_emirates, 128), + Edge(bulgaria, hungary, 14), + Edge(bulgaria, luxembourg, 47), + Edge(bulgaria, indonesia, 291), + Edge(bulgaria, chile, 261), + Edge(bulgaria, estonia, 48), + Edge(malta, united_states, 125), + Edge(malta, germany, 33), + Edge(malta, france, 43), + Edge(malta, finland, 59), + Edge(malta, canada, 134), + Edge(malta, singapore, 284), + Edge(malta, united_kingdom, 46), + Edge(malta, japan, 274), + Edge(malta, netherlands, 41), + Edge(malta, south_korea, 308), + Edge(malta, austria, 45), + Edge(malta, australia, 307), + Edge(malta, switzerland, 48), + Edge(malta, hong_kong, 273), + Edge(malta, ireland, 59), + Edge(malta, china, 326), + Edge(malta, russia, 79), + Edge(malta, spain, 52), + Edge(malta, taiwan, 309), + Edge(malta, poland, 53), + Edge(malta, moldova, 76), + Edge(malta, belgium, 44), + Edge(malta, czechia, 47), + Edge(malta, sweden, 63), + Edge(malta, portugal, 77), + Edge(malta, lithuania, 74), + Edge(malta, india, 178), + Edge(malta, italy, 25), + Edge(malta, vietnam, 300), + Edge(malta, romania, 71), + Edge(malta, norway, 61), + Edge(malta, south_africa, 199), + Edge(malta, mexico, 172), + Edge(malta, denmark, 47), + Edge(malta, ukraine, 74), + Edge(malta, slovenia, 50), + Edge(malta, israel, 97), + Edge(malta, new_zeland, 309), + Edge(malta, argentina, 258), + Edge(malta, thailand, 226), + Edge(malta, bulgaria, 67), + Edge(malta, malta, 2), + Edge(malta, malayasia, 203), + Edge(malta, latvia, 59), + Edge(malta, turkey, 72), + Edge(malta, greece, 77), + Edge(malta, slovakia, 47), + Edge(malta, croatia, 51), + Edge(malta, united_arab_emirates, 156), + Edge(malta, hungary, 50), + Edge(malta, luxembourg, 46), + Edge(malta, indonesia, 385), + Edge(malta, chile, 248), + Edge(malta, estonia, 62), + Edge(malayasia, united_states, 213), + Edge(malayasia, germany, 165), + Edge(malayasia, france, 245), + Edge(malayasia, finland, 185), + Edge(malayasia, canada, 248), + Edge(malayasia, singapore, 8), + Edge(malayasia, united_kingdom, 193), + Edge(malayasia, japan, 80), + Edge(malayasia, netherlands, 168), + Edge(malayasia, south_korea, 104), + Edge(malayasia, austria, 166), + Edge(malayasia, australia, 145), + Edge(malayasia, switzerland, 173), + Edge(malayasia, hong_kong, 41), + Edge(malayasia, ireland, 211), + Edge(malayasia, china, 139), + Edge(malayasia, russia, 207), + Edge(malayasia, spain, 185), + Edge(malayasia, taiwan, 67), + Edge(malayasia, poland, 193), + Edge(malayasia, moldova, 272), + Edge(malayasia, belgium, 168), + Edge(malayasia, czechia, 265), + Edge(malayasia, sweden, 193), + Edge(malayasia, portugal, 202), + Edge(malayasia, lithuania, 185), + Edge(malayasia, india, 89), + Edge(malayasia, italy, 170), + Edge(malayasia, vietnam, 56), + Edge(malayasia, romania, 185), + Edge(malayasia, norway, 254), + Edge(malayasia, south_africa, 277), + Edge(malayasia, mexico, 237), + Edge(malayasia, denmark, 174), + Edge(malayasia, ukraine, 197), + Edge(malayasia, slovenia, 169), + Edge(malayasia, israel, 227), + Edge(malayasia, new_zeland, 162), + Edge(malayasia, argentina, 383), + Edge(malayasia, thailand, 38), + Edge(malayasia, bulgaria, 185), + Edge(malayasia, malta, 203), + Edge(malayasia, malayasia, 2), + Edge(malayasia, latvia, 198), + Edge(malayasia, turkey, 198), + Edge(malayasia, greece, 197), + Edge(malayasia, slovakia, 265), + Edge(malayasia, croatia, 169), + Edge(malayasia, united_arab_emirates, 278), + Edge(malayasia, hungary, 191), + Edge(malayasia, luxembourg, 177), + Edge(malayasia, indonesia, 58), + Edge(malayasia, chile, 371), + Edge(malayasia, estonia, 181), + Edge(latvia, united_states, 107), + Edge(latvia, germany, 33), + Edge(latvia, france, 48), + Edge(latvia, finland, 8), + Edge(latvia, canada, 117), + Edge(latvia, singapore, 183), + Edge(latvia, united_kingdom, 39), + Edge(latvia, japan, 255), + Edge(latvia, netherlands, 33), + Edge(latvia, south_korea, 298), + Edge(latvia, austria, 34), + Edge(latvia, australia, 319), + Edge(latvia, switzerland, 38), + Edge(latvia, hong_kong, 325), + Edge(latvia, ireland, 58), + Edge(latvia, china, 240), + Edge(latvia, russia, 22), + Edge(latvia, spain, 58), + Edge(latvia, taiwan, 302), + Edge(latvia, poland, 25), + Edge(latvia, moldova, 62), + Edge(latvia, belgium, 37), + Edge(latvia, czechia, 37), + Edge(latvia, sweden, 9), + Edge(latvia, portugal, 72), + Edge(latvia, lithuania, 5), + Edge(latvia, india, 177), + Edge(latvia, italy, 47), + Edge(latvia, vietnam, 230), + Edge(latvia, romania, 44), + Edge(latvia, norway, 19), + Edge(latvia, south_africa, 203), + Edge(latvia, mexico, 170), + Edge(latvia, denmark, 30), + Edge(latvia, ukraine, 47), + Edge(latvia, slovenia, 28), + Edge(latvia, israel, 89), + Edge(latvia, new_zeland, 313), + Edge(latvia, argentina, 253), + Edge(latvia, thailand, 206), + Edge(latvia, bulgaria, 54), + Edge(latvia, malta, 59), + Edge(latvia, malayasia, 199), + Edge(latvia, latvia, 2), + Edge(latvia, turkey, 66), + Edge(latvia, greece, 59), + Edge(latvia, slovakia, 34), + Edge(latvia, croatia, 30), + Edge(latvia, united_arab_emirates, 143), + Edge(latvia, hungary, 58), + Edge(latvia, luxembourg, 38), + Edge(latvia, indonesia, 370), + Edge(latvia, chile, 247), + Edge(latvia, estonia, 7), + Edge(turkey, united_states, 136), + Edge(turkey, germany, 36), + Edge(turkey, france, 53), + Edge(turkey, finland, 62), + Edge(turkey, canada, 137), + Edge(turkey, singapore, 284), + Edge(turkey, united_kingdom, 48), + Edge(turkey, japan, 289), + Edge(turkey, netherlands, 43), + Edge(turkey, south_korea, 316), + Edge(turkey, austria, 48), + Edge(turkey, australia, 329), + Edge(turkey, switzerland, 43), + Edge(turkey, hong_kong, 359), + Edge(turkey, ireland, 73), + Edge(turkey, china, 318), + Edge(turkey, russia, 79), + Edge(turkey, spain, 68), + Edge(turkey, taiwan, 329), + Edge(turkey, poland, 44), + Edge(turkey, moldova, 54), + Edge(turkey, belgium, 48), + Edge(turkey, czechia, 37), + Edge(turkey, sweden, 63), + Edge(turkey, portugal, 89), + Edge(turkey, lithuania, 61), + Edge(turkey, india, 200), + Edge(turkey, italy, 53), + Edge(turkey, vietnam, 379), + Edge(turkey, romania, 42), + Edge(turkey, norway, 58), + Edge(turkey, south_africa, 212), + Edge(turkey, mexico, 199), + Edge(turkey, denmark, 58), + Edge(turkey, ukraine, 64), + Edge(turkey, slovenia, 59), + Edge(turkey, israel, 97), + Edge(turkey, new_zeland, 315), + Edge(turkey, argentina, 264), + Edge(turkey, thailand, 257), + Edge(turkey, bulgaria, 33), + Edge(turkey, malta, 72), + Edge(turkey, malayasia, 198), + Edge(turkey, latvia, 67), + Edge(turkey, turkey, 2), + Edge(turkey, greece, 50), + Edge(turkey, slovakia, 43), + Edge(turkey, croatia, 54), + Edge(turkey, united_arab_emirates, 151), + Edge(turkey, hungary, 61), + Edge(turkey, luxembourg, 51), + Edge(turkey, indonesia, 402), + Edge(turkey, chile, 260), + Edge(turkey, estonia, 65), + Edge(greece, united_states, 126), + Edge(greece, germany, 43), + Edge(greece, france, 54), + Edge(greece, finland, 67), + Edge(greece, canada, 142), + Edge(greece, singapore, 275), + Edge(greece, united_kingdom, 56), + Edge(greece, japan, 312), + Edge(greece, netherlands, 51), + Edge(greece, south_korea, 327), + Edge(greece, austria, 32), + Edge(greece, australia, 306), + Edge(greece, switzerland, 45), + Edge(greece, hong_kong, 269), + Edge(greece, ireland, 68), + Edge(greece, china, 300), + Edge(greece, russia, 82), + Edge(greece, spain, 69), + Edge(greece, taiwan, 323), + Edge(greece, poland, 39), + Edge(greece, moldova, 54), + Edge(greece, belgium, 54), + Edge(greece, czechia, 26), + Edge(greece, sweden, 64), + Edge(greece, portugal, 90), + Edge(greece, lithuania, 55), + Edge(greece, india, 262), + Edge(greece, italy, 48), + Edge(greece, vietnam, 383), + Edge(greece, romania, 46), + Edge(greece, norway, 148), + Edge(greece, south_africa, 222), + Edge(greece, mexico, 192), + Edge(greece, denmark, 48), + Edge(greece, ukraine, 48), + Edge(greece, slovenia, 44), + Edge(greece, israel, 107), + Edge(greece, new_zeland, 315), + Edge(greece, argentina, 290), + Edge(greece, thailand, 260), + Edge(greece, bulgaria, 14), + Edge(greece, malta, 77), + Edge(greece, malayasia, 197), + Edge(greece, latvia, 59), + Edge(greece, turkey, 50), + Edge(greece, greece, 2), + Edge(greece, slovakia, 26), + Edge(greece, croatia, 41), + Edge(greece, united_arab_emirates, 166), + Edge(greece, hungary, 38), + Edge(greece, luxembourg, 49), + Edge(greece, indonesia, 281), + Edge(greece, chile, 256), + Edge(greece, estonia, 73), + Edge(slovakia, united_states, 95), + Edge(slovakia, germany, 13), + Edge(slovakia, france, 23), + Edge(slovakia, finland, 38), + Edge(slovakia, canada, 112), + Edge(slovakia, singapore, 253), + Edge(slovakia, united_kingdom, 27), + Edge(slovakia, japan, 283), + Edge(slovakia, netherlands, 24), + Edge(slovakia, south_korea, 292), + Edge(slovakia, austria, 2), + Edge(slovakia, australia, 276), + Edge(slovakia, switzerland, 14), + Edge(slovakia, hong_kong, 260), + Edge(slovakia, ireland, 39), + Edge(slovakia, china, 249), + Edge(slovakia, russia, 57), + Edge(slovakia, spain, 40), + Edge(slovakia, taiwan, 291), + Edge(slovakia, poland, 14), + Edge(slovakia, moldova, 29), + Edge(slovakia, belgium, 24), + Edge(slovakia, czechia, 1), + Edge(slovakia, sweden, 37), + Edge(slovakia, portugal, 62), + Edge(slovakia, lithuania, 30), + Edge(slovakia, india, 237), + Edge(slovakia, italy, 17), + Edge(slovakia, vietnam, 354), + Edge(slovakia, romania, 27), + Edge(slovakia, norway, 122), + Edge(slovakia, south_africa, 188), + Edge(slovakia, mexico, 165), + Edge(slovakia, denmark, 21), + Edge(slovakia, ukraine, 26), + Edge(slovakia, slovenia, 24), + Edge(slovakia, israel, 81), + Edge(slovakia, new_zeland, 297), + Edge(slovakia, argentina, 262), + Edge(slovakia, thailand, 193), + Edge(slovakia, bulgaria, 14), + Edge(slovakia, malta, 47), + Edge(slovakia, malayasia, 267), + Edge(slovakia, latvia, 34), + Edge(slovakia, turkey, 42), + Edge(slovakia, greece, 26), + Edge(slovakia, slovakia, 2), + Edge(slovakia, croatia, 13), + Edge(slovakia, united_arab_emirates, 136), + Edge(slovakia, hungary, 7), + Edge(slovakia, luxembourg, 19), + Edge(slovakia, indonesia, 262), + Edge(slovakia, chile, 235), + Edge(slovakia, estonia, 46), + Edge(croatia, united_states, 93), + Edge(croatia, germany, 18), + Edge(croatia, france, 34), + Edge(croatia, finland, 40), + Edge(croatia, canada, 106), + Edge(croatia, singapore, 163), + Edge(croatia, united_kingdom, 34), + Edge(croatia, japan, 225), + Edge(croatia, netherlands, 45), + Edge(croatia, south_korea, 282), + Edge(croatia, austria, 6), + Edge(croatia, australia, 272), + Edge(croatia, switzerland, 22), + Edge(croatia, hong_kong, 242), + Edge(croatia, ireland, 36), + Edge(croatia, china, 351), + Edge(croatia, russia, 55), + Edge(croatia, spain, 39), + Edge(croatia, taiwan, 247), + Edge(croatia, poland, 50), + Edge(croatia, moldova, 27), + Edge(croatia, belgium, 27), + Edge(croatia, czechia, 14), + Edge(croatia, sweden, 47), + Edge(croatia, portugal, 68), + Edge(croatia, lithuania, 25), + Edge(croatia, india, 168), + Edge(croatia, italy, 18), + Edge(croatia, vietnam, 284), + Edge(croatia, romania, 29), + Edge(croatia, norway, 38), + Edge(croatia, south_africa, 186), + Edge(croatia, mexico, 161), + Edge(croatia, denmark, 35), + Edge(croatia, ukraine, 34), + Edge(croatia, slovenia, 12), + Edge(croatia, israel, 81), + Edge(croatia, new_zeland, 308), + Edge(croatia, argentina, 269), + Edge(croatia, thailand, 187), + Edge(croatia, bulgaria, 17), + Edge(croatia, malta, 51), + Edge(croatia, malayasia, 169), + Edge(croatia, latvia, 30), + Edge(croatia, turkey, 55), + Edge(croatia, greece, 41), + Edge(croatia, slovakia, 13), + Edge(croatia, croatia, 2), + Edge(croatia, united_arab_emirates, 128), + Edge(croatia, hungary, 12), + Edge(croatia, luxembourg, 31), + Edge(croatia, indonesia, 185), + Edge(croatia, chile, 238), + Edge(croatia, estonia, 36), + Edge(united_arab_emirates, united_states, 175), + Edge(united_arab_emirates, germany, 111), + Edge(united_arab_emirates, france, 128), + Edge(united_arab_emirates, finland, 118), + Edge(united_arab_emirates, canada, 190), + Edge(united_arab_emirates, singapore, 339), + Edge(united_arab_emirates, united_kingdom, 177), + Edge(united_arab_emirates, japan, 342), + Edge(united_arab_emirates, netherlands, 109), + Edge(united_arab_emirates, south_korea, 313), + Edge(united_arab_emirates, austria, 128), + Edge(united_arab_emirates, australia, 285), + Edge(united_arab_emirates, switzerland, 122), + Edge(united_arab_emirates, hong_kong, 229), + Edge(united_arab_emirates, ireland, 131), + Edge(united_arab_emirates, china, 154), + Edge(united_arab_emirates, russia, 134), + Edge(united_arab_emirates, spain, 120), + Edge(united_arab_emirates, taiwan, 163), + Edge(united_arab_emirates, poland, 143), + Edge(united_arab_emirates, moldova, 131), + Edge(united_arab_emirates, belgium, 114), + Edge(united_arab_emirates, czechia, 136), + Edge(united_arab_emirates, sweden, 145), + Edge(united_arab_emirates, portugal, 136), + Edge(united_arab_emirates, lithuania, 124), + Edge(united_arab_emirates, india, 239), + Edge(united_arab_emirates, italy, 127), + Edge(united_arab_emirates, vietnam, 239), + Edge(united_arab_emirates, romania, 127), + Edge(united_arab_emirates, norway, 146), + Edge(united_arab_emirates, south_africa, 198), + Edge(united_arab_emirates, mexico, 239), + Edge(united_arab_emirates, denmark, 130), + Edge(united_arab_emirates, ukraine, 155), + Edge(united_arab_emirates, slovenia, 138), + Edge(united_arab_emirates, israel, 163), + Edge(united_arab_emirates, new_zeland, 296), + Edge(united_arab_emirates, argentina, 344), + Edge(united_arab_emirates, thailand, 211), + Edge(united_arab_emirates, bulgaria, 128), + Edge(united_arab_emirates, malta, 156), + Edge(united_arab_emirates, malayasia, 280), + Edge(united_arab_emirates, latvia, 143), + Edge(united_arab_emirates, turkey, 149), + Edge(united_arab_emirates, greece, 166), + Edge(united_arab_emirates, slovakia, 136), + Edge(united_arab_emirates, croatia, 127), + Edge(united_arab_emirates, united_arab_emirates, 2), + Edge(united_arab_emirates, hungary, 116), + Edge(united_arab_emirates, luxembourg, 137), + Edge(united_arab_emirates, indonesia, 146), + Edge(united_arab_emirates, chile, 319), + Edge(united_arab_emirates, estonia, 132), + Edge(hungary, united_states, 155), + Edge(hungary, germany, 17), + Edge(hungary, france, 27), + Edge(hungary, finland, 39), + Edge(hungary, canada, 125), + Edge(hungary, singapore, 257), + Edge(hungary, united_kingdom, 28), + Edge(hungary, japan, 242), + Edge(hungary, netherlands, 36), + Edge(hungary, south_korea, 313), + Edge(hungary, austria, 6), + Edge(hungary, australia, 291), + Edge(hungary, switzerland, 22), + Edge(hungary, hong_kong, 269), + Edge(hungary, ireland, 42), + Edge(hungary, china, 362), + Edge(hungary, russia, 60), + Edge(hungary, spain, 48), + Edge(hungary, taiwan, 300), + Edge(hungary, poland, 45), + Edge(hungary, moldova, 29), + Edge(hungary, belgium, 28), + Edge(hungary, czechia, 8), + Edge(hungary, sweden, 48), + Edge(hungary, portugal, 70), + Edge(hungary, lithuania, 34), + Edge(hungary, india, 172), + Edge(hungary, italy, 25), + Edge(hungary, vietnam, 243), + Edge(hungary, romania, 23), + Edge(hungary, norway, 46), + Edge(hungary, south_africa, 186), + Edge(hungary, mexico, 185), + Edge(hungary, denmark, 32), + Edge(hungary, ukraine, 32), + Edge(hungary, slovenia, 11), + Edge(hungary, israel, 80), + Edge(hungary, new_zeland, 298), + Edge(hungary, argentina, 252), + Edge(hungary, thailand, 196), + Edge(hungary, bulgaria, 14), + Edge(hungary, malta, 50), + Edge(hungary, malayasia, 186), + Edge(hungary, latvia, 58), + Edge(hungary, turkey, 61), + Edge(hungary, greece, 38), + Edge(hungary, slovakia, 7), + Edge(hungary, croatia, 12), + Edge(hungary, united_arab_emirates, 115), + Edge(hungary, hungary, 2), + Edge(hungary, luxembourg, 27), + Edge(hungary, indonesia, 275), + Edge(hungary, chile, 244), + Edge(hungary, estonia, 39), + Edge(luxembourg, united_states, 89), + Edge(luxembourg, germany, 9), + Edge(luxembourg, france, 8), + Edge(luxembourg, finland, 36), + Edge(luxembourg, canada, 108), + Edge(luxembourg, singapore, 179), + Edge(luxembourg, united_kingdom, 16), + Edge(luxembourg, japan, 240), + Edge(luxembourg, netherlands, 11), + Edge(luxembourg, south_korea, 278), + Edge(luxembourg, austria, 17), + Edge(luxembourg, australia, 285), + Edge(luxembourg, switzerland, 20), + Edge(luxembourg, hong_kong, 249), + Edge(luxembourg, ireland, 25), + Edge(luxembourg, china, 292), + Edge(luxembourg, russia, 47), + Edge(luxembourg, spain, 25), + Edge(luxembourg, taiwan, 285), + Edge(luxembourg, poland, 29), + Edge(luxembourg, moldova, 53), + Edge(luxembourg, belgium, 9), + Edge(luxembourg, czechia, 19), + Edge(luxembourg, sweden, 34), + Edge(luxembourg, portugal, 53), + Edge(luxembourg, lithuania, 41), + Edge(luxembourg, india, 220), + Edge(luxembourg, italy, 22), + Edge(luxembourg, vietnam, 281), + Edge(luxembourg, romania, 44), + Edge(luxembourg, norway, 33), + Edge(luxembourg, south_africa, 178), + Edge(luxembourg, mexico, 142), + Edge(luxembourg, denmark, 20), + Edge(luxembourg, ukraine, 46), + Edge(luxembourg, slovenia, 32), + Edge(luxembourg, israel, 67), + Edge(luxembourg, new_zeland, 298), + Edge(luxembourg, argentina, 226), + Edge(luxembourg, thailand, 183), + Edge(luxembourg, bulgaria, 47), + Edge(luxembourg, malta, 46), + Edge(luxembourg, malayasia, 177), + Edge(luxembourg, latvia, 37), + Edge(luxembourg, turkey, 50), + Edge(luxembourg, greece, 49), + Edge(luxembourg, slovakia, 19), + Edge(luxembourg, croatia, 30), + Edge(luxembourg, united_arab_emirates, 136), + Edge(luxembourg, hungary, 27), + Edge(luxembourg, luxembourg, 2), + Edge(luxembourg, indonesia, 262), + Edge(luxembourg, chile, 213), + Edge(luxembourg, estonia, 35), + Edge(indonesia, united_states, 233), + Edge(indonesia, germany, 181), + Edge(indonesia, france, 269), + Edge(indonesia, finland, 284), + Edge(indonesia, canada, 258), + Edge(indonesia, singapore, 13), + Edge(indonesia, united_kingdom, 192), + Edge(indonesia, japan, 79), + Edge(indonesia, netherlands, 264), + Edge(indonesia, south_korea, 210), + Edge(indonesia, austria, 200), + Edge(indonesia, australia, 117), + Edge(indonesia, switzerland, 186), + Edge(indonesia, hong_kong, 47), + Edge(indonesia, ireland, 283), + Edge(indonesia, china, 127), + Edge(indonesia, russia, 198), + Edge(indonesia, spain, 215), + Edge(indonesia, taiwan, 77), + Edge(indonesia, poland, 290), + Edge(indonesia, moldova, 208), + Edge(indonesia, belgium, 355), + Edge(indonesia, czechia, 259), + Edge(indonesia, sweden, 282), + Edge(indonesia, portugal, 305), + Edge(indonesia, lithuania, 293), + Edge(indonesia, india, 124), + Edge(indonesia, italy, 270), + Edge(indonesia, vietnam, 62), + Edge(indonesia, romania, 293), + Edge(indonesia, norway, 368), + Edge(indonesia, south_africa, 282), + Edge(indonesia, mexico, 273), + Edge(indonesia, denmark, 357), + Edge(indonesia, ukraine, 284), + Edge(indonesia, slovenia, 184), + Edge(indonesia, israel, 233), + Edge(indonesia, new_zeland, 130), + Edge(indonesia, argentina, 399), + Edge(indonesia, thailand, 43), + Edge(indonesia, bulgaria, 290), + Edge(indonesia, malta, 384), + Edge(indonesia, malayasia, 58), + Edge(indonesia, latvia, 371), + Edge(indonesia, turkey, 401), + Edge(indonesia, greece, 282), + Edge(indonesia, slovakia, 262), + Edge(indonesia, croatia, 184), + Edge(indonesia, united_arab_emirates, 145), + Edge(indonesia, hungary, 276), + Edge(indonesia, luxembourg, 260), + Edge(indonesia, indonesia, 2), + Edge(indonesia, chile, 404), + Edge(indonesia, estonia, 191), + Edge(chile, united_states, 132), + Edge(chile, germany, 213), + Edge(chile, france, 204), + Edge(chile, finland, 237), + Edge(chile, canada, 153), + Edge(chile, singapore, 358), + Edge(chile, united_kingdom, 201), + Edge(chile, japan, 356), + Edge(chile, netherlands, 227), + Edge(chile, south_korea, 316), + Edge(chile, austria, 226), + Edge(chile, australia, 399), + Edge(chile, switzerland, 233), + Edge(chile, hong_kong, 357), + Edge(chile, ireland, 223), + Edge(chile, china, 400), + Edge(chile, russia, 257), + Edge(chile, spain, 245), + Edge(chile, taiwan, 379), + Edge(chile, poland, 237), + Edge(chile, moldova, 254), + Edge(chile, belgium, 211), + Edge(chile, czechia, 229), + Edge(chile, sweden, 228), + Edge(chile, portugal, 243), + Edge(chile, lithuania, 247), + Edge(chile, india, 343), + Edge(chile, italy, 229), + Edge(chile, vietnam, 378), + Edge(chile, romania, 247), + Edge(chile, norway, 223), + Edge(chile, south_africa, 415), + Edge(chile, mexico, 155), + Edge(chile, denmark, 223), + Edge(chile, ukraine, 250), + Edge(chile, slovenia, 225), + Edge(chile, israel, 263), + Edge(chile, new_zeland, 333), + Edge(chile, argentina, 158), + Edge(chile, thailand, 374), + Edge(chile, bulgaria, 260), + Edge(chile, malta, 248), + Edge(chile, malayasia, 371), + Edge(chile, latvia, 247), + Edge(chile, turkey, 259), + Edge(chile, greece, 256), + Edge(chile, slovakia, 234), + Edge(chile, croatia, 237), + Edge(chile, united_arab_emirates, 319), + Edge(chile, hungary, 243), + Edge(chile, luxembourg, 213), + Edge(chile, indonesia, 403), + Edge(chile, chile, 2), + Edge(chile, estonia, 252), + Edge(estonia, united_states, 99), + Edge(estonia, germany, 29), + Edge(estonia, france, 40), + Edge(estonia, finland, 7), + Edge(estonia, canada, 111), + Edge(estonia, singapore, 176), + Edge(estonia, united_kingdom, 35), + Edge(estonia, japan, 241), + Edge(estonia, netherlands, 30), + Edge(estonia, south_korea, 289), + Edge(estonia, austria, 30), + Edge(estonia, australia, 286), + Edge(estonia, switzerland, 31), + Edge(estonia, hong_kong, 251), + Edge(estonia, ireland, 38), + Edge(estonia, china, 306), + Edge(estonia, russia, 23), + Edge(estonia, spain, 57), + Edge(estonia, taiwan, 263), + Edge(estonia, poland, 21), + Edge(estonia, moldova, 55), + Edge(estonia, belgium, 31), + Edge(estonia, czechia, 46), + Edge(estonia, sweden, 7), + Edge(estonia, portugal, 74), + Edge(estonia, lithuania, 10), + Edge(estonia, india, 227), + Edge(estonia, italy, 33), + Edge(estonia, vietnam, 298), + Edge(estonia, romania, 49), + Edge(estonia, norway, 16), + Edge(estonia, south_africa, 192), + Edge(estonia, mexico, 165), + Edge(estonia, denmark, 28), + Edge(estonia, ukraine, 39), + Edge(estonia, slovenia, 37), + Edge(estonia, israel, 84), + Edge(estonia, new_zeland, 316), + Edge(estonia, argentina, 270), + Edge(estonia, thailand, 228), + Edge(estonia, bulgaria, 48), + Edge(estonia, malta, 62), + Edge(estonia, malayasia, 181), + Edge(estonia, latvia, 7), + Edge(estonia, turkey, 66), + Edge(estonia, greece, 73), + Edge(estonia, slovakia, 46), + Edge(estonia, croatia, 36), + Edge(estonia, united_arab_emirates, 134), + Edge(estonia, hungary, 39), + Edge(estonia, luxembourg, 36), + Edge(estonia, indonesia, 193), + Edge(estonia, chile, 252), + Edge(estonia, estonia, 2) ] if len(sys.argv) < 3: diff --git a/new-latencies-plots/30slots_batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png b/new-latencies-plots/30slots_batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png deleted file mode 100644 index 81b059b..0000000 Binary files a/new-latencies-plots/30slots_batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png and /dev/null differ diff --git a/new-latencies-plots/30slots_batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png b/new-latencies-plots/30slots_batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png deleted file mode 100644 index 7e9dd6b..0000000 Binary files a/new-latencies-plots/30slots_batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png and /dev/null differ diff --git a/plot_propagation.py b/plot_propagation.py index c5953d5..0cdbedf 100644 --- a/plot_propagation.py +++ b/plot_propagation.py @@ -206,7 +206,7 @@ def plot_propagation(node_count: int, output_file: str = 'message_propagation.pn # Calculate percentile times percentile_times = {} - percentiles = [50, 75, 90, 95, 99] + percentiles = [25, 50, 66, 75, 90, 95, 99] for p in percentiles: target_percentage = p # Direct percentage value @@ -224,7 +224,7 @@ def plot_propagation(node_count: int, output_file: str = 'message_propagation.pn percentile_times[100] = timestamps[-1] # Last timestamp is when 100% is reached # Add percentile markers to plot - colors = ['orange', 'purple', 'brown', 'pink', 'gray'] + colors = ['green', 'orange', 'black', 'purple', 'brown', 'pink', 'gray'] for i, p in enumerate(percentiles): if percentile_times[p] is not None: plt.axvline(x=percentile_times[p], color=colors[i], linestyle=':', alpha=0.7, diff --git a/plots/4x-compute.png b/plots/4x-compute.png new file mode 100644 index 0000000..366e54a Binary files /dev/null and b/plots/4x-compute.png differ diff --git a/plots/baseline_plot.png b/plots/baseline_plot.png new file mode 100644 index 0000000..76ccc6c Binary files /dev/null and b/plots/baseline_plot.png differ diff --git a/plots/batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png b/plots/batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png deleted file mode 100644 index 9d4d84e..0000000 Binary files a/plots/batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png and /dev/null differ diff --git a/plots/batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png b/plots/batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png deleted file mode 100644 index 09db30e..0000000 Binary files a/plots/batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png and /dev/null differ diff --git a/plots/doubling-compute.png b/plots/doubling-compute.png new file mode 100644 index 0000000..dfff62c Binary files /dev/null and b/plots/doubling-compute.png differ diff --git a/simconfig.yaml b/simconfig.yaml index 1d4eb61..fdc120d 100644 --- a/simconfig.yaml +++ b/simconfig.yaml @@ -5,8 +5,8 @@ client_split: lighthouse: 56 prysm_validator: batch_interval: 50 - batch_verifier_time: 4500 + batch_verifier_time: 18000 lighthouse_validator: - validator_time: 2500 + validator_time: 10000 slots_to_run: 30 msg_size: 192 diff --git a/topic-name-increase-plots/30slots_batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png b/topic-name-increase-plots/30slots_batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png deleted file mode 100644 index 8b40211..0000000 Binary files a/topic-name-increase-plots/30slots_batch_50ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499.png and /dev/null differ diff --git a/topic-name-increase-plots/30slots_batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499_2.png b/topic-name-increase-plots/30slots_batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499_2.png deleted file mode 100644 index 1945683..0000000 Binary files a/topic-name-increase-plots/30slots_batch_5ms_node905_mesh_nodes390_mesh_attesters16_non_mesh_attesters499_2.png and /dev/null differ diff --git a/topology/gen/main.go b/topology/gen/main.go index 698ac1e..5170690 100644 --- a/topology/gen/main.go +++ b/topology/gen/main.go @@ -89,7 +89,7 @@ func main() { nonMeshAttesterNodeIds[*meshNodeCount + *meshAttesterCount + i] = true } - prysmNodeIds, lighthouseNodeIds := topology.SplitNodeIdsByClientSplit(*nodeCount, simConfig.ClientSplit.PrysmPercentage(), simConfig.ClientSplit.LighthousePercentage()) + prysmNodeIds, lighthouseNodeIds := topology.SplitNodeIdsByClientSplit(meshNodeIds, meshAttesterNodeIds, nonMeshAttesterNodeIds, simConfig.ClientSplit.PrysmPercentage(), simConfig.ClientSplit.LighthousePercentage()) // Create topology based on type var topo *topology.Topology diff --git a/topology/generators.go b/topology/generators.go index e1b6f7b..e907dbf 100644 --- a/topology/generators.go +++ b/topology/generators.go @@ -2,38 +2,66 @@ package topology import ( "log" + "math/rand" ) -func SplitNodeIdsByClientSplit(nodeCount int, prysmPercentage float64, lighthousePercentage float64) (map[int]bool, map[int]bool) { - prysmNodeCount := int(float64(nodeCount) * prysmPercentage) - lighthouseNodeCount := int(float64(nodeCount) * lighthousePercentage) +func SplitNodeIdsByClientSplit(meshNodeIds map[int]bool, meshAttesterNodeIds map[int]bool, nonMeshAttesterNodeIds map[int]bool, prysmPercentage float64, lighthousePercentage float64) (map[int]bool, map[int]bool) { + totalMeshNodes := len(meshNodeIds) + len(meshAttesterNodeIds) + totalNonMeshNodes := len(nonMeshAttesterNodeIds) - log.Printf("Prysm node percentage: %f, Lighthouse node percentage: %f", prysmPercentage, lighthousePercentage) - log.Printf("Prysm node count: %d, Lighthouse node count: %d", prysmNodeCount, lighthouseNodeCount) + meshPrysmNodeCount := int(float64(totalMeshNodes) * prysmPercentage) + meshLighthouseNodeCount := int(float64(totalMeshNodes) * lighthousePercentage) + nonMeshPrysmNodeCount := int(float64(totalNonMeshNodes) * prysmPercentage) + nonMeshLighthouseNodeCount := int(float64(totalNonMeshNodes) * lighthousePercentage) + + log.Printf("Mesh Prysm node count: %d, Mesh Lighthouse node count: %d, Non Mesh Prysm node count: %d, Non Mesh Lighthouse node count: %d", meshPrysmNodeCount, meshLighthouseNodeCount, nonMeshPrysmNodeCount, nonMeshLighthouseNodeCount) prysmNodeIds := make(map[int]bool) lighthouseNodeIds := make(map[int]bool) - allNodeIds := make([]int, nodeCount) - for i := 0; i < nodeCount; i++ { - allNodeIds[i] = i + allMeshNodeIds := make([]int, totalMeshNodes) + for idx := range meshNodeIds { + allMeshNodeIds[idx] = idx + } + for idx := range meshAttesterNodeIds { + allMeshNodeIds[idx] = idx + } + + // Shuffle allMeshNodeIds to randomize client assignment + for i := len(allMeshNodeIds) - 1; i > 0; i-- { + j := rand.Intn(i + 1) + allMeshNodeIds[i], allMeshNodeIds[j] = allMeshNodeIds[j], allMeshNodeIds[i] + } + + for i := 0; i < meshPrysmNodeCount; i++ { + prysmNodeIds[allMeshNodeIds[i]] = true + } + + for i := meshPrysmNodeCount; i < totalMeshNodes; i++ { + lighthouseNodeIds[allMeshNodeIds[i]] = true + } + + allNonMeshNodeIds := make([]int, totalNonMeshNodes) + idxCounter := 0 + for idx := range nonMeshAttesterNodeIds { + allNonMeshNodeIds[idxCounter] = idx + idxCounter++ } - // Shuffle the node IDs for random allocation - for i := len(allNodeIds) - 1; i > 0; i-- { - j := (i * 17 + 42) % (i + 1) // Simple deterministic shuffle - allNodeIds[i], allNodeIds[j] = allNodeIds[j], allNodeIds[i] + for i := len(allNonMeshNodeIds) - 1; i > 0; i-- { + j := rand.Intn(i + 1) + allNonMeshNodeIds[i], allNonMeshNodeIds[j] = allNonMeshNodeIds[j], allNonMeshNodeIds[i] } - // Assign first prysmNodeCount nodes to Prysm - for i := 0; i < prysmNodeCount; i++ { - prysmNodeIds[allNodeIds[i]] = true + // Assign first nonMeshPrysmNodeCount nodes to Prysm + for i := 0; i < nonMeshPrysmNodeCount; i++ { + prysmNodeIds[allNonMeshNodeIds[i]] = true } // Assign remaining nodes to Lighthouse - for i := prysmNodeCount; i < nodeCount; i++ { - lighthouseNodeIds[allNodeIds[i]] = true + for i := nonMeshPrysmNodeCount; i < totalNonMeshNodes; i++ { + lighthouseNodeIds[allNonMeshNodeIds[i]] = true } return prysmNodeIds, lighthouseNodeIds diff --git a/topology/generators_test.go b/topology/generators_test.go index 62cf235..23e1cd3 100644 --- a/topology/generators_test.go +++ b/topology/generators_test.go @@ -40,7 +40,7 @@ func TestRandomRegularTopology(t *testing.T) { nonMeshAttesterNodeIds[testCase.meshNodeCount+testCase.meshAttesterCount+i] = true } - prysmNodeIds, lighthouseNodeIds := SplitNodeIdsByClientSplit(testCase.nodeCount, 0.5, 0.5) + prysmNodeIds, lighthouseNodeIds := SplitNodeIdsByClientSplit(meshNodeIds, meshAttesterNodeIds, nonMeshAttesterNodeIds, 0.5, 0.5) topo := GenerateRandomRegular(testCase.nodeCount, testCase.degree, testCase.nonMeshNodeDegree,meshNodeIds, meshAttesterNodeIds, nonMeshAttesterNodeIds, prysmNodeIds, lighthouseNodeIds) require.NotNil(t, topo, "Topology should not be nil") @@ -64,21 +64,74 @@ func TestRandomRegularTopology(t *testing.T) { func TestClientSplit(t *testing.T) { testCases := []struct { description string - nodeCount int + meshNodes int + meshAttesterNodes int + nonMeshAttesterNodes int prysmPercentage float64 lighthousePercentage float64 }{ - {"50% Prysm, 50% Lighthouse", 10, 0.5, 0.5}, - {"70% Prysm, 30% Lighthouse", 20, 0.7, 0.3}, - {"30% Prysm, 70% Lighthouse", 30, 0.3, 0.7}, + {"50% Prysm, 50% Lighthouse", 10, 10, 10, 0.5, 0.5}, + {"70% Prysm, 30% Lighthouse", 20, 10, 10, 0.7, 0.3}, + {"30% Prysm, 70% Lighthouse", 30, 10, 10, 0.3, 0.7}, } for _, testCase := range testCases { t.Run(testCase.description, func(t *testing.T) { - prysmNodeIds, lighthouseNodeIds := SplitNodeIdsByClientSplit(testCase.nodeCount, testCase.prysmPercentage, testCase.lighthousePercentage) + meshNodeIds := make(map[int]bool) + meshAttesterNodeIds := make(map[int]bool) + nonMeshAttesterNodeIds := make(map[int]bool) + + for i := 0; i < testCase.meshNodes; i++ { + meshNodeIds[i] = true + } + + for i := 0; i < testCase.meshAttesterNodes; i++ { + meshAttesterNodeIds[testCase.meshNodes+i] = true + } + + for i := 0; i < testCase.nonMeshAttesterNodes; i++ { + nonMeshAttesterNodeIds[testCase.meshNodes+testCase.meshAttesterNodes+i] = true + } + + totalNodeCount := testCase.meshNodes + testCase.meshAttesterNodes + testCase.nonMeshAttesterNodes; + + prysmNodeIds, lighthouseNodeIds := SplitNodeIdsByClientSplit(meshNodeIds, meshAttesterNodeIds, nonMeshAttesterNodeIds, testCase.prysmPercentage, testCase.lighthousePercentage) require.NotNil(t, prysmNodeIds, "Prysm node IDs should not be nil") require.NotNil(t, lighthouseNodeIds, "Lighthouse node IDs should not be nil") - require.Equal(t, testCase.nodeCount, len(prysmNodeIds) + len(lighthouseNodeIds), "Total node count should be equal to the sum of Prysm and Lighthouse node counts") + require.Equal(t, totalNodeCount, len(prysmNodeIds) + len(lighthouseNodeIds), "Total node count should be equal to the sum of Prysm and Lighthouse node counts") + + totalMeshNodeIds := len(meshNodeIds) + len(meshAttesterNodeIds) + totalNonMeshNodeIds := len(nonMeshAttesterNodeIds) + + meshPrysmNodeCount := testCase.prysmPercentage * float64(totalMeshNodeIds) + meshLighthouseNodeCount := testCase.lighthousePercentage * float64(totalMeshNodeIds) + nonMeshPrysmNodeCount := testCase.prysmPercentage * float64(totalNonMeshNodeIds) + nonMeshLighthouseNodeCount := testCase.lighthousePercentage * float64(totalNonMeshNodeIds) + + meshPrysmNodeIds := []int{} + meshLighthouseNodeIds := []int{} + nonMeshPrysmNodeIds := []int{} + nonMeshLighthouseNodeIds := []int{} + for id := range prysmNodeIds { + if id < totalMeshNodeIds { + meshPrysmNodeIds = append(meshPrysmNodeIds, id) + } else { + nonMeshPrysmNodeIds = append(nonMeshPrysmNodeIds, id) + } + } + for id := range lighthouseNodeIds { + if id < totalMeshNodeIds { + meshLighthouseNodeIds = append(meshLighthouseNodeIds, id) + } else { + nonMeshLighthouseNodeIds = append(nonMeshLighthouseNodeIds, id) + } + } + + require.Equal(t, meshPrysmNodeCount, float64(len(meshPrysmNodeIds)), "Mesh Prysm node count should be equal to the mesh Prysm node count") + require.Equal(t, meshLighthouseNodeCount, float64(len(meshLighthouseNodeIds)), "Mesh Lighthouse node count should be equal to the mesh Lighthouse node count") + + require.Equal(t, nonMeshPrysmNodeCount, float64(len(nonMeshPrysmNodeIds)), "Non Mesh Prysm node count should be equal to the non Mesh Prysm node count") + require.Equal(t, nonMeshLighthouseNodeCount, float64(len(nonMeshLighthouseNodeIds)), "Non Mesh Lighthouse node count should be equal to the non Mesh Lighthouse node count") }) }